]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/acl/Strategised.h
2 * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
9 #ifndef SQUID_ACLSTRATEGISED_H
10 #define SQUID_ACLSTRATEGISED_H
14 #include "acl/FilledChecklist.h"
15 #include "acl/Strategy.h"
17 // XXX: Replace with a much simpler abstract ACL child class without the
18 // ACLStrategy parameter (and associated call forwarding). Duplicating key
19 // portions of the ACL class API in ACLStrategy is not needed because
20 // ACLStrategy is unused outside the ACLStrategised context. Existing classes
21 // like ACLExtUser, ACLProxyAuth, and ACLIdent seem to confirm this assertion.
22 // It also requires forwarding ACL info to ACLStrategy as method parameters.
24 /// Splits the ACL API into two individually configurable components:
25 /// * ACLStrategy that usually extracts information from the current transaction
26 /// * ACLData that usually matches information against admin-configured values
28 class ACLStrategised
: public ACL
30 MEMPROXY_CLASS(ACLStrategised
);
36 ACLStrategised(ACLData
<MatchType
> *, ACLStrategy
<MatchType
> *, char const *);
37 ACLStrategised(ACLStrategised
const &&) = delete;
39 virtual char const *typeString() const;
40 virtual void parseFlags();
42 virtual bool requiresRequest() const {return matcher
->requiresRequest();}
44 virtual bool requiresReply() const {return matcher
->requiresReply();}
46 virtual void prepareForUse() { data
->prepareForUse();}
47 virtual const Acl::Options
&options() { return matcher
->options(); }
49 virtual int match(ACLChecklist
*checklist
);
50 virtual int match (M
const &);
51 virtual SBufList
dump() const;
52 virtual bool empty () const;
53 virtual bool valid () const;
56 ACLData
<MatchType
> *data
;
58 ACLStrategy
<MatchType
> *matcher
;
61 /* implementation follows */
63 template <class MatchType
>
64 ACLStrategised
<MatchType
>::~ACLStrategised()
69 template <class MatchType
>
70 ACLStrategised
<MatchType
>::ACLStrategised(ACLData
<MatchType
> *newData
, ACLStrategy
<MatchType
> *theStrategy
, char const *theType
): data(newData
), type_(theType
), matcher(theStrategy
)
73 template <class MatchType
>
75 ACLStrategised
<MatchType
>::typeString() const
80 template <class MatchType
>
82 ACLStrategised
<MatchType
>::parseFlags()
84 ParseFlags(options(), data
->supportedFlags());
87 template <class MatchType
>
89 ACLStrategised
<MatchType
>::parse()
94 template <class MatchType
>
96 ACLStrategised
<MatchType
>::empty() const
101 template <class MatchType
>
103 ACLStrategised
<MatchType
>::match(ACLChecklist
*cl
)
105 ACLFilledChecklist
*checklist
= dynamic_cast<ACLFilledChecklist
*>(cl
);
107 return matcher
->match(data
, checklist
);
110 template <class MatchType
>
112 ACLStrategised
<MatchType
>::match(MatchType
const &toFind
)
114 return data
->match(toFind
);
117 template <class MatchType
>
119 ACLStrategised
<MatchType
>::dump() const
124 template <class MatchType
>
126 ACLStrategised
<MatchType
>::valid () const
128 return matcher
->valid();
131 #endif /* SQUID_ACLSTRATEGISED_H */