/*
+ * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
*
- * SQUID Web Proxy Cache http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- * Squid is the result of efforts by numerous individuals from
- * the Internet community; see the CONTRIBUTORS file for full
- * details. Many organizations have provided support for Squid's
- * development; see the SPONSORS file for full details. Squid is
- * Copyrighted (C) 2001 by the Regents of the University of
- * California; see the COPYRIGHT file for full details. Squid
- * incorporates software developed and/or copyrighted by other
- * sources; see the CREDITS file for full details.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
- *
- * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
*/
#ifndef SQUID_AUTH_USER_H
#if USE_AUTH
#include "auth/CredentialState.h"
+#include "auth/forward.h"
#include "auth/Type.h"
+#include "base/CbcPointer.h"
#include "base/RefCount.h"
#include "dlink.h"
#include "ip/Address.h"
#include "Notes.h"
-#include "SBuf.h"
+#include "sbuf/SBuf.h"
-class AuthUserHashPointer;
class StoreEntry;
namespace Auth
{
-class Config;
-
/**
- * \ingroup AuthAPI
* This is the main user related structure. It stores user-related data,
* and is persistent across requests. It can even persist across
* multiple external authentications. One major benefit of preserving this
public:
typedef RefCount<User> Pointer;
+protected:
+ User(Auth::SchemeConfig *, const char *requestRealm);
+public:
+ virtual ~User();
+
/* extra fields for proxy_auth */
- /* auth_type and auth_module are deprecated. Do Not add new users of these fields.
- * Aim to remove shortly
- */
/** \deprecated this determines what scheme owns the user data. */
Auth::Type auth_type;
/** the config for this user */
- Auth::Config *config;
+ Auth::SchemeConfig *config;
dlink_list proxy_match_cache;
size_t ipcount;
long expiretime;
NotePairs notes;
public:
- static void cacheInit();
- static void CachedACLsReset();
static SBuf BuildUserKey(const char *username, const char *realm);
void absorb(Auth::User::Pointer from);
- virtual ~User();
char const *username() const { return username_; }
- void username(char const *);
+ void username(char const *); ///< set stored username and userKey
- const char *userKey() {return !userKey_.isEmpty() ? userKey_.c_str() : username_;}
+ // NP: key is set at the same time as username_. Until then both are empty/NULL.
+ const SBuf userKey() const {return userKey_;}
/**
* How long these credentials are still valid for.
void removeIp(Ip::Address);
void addIp(Ip::Address);
- void addToNameCache();
- static void UsernameCacheStats(StoreEntry * output);
+ /// add the Auth::User to the protocol-specific username cache.
+ virtual void addToNameCache() = 0;
+ static void CredentialsCacheStats(StoreEntry * output);
+
+ // userKey ->Auth::User::Pointer cache
+ // must be reimplemented in subclasses
+ static CbcPointer<Auth::CredentialsCache> Cache();
CredentialState credentials() const;
void credentials(CredentialState);
*/
CredentialState credentials_state;
-protected:
- User(Auth::Config *, const char *requestRealm);
-
private:
- /**
- * Garbage Collection for the username cache.
- */
- static void cacheCleanup(void *unused);
- static time_t last_discard; /// Time of last username cache garbage collection.
-
/**
* DPW 2007-05-08
* The username_ memory will be allocated via
#endif /* USE_AUTH */
#endif /* SQUID_AUTH_USER_H */
+