]> git.ipfire.org Git - thirdparty/squid.git/blob - src/auth/Config.h
Merged from parent (trunk r11379, v3.2.0.6+).
[thirdparty/squid.git] / src / auth / Config.h
1 /*
2 * $Id$
3 *
4 *
5 * SQUID Web Proxy Cache http://www.squid-cache.org/
6 * ----------------------------------------------------------
7 *
8 * Squid is the result of efforts by numerous individuals from
9 * the Internet community; see the CONTRIBUTORS file for full
10 * details. Many organizations have provided support for Squid's
11 * development; see the SPONSORS file for full details. Squid is
12 * Copyrighted (C) 2001 by the Regents of the University of
13 * California; see the COPYRIGHT file for full details. Squid
14 * incorporates software developed and/or copyrighted by other
15 * sources; see the CREDITS file for full details.
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
30 *
31 */
32 #ifndef SQUID_AUTH_CONFIG_H
33 #define SQUID_AUTH_CONFIG_H
34
35 #if USE_AUTH
36
37 #include "auth/UserRequest.h"
38 #include "HelperChildConfig.h"
39
40 class StoreEntry;
41 class HttpReply;
42 class HttpRequest;
43 class wordlist;
44
45 /* for http_hdr_type parameters-by-value */
46 #include "HttpHeader.h"
47
48 namespace Auth
49 {
50
51 /**
52 * \ingroup AuthAPI
53 * \par
54 * I am the configuration for an auth scheme.
55 * Currently each scheme has only one instance of me,
56 * but this may change.
57 * \par
58 * This class is treated like a ref counted class.
59 * If the children ever stop being singletons, implement the
60 * ref counting...
61 */
62 class Config
63 {
64
65 public:
66 static AuthUserRequest::Pointer CreateAuthUser(const char *proxy_auth);
67
68 static Config *Find(const char *proxy_auth);
69 Config() : authenticateChildren(20), authenticateProgram(NULL) {}
70
71 virtual ~Config() {}
72
73 /**
74 * Used by squid to determine whether the auth module has successfully initialised itself with the current configuration.
75 *
76 \retval true Authentication Module loaded and running.
77 \retval false No Authentication Module loaded.
78 */
79 virtual bool active() const = 0;
80
81 /**
82 * new decode API: virtual factory pattern
83 \par
84 * Responsible for decoding the passed authentication header, creating or
85 * linking to a AuthUser object and for storing any needed details to complete
86 * authentication in AuthUserRequest::authenticate().
87 *
88 \param proxy_auth Login Pattern to parse.
89 \retval * Details needed to authenticate.
90 */
91 virtual AuthUserRequest::Pointer decode(char const *proxy_auth) = 0;
92
93 /**
94 * squid is finished with this config, release any unneeded resources.
95 * If a singleton, delete will not occur. if not a singleton (future),
96 * delete will occur when no references are held.
97 *
98 \todo we need a 'done for reconfigure' and a 'done permanently' concept.
99 */
100 virtual void done() = 0;
101
102 /**
103 * The configured function is used to see if the auth module has been given valid
104 * parameters and is able to handle authentication requests.
105 *
106 \retval true Authentication Module configured ready for use.
107 \retval false Not configured or Configuration Error.
108 * No other module functions except Shutdown/Dump/Parse/FreeConfig will be called by Squid.
109 */
110 virtual bool configured() const = 0;
111
112 /**
113 * Shutdown just the auth helpers.
114 * For use by log rotate etc. where auth needs to stay running, with the helpers restarted.
115 */
116 virtual void rotateHelpers(void) = 0;
117
118 /**
119 * Responsible for writing to the StoreEntry the configuration parameters that a user
120 * would put in a config file to recreate the running configuration.
121 */
122 virtual void dump(StoreEntry *, const char *, Config *) = 0;
123
124 /** add headers as needed when challenging for auth */
125 virtual void fixHeader(AuthUserRequest::Pointer, HttpReply *, http_hdr_type, HttpRequest *) = 0;
126
127 /** prepare to handle requests */
128 virtual void init(Config *) = 0;
129
130 /** expose any/all statistics to a CacheManager */
131 virtual void registerWithCacheManager(void);
132
133 /** parse config options */
134 virtual void parse(Config *, int, char *) = 0;
135
136 /** the http string id */
137 virtual const char * type() const = 0;
138
139 public:
140 HelperChildConfig authenticateChildren;
141 wordlist *authenticateProgram; ///< Helper program to run, includes all parameters
142 };
143
144 typedef Vector<Config *> ConfigVector;
145
146 extern ConfigVector TheConfig;
147
148 } // namespace Auth
149
150 #endif /* USE_AUTH */
151 #endif /* SQUID_AUTHCONFIG_H */