]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/auth/User.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / auth / User.h
index ba5dd5cfe3d8c34d17b3931566b80335367c30a7..0c2564869b8b0cccf6bf9a8579b90534326ea7e7 100644 (file)
@@ -1,32 +1,9 @@
 /*
+ * 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
@@ -63,14 +38,16 @@ class User : public RefCountable
 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;
@@ -79,16 +56,14 @@ public:
     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.
@@ -101,8 +76,13 @@ public:
     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);
@@ -118,16 +98,7 @@ private:
      */
     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
@@ -154,3 +125,4 @@ private:
 
 #endif /* USE_AUTH */
 #endif /* SQUID_AUTH_USER_H */
+