Split out nsSingleSignonPrompt into its own source file.

This commit is contained in:
bryner%brianryner.com 2003-08-05 05:40:14 +00:00
Родитель a2acff55c9
Коммит c0a8992faa
5 изменённых файлов: 356 добавлений и 269 удалений

Просмотреть файл

@ -63,6 +63,10 @@ REQUIRES = \
XPIDLSRCS = nsIPassword.idl
CPPSRCS = nsPasswordManager.cpp
CPPSRCS = \
nsPasswordManager.cpp \
nsSingleSignonPrompt.cpp \
$(NULL)
include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -78,11 +78,6 @@ static nsIStringBundle* sPMBundle;
static nsISecretDecoderRing* sDecoderRing;
static nsPasswordManager* sPasswordManager;
static void PMLocalizedString(const nsAString& key, nsAString& aResult,
PRBool aFormatted = PR_FALSE,
const PRUnichar** aFormatArgs = nsnull,
PRUint32 aFormatArgsLength = 0);
class nsPasswordManager::SignonDataEntry
{
public:
@ -835,11 +830,11 @@ nsPasswordManager::Notify(nsIContent* aFormNode,
}
nsAutoString dialogTitle, dialogText, neverText;
PMLocalizedString(NS_LITERAL_STRING("savePasswordTitle"), dialogTitle);
PMLocalizedString(NS_LITERAL_STRING("savePasswordText"),
dialogText,
PR_TRUE);
PMLocalizedString(NS_LITERAL_STRING("neverForSite"), neverText);
GetLocalizedString(NS_LITERAL_STRING("savePasswordTitle"), dialogTitle);
GetLocalizedString(NS_LITERAL_STRING("savePasswordText"),
dialogText,
PR_TRUE);
GetLocalizedString(NS_LITERAL_STRING("neverForSite"), neverText);
PRInt32 selection;
prompt->ConfirmEx(dialogTitle.get(),
@ -914,8 +909,10 @@ nsPasswordManager::Notify(nsIContent* aFormNode,
}
nsAutoString dialogTitle, dialogText;
PMLocalizedString(NS_LITERAL_STRING("passwordChangeTitle"), dialogTitle);
PMLocalizedString(NS_LITERAL_STRING("userSelectText"), dialogText);
GetLocalizedString(NS_LITERAL_STRING("passwordChangeTitle"),
dialogTitle);
GetLocalizedString(NS_LITERAL_STRING("userSelectText"),
dialogText);
PRInt32 selection;
PRBool confirm;
@ -941,12 +938,13 @@ nsPasswordManager::Notify(nsIContent* aFormNode,
DecryptData(entry->userValue, ptUser);
const PRUnichar* formatArgs[1] = { ptUser.get() };
PMLocalizedString(NS_LITERAL_STRING("passwordChangeTitle"), dialogTitle);
PMLocalizedString(NS_LITERAL_STRING("passwordChangeText"),
dialogText,
PR_TRUE,
formatArgs,
1);
GetLocalizedString(NS_LITERAL_STRING("passwordChangeTitle"),
dialogTitle);
GetLocalizedString(NS_LITERAL_STRING("passwordChangeText"),
dialogText,
PR_TRUE,
formatArgs,
1);
PRBool confirm;
prompt->Confirm(dialogTitle.get(), dialogText.get(), &confirm);
@ -1634,228 +1632,12 @@ nsPasswordManager::AttachToInput(nsIDOMHTMLInputElement* aElement)
//////////////////////////////////////
// nsSingleSignonPrompt
NS_IMPL_ISUPPORTS2(nsSingleSignonPrompt,
nsIAuthPromptWrapper,
nsIAuthPrompt)
// nsIAuthPrompt
NS_IMETHODIMP
nsSingleSignonPrompt::Prompt(const PRUnichar* aDialogTitle,
const PRUnichar* aText,
const PRUnichar* aPasswordRealm,
PRUint32 aSavePassword,
const PRUnichar* aDefaultText,
PRUnichar** aResult,
PRBool* aConfirm)
{
nsAutoString checkMsg;
nsString emptyString;
PRBool checkValue = PR_FALSE;
PRBool *checkPtr = nsnull;
PRUnichar* value = nsnull;
nsCOMPtr<nsIPasswordManagerInternal> mgrInternal;
if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) {
if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) {
PMLocalizedString(NS_LITERAL_STRING("rememberValue"), checkMsg);
checkPtr = &checkValue;
}
mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID);
nsCAutoString outHost;
nsAutoString outUser, outPassword;
mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm),
emptyString,
emptyString,
outHost,
outUser,
outPassword);
value = ToNewUnicode(outUser);
}
mPrompt->Prompt(aDialogTitle,
aText,
&value,
checkMsg.get(),
checkPtr,
aConfirm);
if (*aConfirm) {
if (checkValue && value[0] != '\0') {
// The user requested that we save the value
// TODO: support SAVE_PASSWORD_FOR_SESSION
nsCOMPtr<nsIPasswordManager> manager = do_QueryInterface(mgrInternal);
manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm),
nsDependentString(value),
emptyString);
}
*aResult = value;
} else {
if (value)
nsMemory::Free(value);
*aResult = nsnull;
}
return NS_OK;
}
NS_IMETHODIMP
nsSingleSignonPrompt::PromptUsernameAndPassword(const PRUnichar* aDialogTitle,
const PRUnichar* aText,
const PRUnichar* aPasswordRealm,
PRUint32 aSavePassword,
PRUnichar** aUser,
PRUnichar** aPassword,
PRBool* aConfirm)
{
nsAutoString checkMsg;
nsString emptyString;
PRBool checkValue = PR_FALSE;
PRBool *checkPtr = nsnull;
PRUnichar *user = nsnull, *password = nsnull;
nsCOMPtr<nsIPasswordManagerInternal> mgrInternal;
if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) {
if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) {
PMLocalizedString(NS_LITERAL_STRING("rememberPassword"), checkMsg);
checkPtr = &checkValue;
}
mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID);
nsCAutoString outHost;
nsAutoString outUser, outPassword;
mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm),
emptyString,
emptyString,
outHost,
outUser,
outPassword);
user = ToNewUnicode(outUser);
password = ToNewUnicode(outPassword);
}
mPrompt->PromptUsernameAndPassword(aDialogTitle,
aText,
&user,
&password,
checkMsg.get(),
checkPtr,
aConfirm);
if (*aConfirm) {
if (checkValue && user[0] != '\0') {
// The user requested that we save the values
// TODO: support SAVE_PASSWORD_FOR_SESSION
nsCOMPtr<nsIPasswordManager> manager = do_QueryInterface(mgrInternal);
manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm),
nsDependentString(user),
nsDependentString(password));
}
*aUser = user;
*aPassword = password;
} else {
if (user)
nsMemory::Free(user);
if (password)
nsMemory::Free(password);
*aUser = *aPassword = nsnull;
}
return NS_OK;
}
NS_IMETHODIMP
nsSingleSignonPrompt::PromptPassword(const PRUnichar* aDialogTitle,
const PRUnichar* aText,
const PRUnichar* aPasswordRealm,
PRUint32 aSavePassword,
PRUnichar** aPassword,
PRBool* aConfirm)
{
nsAutoString checkMsg;
nsString emptyString;
PRBool checkValue = PR_FALSE;
PRBool *checkPtr = nsnull;
PRUnichar* password = nsnull;
nsCOMPtr<nsIPasswordManagerInternal> mgrInternal;
if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) {
if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) {
PMLocalizedString(NS_LITERAL_STRING("rememberPassword"), checkMsg);
checkPtr = &checkValue;
}
mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID);
nsCAutoString outHost;
nsAutoString outUser, outPassword;
mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm),
emptyString,
emptyString,
outHost,
outUser,
outPassword);
password = ToNewUnicode(outPassword);
}
mPrompt->PromptPassword(aDialogTitle,
aText,
&password,
checkMsg.get(),
checkPtr,
aConfirm);
if (*aConfirm) {
if (checkValue && password[0] != '\0') {
// The user requested that we save the password
// TODO: support SAVE_PASSWORD_FOR_SESSION
nsCOMPtr<nsIPasswordManager> manager = do_QueryInterface(mgrInternal);
manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm),
emptyString,
nsDependentString(password));
}
*aPassword = password;
} else {
if (password)
nsMemory::Free(password);
*aPassword = nsnull;
}
return NS_OK;
}
// nsIAuthPromptWrapper
NS_IMETHODIMP
nsSingleSignonPrompt::SetPromptDialogs(nsIPrompt* aDialogs)
{
mPrompt = aDialogs;
return NS_OK;
}
static void
PMLocalizedString(const nsAString& key,
nsAString& aResult,
PRBool aIsFormatted,
const PRUnichar** aFormatArgs,
PRUint32 aFormatArgsLength)
/* static */ void
nsPasswordManager::GetLocalizedString(const nsAString& key,
nsAString& aResult,
PRBool aIsFormatted,
const PRUnichar** aFormatArgs,
PRUint32 aFormatArgsLength)
{
if (!sPMBundle) {
nsCOMPtr<nsIStringBundleService> bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID);

Просмотреть файл

@ -40,10 +40,8 @@
#include "nsClassHashtable.h"
#include "nsDataHashtable.h"
#include "nsCOMPtr.h"
#include "nsIAuthPromptWrapper.h"
#include "nsIObserver.h"
#include "nsWeakReference.h"
#include "nsIPrompt.h"
#include "nsIFormSubmitObserver.h"
#include "nsIWebProgressListener.h"
#include "nsIDOMFocusListener.h"
@ -54,13 +52,7 @@
#define NS_PASSWORDMANAGER_CID \
{0x360565c4, 0x2ef3, 0x4f6a, {0xba, 0xb9, 0x94, 0xcc, 0xa8, 0x91, 0xb2, 0xa7}}
/* 1baf3398-f759-4a72-a21f-0abdc9cc9960 */
#define NS_SINGLE_SIGNON_PROMPT_CID \
{0x1baf3398, 0xf759, 0x4a72, {0xa2, 0x1f, 0x0a, 0xbd, 0xc9, 0xcc, 0x99, 0x60}}
class nsIFile;
class nsIPrompt;
class nsIStringBundle;
class nsIComponentManager;
class nsIContent;
@ -105,6 +97,11 @@ public:
static void Shutdown();
static void GetLocalizedString(const nsAString& key,
nsAString& aResult,
PRBool aFormatted = PR_FALSE,
const PRUnichar** aFormatArgs = nsnull,
PRUint32 aFormatArgsLength = 0);
static nsresult DecryptData(const nsAString& aData, nsAString& aPlaintext);
static nsresult EncryptData(const nsAString& aPlaintext,
@ -191,23 +188,3 @@ protected:
nsCOMPtr<nsIFile> mSignonFile;
};
// Our wrapper for username/password prompts - this allows us to prefill
// the password dialog and add a "remember this password" checkbox.
class nsSingleSignonPrompt : public nsIAuthPromptWrapper
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIAUTHPROMPT
NS_DECL_NSIAUTHPROMPTWRAPPER
nsSingleSignonPrompt() { }
virtual ~nsSingleSignonPrompt() { }
protected:
void GetLocalizedString(const nsAString& aKey, nsAString& aResult);
nsCOMPtr<nsIPrompt> mPrompt;
nsCOMPtr<nsIStringBundle> mBundle;
};

Просмотреть файл

@ -0,0 +1,260 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Mozilla Password Manager.
*
* The Initial Developer of the Original Code is
* Brian Ryner.
* Portions created by the Initial Developer are Copyright (C) 2003
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Brian Ryner <bryner@brianryner.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsSingleSignonPrompt.h"
#include "nsPasswordManager.h"
#include "nsIServiceManager.h"
NS_IMPL_ISUPPORTS2(nsSingleSignonPrompt,
nsIAuthPromptWrapper,
nsIAuthPrompt)
// nsIAuthPrompt
NS_IMETHODIMP
nsSingleSignonPrompt::Prompt(const PRUnichar* aDialogTitle,
const PRUnichar* aText,
const PRUnichar* aPasswordRealm,
PRUint32 aSavePassword,
const PRUnichar* aDefaultText,
PRUnichar** aResult,
PRBool* aConfirm)
{
nsAutoString checkMsg;
nsString emptyString;
PRBool checkValue = PR_FALSE;
PRBool *checkPtr = nsnull;
PRUnichar* value = nsnull;
nsCOMPtr<nsIPasswordManagerInternal> mgrInternal;
if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) {
if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) {
nsPasswordManager::GetLocalizedString(NS_LITERAL_STRING("rememberValue"),
checkMsg);
checkPtr = &checkValue;
}
mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID);
nsCAutoString outHost;
nsAutoString outUser, outPassword;
mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm),
emptyString,
emptyString,
outHost,
outUser,
outPassword);
value = ToNewUnicode(outUser);
}
mPrompt->Prompt(aDialogTitle,
aText,
&value,
checkMsg.get(),
checkPtr,
aConfirm);
if (*aConfirm) {
if (checkValue && value[0] != '\0') {
// The user requested that we save the value
// TODO: support SAVE_PASSWORD_FOR_SESSION
nsCOMPtr<nsIPasswordManager> manager = do_QueryInterface(mgrInternal);
manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm),
nsDependentString(value),
emptyString);
}
*aResult = value;
} else {
if (value)
nsMemory::Free(value);
*aResult = nsnull;
}
return NS_OK;
}
NS_IMETHODIMP
nsSingleSignonPrompt::PromptUsernameAndPassword(const PRUnichar* aDialogTitle,
const PRUnichar* aText,
const PRUnichar* aPasswordRealm,
PRUint32 aSavePassword,
PRUnichar** aUser,
PRUnichar** aPassword,
PRBool* aConfirm)
{
nsAutoString checkMsg;
nsString emptyString;
PRBool checkValue = PR_FALSE;
PRBool *checkPtr = nsnull;
PRUnichar *user = nsnull, *password = nsnull;
nsCOMPtr<nsIPasswordManagerInternal> mgrInternal;
if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) {
if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) {
nsPasswordManager::GetLocalizedString(NS_LITERAL_STRING("rememberPassword"),
checkMsg);
checkPtr = &checkValue;
}
mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID);
nsCAutoString outHost;
nsAutoString outUser, outPassword;
mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm),
emptyString,
emptyString,
outHost,
outUser,
outPassword);
user = ToNewUnicode(outUser);
password = ToNewUnicode(outPassword);
}
mPrompt->PromptUsernameAndPassword(aDialogTitle,
aText,
&user,
&password,
checkMsg.get(),
checkPtr,
aConfirm);
if (*aConfirm) {
if (checkValue && user[0] != '\0') {
// The user requested that we save the values
// TODO: support SAVE_PASSWORD_FOR_SESSION
nsCOMPtr<nsIPasswordManager> manager = do_QueryInterface(mgrInternal);
manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm),
nsDependentString(user),
nsDependentString(password));
}
*aUser = user;
*aPassword = password;
} else {
if (user)
nsMemory::Free(user);
if (password)
nsMemory::Free(password);
*aUser = *aPassword = nsnull;
}
return NS_OK;
}
NS_IMETHODIMP
nsSingleSignonPrompt::PromptPassword(const PRUnichar* aDialogTitle,
const PRUnichar* aText,
const PRUnichar* aPasswordRealm,
PRUint32 aSavePassword,
PRUnichar** aPassword,
PRBool* aConfirm)
{
nsAutoString checkMsg;
nsString emptyString;
PRBool checkValue = PR_FALSE;
PRBool *checkPtr = nsnull;
PRUnichar* password = nsnull;
nsCOMPtr<nsIPasswordManagerInternal> mgrInternal;
if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) {
if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) {
nsPasswordManager::GetLocalizedString(NS_LITERAL_STRING("rememberPassword"),
checkMsg);
checkPtr = &checkValue;
}
mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID);
nsCAutoString outHost;
nsAutoString outUser, outPassword;
mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm),
emptyString,
emptyString,
outHost,
outUser,
outPassword);
password = ToNewUnicode(outPassword);
}
mPrompt->PromptPassword(aDialogTitle,
aText,
&password,
checkMsg.get(),
checkPtr,
aConfirm);
if (*aConfirm) {
if (checkValue && password[0] != '\0') {
// The user requested that we save the password
// TODO: support SAVE_PASSWORD_FOR_SESSION
nsCOMPtr<nsIPasswordManager> manager = do_QueryInterface(mgrInternal);
manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm),
emptyString,
nsDependentString(password));
}
*aPassword = password;
} else {
if (password)
nsMemory::Free(password);
*aPassword = nsnull;
}
return NS_OK;
}
// nsIAuthPromptWrapper
NS_IMETHODIMP
nsSingleSignonPrompt::SetPromptDialogs(nsIPrompt* aDialogs)
{
mPrompt = aDialogs;
return NS_OK;
}

Просмотреть файл

@ -0,0 +1,64 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Mozilla Password Manager.
*
* The Initial Developer of the Original Code is
* Brian Ryner.
* Portions created by the Initial Developer are Copyright (C) 2003
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Brian Ryner <bryner@brianryner.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsIAuthPromptWrapper.h"
#include "nsCOMPtr.h"
#include "nsIPrompt.h"
/* 1baf3398-f759-4a72-a21f-0abdc9cc9960 */
#define NS_SINGLE_SIGNON_PROMPT_CID \
{0x1baf3398, 0xf759, 0x4a72, {0xa2, 0x1f, 0x0a, 0xbd, 0xc9, 0xcc, 0x99, 0x60}}
// Our wrapper for username/password prompts - this allows us to prefill
// the password dialog and add a "remember this password" checkbox.
class nsSingleSignonPrompt : public nsIAuthPromptWrapper
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIAUTHPROMPT
NS_DECL_NSIAUTHPROMPTWRAPPER
nsSingleSignonPrompt() { }
virtual ~nsSingleSignonPrompt() { }
protected:
void GetLocalizedString(const nsAString& aKey, nsAString& aResult);
nsCOMPtr<nsIPrompt> mPrompt;
};