зеркало из https://github.com/mozilla/pjs.git
Split out nsSingleSignonPrompt into its own source file.
This commit is contained in:
Родитель
a2acff55c9
Коммит
c0a8992faa
|
@ -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;
|
||||
};
|
Загрузка…
Ссылка в новой задаче