a2e7e45598958f65414100f57da16c0da98c9f84
[shibboleth/sp.git] / shibsp / attribute / filtering / impl / MatchFunctor.cpp
1 /*
2  *  Copyright 2001-2009 Internet2
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**
18  * MatchFunctor.cpp
19  * 
20  * A function that evaluates whether an expressed criteria is met by the current filter context.
21  */
22
23 #include "internal.h"
24 #include "attribute/filtering/FilterPolicyContext.h"
25 #include "attribute/filtering/MatchFunctor.h"
26 #include "util/SPConstants.h"
27
28 #include <xercesc/util/XMLUniDefs.hpp>
29
30 using namespace shibsp;
31 using namespace xmltooling;
32 using namespace std;
33
34 #define DECL_FACTORY(name) \
35     SHIBSP_DLLLOCAL PluginManager< MatchFunctor,xmltooling::QName,pair<const FilterPolicyContext*,const DOMElement*> >::Factory name##Factory
36
37 #define DECL_BASIC_QNAME(name,lit) \
38     xmltooling::QName shibsp::name##Type(shibspconstants::SHIB2ATTRIBUTEFILTER_MF_BASIC_NS, lit)
39
40 #define DECL_SAML_QNAME(name,lit) \
41     xmltooling::QName shibsp::name##Type(shibspconstants::SHIB2ATTRIBUTEFILTER_MF_SAML_NS, lit)
42
43 #define REGISTER_FACTORY(name) \
44     mgr.registerFactory(name##Type, name##Factory)
45
46 namespace shibsp {
47     DECL_FACTORY(AnyMatchFunctor);
48     DECL_FACTORY(AndMatchFunctor);
49     DECL_FACTORY(OrMatchFunctor);
50     DECL_FACTORY(NotMatchFunctor);
51     DECL_FACTORY(AttributeIssuerString);
52     DECL_FACTORY(AttributeRequesterString);
53     DECL_FACTORY(AuthenticationMethodString);
54     DECL_FACTORY(AttributeValueString);
55     DECL_FACTORY(AttributeScopeString);
56     DECL_FACTORY(AttributeIssuerRegex);
57     DECL_FACTORY(AttributeRequesterRegex);
58     DECL_FACTORY(AuthenticationMethodRegex);
59     DECL_FACTORY(AttributeValueRegex);
60     DECL_FACTORY(AttributeScopeRegex);
61     DECL_FACTORY(NumberOfAttributeValues);
62     DECL_FACTORY(AttributeIssuerInEntityGroup);
63     DECL_FACTORY(AttributeRequesterInEntityGroup);
64     DECL_FACTORY(AttributeScopeMatchesShibMDScope);
65
66
67     static const XMLCh ANY[] =                          UNICODE_LITERAL_3(A,N,Y);
68     static const XMLCh AND[] =                          UNICODE_LITERAL_3(A,N,D);
69     static const XMLCh OR[] =                           UNICODE_LITERAL_2(O,R);
70     static const XMLCh NOT[] =                          UNICODE_LITERAL_3(N,O,T);
71     static const XMLCh AttributeIssuerString[] =        UNICODE_LITERAL_21(A,t,t,r,i,b,u,t,e,I,s,s,u,e,r,S,t,r,i,n,g);
72     static const XMLCh AttributeRequesterString[] =     UNICODE_LITERAL_24(A,t,t,r,i,b,u,t,e,R,e,q,u,e,s,t,e,r,S,t,r,i,n,g);
73     static const XMLCh AuthenticationMethodString[] =   UNICODE_LITERAL_26(A,u,t,h,e,n,t,i,c,a,t,i,o,n,M,e,t,h,o,d,S,t,r,i,n,g);
74     static const XMLCh AttributeValueString[] =         UNICODE_LITERAL_20(A,t,t,r,i,b,u,t,e,V,a,l,u,e,S,t,r,i,n,g);
75     static const XMLCh AttributeScopeString[] =         UNICODE_LITERAL_20(A,t,t,r,i,b,u,t,e,S,c,o,p,e,S,t,r,i,n,g);
76     static const XMLCh AttributeIssuerRegex[] =         UNICODE_LITERAL_20(A,t,t,r,i,b,u,t,e,I,s,s,u,e,r,R,e,g,e,x);
77     static const XMLCh AttributeRequesterRegex[] =      UNICODE_LITERAL_23(A,t,t,r,i,b,u,t,e,R,e,q,u,e,s,t,e,r,R,e,g,e,x);
78     static const XMLCh AuthenticationMethodRegex[] =    UNICODE_LITERAL_25(A,u,t,h,e,n,t,i,c,a,t,i,o,n,M,e,t,h,o,d,R,e,g,e,x);
79     static const XMLCh AttributeValueRegex[] =          UNICODE_LITERAL_19(A,t,t,r,i,b,u,t,e,V,a,l,u,e,R,e,g,e,x);
80     static const XMLCh AttributeScopeRegex[] =          UNICODE_LITERAL_19(A,t,t,r,i,b,u,t,e,S,c,o,p,e,R,e,g,e,x);
81     static const XMLCh NumberOfAttributeValues[] =      UNICODE_LITERAL_23(N,u,m,b,e,r,O,f,A,t,t,r,i,b,u,t,e,V,a,l,u,e,s);
82     static const XMLCh AttributeIssuerInEntityGroup[] = UNICODE_LITERAL_28(A,t,t,r,i,b,u,t,e,I,s,s,u,e,r,I,n,E,n,t,i,t,y,G,r,o,u,p);
83     static const XMLCh AttributeRequesterInEntityGroup[] = UNICODE_LITERAL_31(A,t,t,r,i,b,u,t,e,R,e,q,u,e,s,t,e,r,I,n,E,n,t,i,t,y,G,r,o,u,p);
84     static const XMLCh AttributeScopeMatchesShibMDScope[] = UNICODE_LITERAL_32(A,t,t,r,i,b,u,t,e,S,c,o,p,e,M,a,t,c,h,e,s,S,h,i,b,M,D,S,c,o,p,e);
85 };
86
87 DECL_BASIC_QNAME(AnyMatchFunctor, ANY);
88 DECL_BASIC_QNAME(AndMatchFunctor, AND);
89 DECL_BASIC_QNAME(OrMatchFunctor, OR);
90 DECL_BASIC_QNAME(NotMatchFunctor, NOT);
91 DECL_BASIC_QNAME(AttributeIssuerString, AttributeIssuerString);
92 DECL_BASIC_QNAME(AttributeRequesterString, AttributeRequesterString);
93 DECL_BASIC_QNAME(AuthenticationMethodString, AuthenticationMethodString);
94 DECL_BASIC_QNAME(AttributeValueString, AttributeValueString);
95 DECL_BASIC_QNAME(AttributeScopeString, AttributeScopeString);
96 DECL_BASIC_QNAME(AttributeIssuerRegex, AttributeIssuerRegex);
97 DECL_BASIC_QNAME(AttributeRequesterRegex, AttributeRequesterRegex);
98 DECL_BASIC_QNAME(AuthenticationMethodRegex, AuthenticationMethodRegex);
99 DECL_BASIC_QNAME(AttributeValueRegex, AttributeValueRegex);
100 DECL_BASIC_QNAME(AttributeScopeRegex, AttributeScopeRegex);
101 DECL_BASIC_QNAME(NumberOfAttributeValues, NumberOfAttributeValues);
102 DECL_SAML_QNAME(AttributeIssuerInEntityGroup, AttributeIssuerInEntityGroup);
103 DECL_SAML_QNAME(AttributeRequesterInEntityGroup, AttributeRequesterInEntityGroup);
104 DECL_SAML_QNAME(AttributeScopeMatchesShibMDScope, AttributeScopeMatchesShibMDScope);
105
106 void SHIBSP_API shibsp::registerMatchFunctors()
107 {
108     PluginManager< MatchFunctor,xmltooling::QName,pair<const FilterPolicyContext*,const DOMElement*> >& mgr =
109         SPConfig::getConfig().MatchFunctorManager;
110     REGISTER_FACTORY(AnyMatchFunctor);
111     REGISTER_FACTORY(AndMatchFunctor);
112     REGISTER_FACTORY(OrMatchFunctor);
113     REGISTER_FACTORY(NotMatchFunctor);
114     REGISTER_FACTORY(AttributeIssuerString);
115     REGISTER_FACTORY(AttributeRequesterString);
116     REGISTER_FACTORY(AuthenticationMethodString);
117     REGISTER_FACTORY(AttributeValueString);
118     REGISTER_FACTORY(AttributeScopeString);
119     REGISTER_FACTORY(AttributeIssuerRegex);
120     REGISTER_FACTORY(AttributeRequesterRegex);
121     REGISTER_FACTORY(AuthenticationMethodRegex);
122     REGISTER_FACTORY(AttributeValueRegex);
123     REGISTER_FACTORY(AttributeScopeRegex);
124     REGISTER_FACTORY(NumberOfAttributeValues);
125     REGISTER_FACTORY(AttributeIssuerInEntityGroup);
126     REGISTER_FACTORY(AttributeRequesterInEntityGroup);
127     REGISTER_FACTORY(AttributeScopeMatchesShibMDScope);
128 }
129
130 MatchFunctor::MatchFunctor()
131 {
132 }
133
134 MatchFunctor::~MatchFunctor()
135 {
136 }
137
138 FilterPolicyContext::FilterPolicyContext(multimap<string,MatchFunctor*>& functors) : m_functors(functors)
139 {
140 }
141
142 FilterPolicyContext::~FilterPolicyContext()
143 {
144 }
145
146 multimap<string,MatchFunctor*>& FilterPolicyContext::getMatchFunctors() const
147 {
148     return m_functors;
149 }