/* -*- 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.org code. * * The Initial Developer of the Original Code is Sun Microsystem. * Portions created by Sun Microsystem are Copyright (C) 2003 by * Sun Microsystem. All Rights Reserved. * * Contributor(s): * Louie Zhao * * 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 "nsHttpHandler.h" #include "nsHttpChannel.h" #include "nsHttpAuthManager.h" #include "nsReadableUtils.h" #include "nsNetUtil.h" NS_IMPL_ISUPPORTS1(nsHttpAuthManager, nsIHttpAuthManager) nsHttpAuthManager::nsHttpAuthManager() { } nsresult nsHttpAuthManager::Init() { // get reference to the auth cache. we assume that we will live // as long as gHttpHandler. instantiate it if necessary. if (!gHttpHandler) { nsresult rv; nsCOMPtr ios = do_GetIOService(&rv); if (NS_FAILED(rv)) return rv; nsCOMPtr handler; rv = ios->GetProtocolHandler("http", getter_AddRefs(handler)); if (NS_FAILED(rv)) return rv; // maybe someone is overriding our HTTP handler implementation? NS_ENSURE_TRUE(gHttpHandler, NS_ERROR_UNEXPECTED); } mAuthCache = gHttpHandler->AuthCache(); NS_ENSURE_TRUE(mAuthCache, NS_ERROR_FAILURE); return NS_OK; } nsHttpAuthManager::~nsHttpAuthManager() { } NS_IMETHODIMP nsHttpAuthManager::GetAuthIdentity(const nsACString & aScheme, const nsACString & aHost, PRInt32 aPort, const nsACString & aAuthType, const nsACString & aRealm, const nsACString & aPath, nsAString & aUserDomain, nsAString & aUserName, nsAString & aUserPassword) { nsHttpAuthEntry * entry = nsnull; nsresult rv; if (!aPath.IsEmpty()) rv = mAuthCache->GetAuthEntryForPath(PromiseFlatCString(aScheme).get(), PromiseFlatCString(aHost).get(), aPort, PromiseFlatCString(aPath).get(), &entry); else rv = mAuthCache->GetAuthEntryForDomain(PromiseFlatCString(aScheme).get(), PromiseFlatCString(aHost).get(), aPort, PromiseFlatCString(aRealm).get(), &entry); if (NS_FAILED(rv)) return rv; if (!entry) return NS_ERROR_UNEXPECTED; aUserDomain.Assign(entry->Domain()); aUserName.Assign(entry->User()); aUserPassword.Assign(entry->Pass()); return NS_OK; } NS_IMETHODIMP nsHttpAuthManager::SetAuthIdentity(const nsACString & aScheme, const nsACString & aHost, PRInt32 aPort, const nsACString & aAuthType, const nsACString & aRealm, const nsACString & aPath, const nsAString & aUserDomain, const nsAString & aUserName, const nsAString & aUserPassword) { nsHttpAuthIdentity ident(PromiseFlatString(aUserDomain).get(), PromiseFlatString(aUserName).get(), PromiseFlatString(aUserPassword).get()); return mAuthCache->SetAuthEntry(PromiseFlatCString(aScheme).get(), PromiseFlatCString(aHost).get(), aPort, PromiseFlatCString(aPath).get(), PromiseFlatCString(aRealm).get(), nsnull, // credentials nsnull, // challenge &ident, nsnull); // metadata } NS_IMETHODIMP nsHttpAuthManager::ClearAll() { return mAuthCache->ClearAll(); }