remove over-ride of set/get password. Password knowledge has been centralized

move get password logic out to a common base class (nsMsgIncomingServer)


git-svn-id: svn://10.0.0.236/trunk@45291 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
mscott%netscape.com
1999-08-31 04:40:14 +00:00
parent aaea6659ab
commit 7bbe481fbb
3 changed files with 33 additions and 102 deletions

View File

@@ -55,16 +55,9 @@ public:
NS_IMETHOD GetServerURI(char * *uri);
NS_IMETHOD PerformBiff();
// Override the implementations of Get/Set Password in
// nsMsgIncomingServer. We don't want to get the password
// from preferences
NS_IMETHOD GetPassword(char * *aPassword);
NS_IMETHOD SetPassword(char * aPassword);
private:
char *m_rootFolderPath;
nsCString m_password;
PRBool m_leaveOnServer;
PRBool m_deleteMailLeftOnServer;
};
@@ -88,28 +81,6 @@ nsPop3IncomingServer::~nsPop3IncomingServer()
PR_FREEIF(m_rootFolderPath);
}
NS_IMETHODIMP nsPop3IncomingServer::GetPassword(char * *aPassword)
{
nsresult rv = NS_OK;
if (aPassword)
*aPassword = m_password.ToNewCString();
else
rv = NS_ERROR_NULL_POINTER;
return rv;
}
NS_IMETHODIMP nsPop3IncomingServer::SetPassword(char * aPassword)
{
nsresult rv = NS_OK;
if (aPassword)
m_password = aPassword;
else
rv = NS_ERROR_NULL_POINTER;
return rv;
}
NS_IMPL_SERVERPREF_STR(nsPop3IncomingServer,
RootFolderPath,
"directory")

View File

@@ -428,75 +428,32 @@ void nsPop3Protocol::SetUsername(const char* name)
m_username = name;
}
const char * nsPop3Protocol::GetPassword()
nsresult nsPop3Protocol::GetPassword(char ** aPassword)
{
// okay, here's the scoop for this messs...
// (1) if we have a password already, go ahead and use it!
// (2) if we don't have a password, see if we've already asked the user
// for the password this session by checking with the server...If it has a pwd use it!!!
// (3) otherwise prompt the user for a password and then remember that password in the server
nsresult rv = NS_OK;
nsCOMPtr<nsIMsgIncomingServer> server;
nsCOMPtr<nsIMsgMailNewsUrl> msgUrl = do_QueryInterface(m_nsIPop3URL);
msgUrl->GetServer(getter_AddRefs(server));
if (m_password.IsEmpty() || TestFlag(POP3_PASSWORD_FAILED))
if (server)
{
nsCOMPtr<nsIMsgIncomingServer> server;
nsCOMPtr<nsIMsgMailNewsUrl> msgUrl = do_QueryInterface(m_nsIPop3URL);
msgUrl->GetServer(getter_AddRefs(server));
nsXPIDLCString serverPassword;
server->GetPassword(getter_Copies(serverPassword));
if (TestFlag(POP3_PASSWORD_FAILED))
{
// if we've already gotten a password and it wasn't correct..clear
// out the password and try again.
rv = server->SetPassword("");
}
// (2) see if the server already knows the password and use it if does...
// side note....if the password failed sign is present then we should ignore the server password
// and prompt the user for it again.
if (!TestFlag(POP3_PASSWORD_FAILED) && serverPassword && nsCRT::strlen(serverPassword) > 0)
m_password = serverPassword;
else
{
// (3) prompt the user for the password
// we don't have one so ask the user for it.
ClearFlag(POP3_PASSWORD_FAILED);
nsresult rv = NS_OK;
NS_WITH_SERVICE(nsIPrompt, dialog, kNetSupportDialogCID, &rv);
if (NS_SUCCEEDED(rv))
{
PRUnichar * uniPassword;
PRBool okayValue = PR_TRUE;
char * promptText = nsnull;
nsXPIDLCString hostName;
msgUrl->GetHost(getter_Copies(hostName));
ClearFlag(POP3_PASSWORD_FAILED);
rv = server->GetPassword(PR_TRUE /* ask for UI */, aPassword);
// mscott - this is just a temporary hack using the raw string..this needs to be pushed into
// a string bundle!!!!!
if (hostName)
promptText = PR_smprintf("Enter your password for %s@%s.", (const char *) m_username, (const char *) hostName);
else
promptText = PL_strdup("Enter your password here: ");
dialog->PromptPassword(nsAutoString(promptText).GetUnicode(), &uniPassword, &okayValue);
PR_FREEIF(promptText);
if (!okayValue) // if the user pressed cancel, just return NULL;
return nsnull;
m_password = uniPassword;
// this ugly cast is ok...there is a bug in the idl compiler that is preventing
// the char * argument to SetPassword from being const.
server->SetPassword((char *) m_password.GetBuffer());
}
} // if the server doesn't know the password
}
return m_password.GetBuffer();
}
else
rv = NS_ERROR_FAILURE;
void nsPop3Protocol::SetPassword(const char* passwd)
{
NS_ASSERTION(passwd, "no password specified!");
if (passwd)
m_password = passwd;
return rv;
}
nsresult nsPop3Protocol::LoadUrl(nsIURI* aURL, nsISupports * /* aConsumer */)
{
nsresult rv = 0;
@@ -512,9 +469,10 @@ nsresult nsPop3Protocol::LoadUrl(nsIURI* aURL, nsISupports * /* aConsumer */)
// -*-*-*- To Do:
// Call SetUsername(accntName);
// Call SetPassword(aPassword);
const char * password = GetPassword();
nsXPIDLCString password;
rv = GetPassword(getter_Copies(password));
// if we didn't get a password back, abort the entire operation!
if (!password)
if (NS_FAILED(rv) || !password)
return NS_ERROR_FAILURE;
nsCOMPtr<nsIURL> url = do_QueryInterface(aURL, &rv);
@@ -842,8 +800,9 @@ PRInt32 nsPop3Protocol::SendPassword()
/* check username response */
if (!m_pop3ConData->command_succeeded)
return(Error(MK_POP3_USERNAME_FAILURE));
const char * password = GetPassword();
if (!password || !*password)
nsXPIDLCString password;
nsresult rv = GetPassword(getter_Copies(password));
if (NS_FAILED(rv) || !password || !(* (const char *) password))
return Error(MK_POP3_PASSWORD_UNDEFINED);
#if 0
@@ -862,7 +821,7 @@ PRInt32 nsPop3Protocol::SendPassword()
nsCAutoString cmd;
cmd = "PASS ";
cmd += password;
cmd += (const char *) password;
cmd += CRLF;
nsCOMPtr<nsIURI> url = do_QueryInterface(m_nsIPop3URL);
return SendData(url, cmd);
@@ -901,7 +860,6 @@ PRInt32 nsPop3Protocol::SendStatOrGurl(PRBool sendStat)
/* clear the bogus password in case
* we need to sync with auth smtp password
*/
m_password = "";
return 0;
}
#if 0 // not yet
@@ -2342,10 +2300,12 @@ nsresult nsPop3Protocol::ProcessProtocolState(nsIURI * url, nsIInputStream * aIn
/* If we're just checking for new mail (biff) then don't
prompt the user for a password; just tell him we don't
know whether he has new mail. */
nsCAutoString password = GetPassword();
nsXPIDLCString password;
nsresult rv = GetPassword(getter_Copies(password));
const char * pwd = (const char *) password;
if ((m_pop3ConData->only_check_for_new_mail /* ||
MSG_Biff_Master_NikiCallingGetNewMail() */) &&
(password.IsEmpty() || m_username.IsEmpty()))
(!password || !*password || m_username.IsEmpty()))
{
status = MK_POP3_PASSWORD_UNDEFINED;
m_pop3ConData->biffstate = nsMsgBiffState_Unknown;
@@ -2424,8 +2384,10 @@ nsresult nsPop3Protocol::ProcessProtocolState(nsIURI * url, nsIInputStream * aIn
net_pop3_password_pending = PR_TRUE;
}
#endif
nsCAutoString pwd = GetPassword();
if (m_username.IsEmpty() || pwd.IsEmpty())
nsXPIDLCString apwd;
GetPassword(getter_Copies(apwd));
const char * cpwd = (const char *) pwd;
if (m_username.IsEmpty() || !pwd || !*pwd)
{
// net_pop3_block = PR_FALSE;
return NS_OK;

View File

@@ -259,14 +259,12 @@ public:
const char* GetUsername() { return m_username.GetBuffer(); };
void SetUsername(const char* name);
const char* GetPassword();
void SetPassword(const char* password);
nsresult GetPassword(char ** aPassword);
private:
PRUint32 m_pop3CapabilityFlags;
nsCString m_username;
nsCString m_password;
Pop3ConData* m_pop3ConData;
nsCString m_senderInfo;
nsCString m_commandResponse;