Redesigned target around URL->application mapping
[shibboleth/sp.git] / shib-target / ccache-utils.h
1 /*
2  * The Shibboleth License, Version 1.
3  * Copyright (c) 2002
4  * University Corporation for Advanced Internet Development, Inc.
5  * All rights reserved
6  *
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * Redistributions of source code must retain the above copyright notice, this
12  * list of conditions and the following disclaimer.
13  *
14  * Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution, if any, must include
17  * the following acknowledgment: "This product includes software developed by
18  * the University Corporation for Advanced Internet Development
19  * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement
20  * may appear in the software itself, if and wherever such third-party
21  * acknowledgments normally appear.
22  *
23  * Neither the name of Shibboleth nor the names of its contributors, nor
24  * Internet2, nor the University Corporation for Advanced Internet Development,
25  * Inc., nor UCAID may be used to endorse or promote products derived from this
26  * software without specific prior written permission. For written permission,
27  * please contact shibboleth@shibboleth.org
28  *
29  * Products derived from this software may not be called Shibboleth, Internet2,
30  * UCAID, or the University Corporation for Advanced Internet Development, nor
31  * may Shibboleth appear in their name, without prior written permission of the
32  * University Corporation for Advanced Internet Development.
33  *
34  *
35  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
36  * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
38  * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK
39  * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE.
40  * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
41  * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT,
42  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
43  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
44  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
47  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48  */
49
50 /*
51  * ccache-utils.h -- utility classes used by the credential cache.
52  *
53  * Created by:  Derek Atkins <derek@ihtfp.com>
54  *
55  * $Id$
56  */
57
58 #ifndef SHIB_CCACHE_UTILS_H
59 #define SHIB_CCACHE_UTILS_H
60
61 #ifdef WIN32
62 # ifndef SHIBTARGET_EXPORTS
63 #  define SHIBTARGET_EXPORTS __declspec(dllimport)
64 # endif
65 #else
66 # define SHIBTARGET_EXPORTS
67 #endif
68
69 namespace shibtarget {
70
71   class SHIBTARGET_EXPORTS CCacheEntry
72   {
73   public:
74     virtual saml::Iterator<saml::SAMLAssertion*> getAssertions(const char* appId) = 0;
75     virtual void preFetch(const char* appId, int prefetch_window) = 0;
76
77     virtual bool isSessionValid(time_t lifetime, time_t timeout) = 0;
78     virtual const char* getClientAddress() = 0;
79     virtual const char* getSerializedStatement() = 0;
80     virtual const saml::SAMLAuthenticationStatement* getStatement() = 0;
81     virtual void release() = 0;
82   };
83     
84   class SHIBTARGET_EXPORTS CCache
85   {
86   public:
87     virtual ~CCache() = 0;
88
89     // insert() the Auth Statement into the CCache.
90     //
91     // Make sure you do not hold any open CCacheEntry objects before
92     // you call this method.
93     //
94     virtual void insert(const char* key, saml::SAMLAuthenticationStatement *s,
95                         const char *client_addr) = 0;
96
97     // find() a CCacheEntry in the CCache for the given key.
98     //
99     // This returns a LOCKED cache entry.  You should release() it
100     // when you are done using it.
101     //
102     // Note that you MUST NOT call any other CCache methods while you
103     // are holding this CCacheEntry!
104     //
105     virtual CCacheEntry* find(const char* key) = 0;
106
107     // remove() a key from the CCache
108     //
109     // NOTE: If you previously executed a find(), make sure you
110     // "release()" the CCacheEntry before you try to remove it!
111     //
112     virtual void remove(const char* key) = 0;
113     
114     // Call this first method when you want to access the cache from a
115     // new thread and the second method just before the thread is
116     // going to exit.  This is necessary for some sub-classes.
117     virtual void thread_init() { }
118     virtual void thread_end() { }
119
120     // create a CCache instance of the provided type.  A NULL type
121     // implies that it should create the default cache type.
122     //
123     static CCache* getInstance(const char* type);
124
125     // register a CCache type with the system.
126     typedef CCache*(*CCacheFactory)(void);
127     static void registerFactory(const char* name, CCacheFactory factory);
128   };    
129
130   /* A low-level memory cache of a SAMLResponse object */
131   class ResourceEntryPriv;
132   class ResourceEntry
133   {
134   public:
135     ResourceEntry(const char*, const saml::SAMLSubject&, CCache*, const saml::Iterator<saml::SAMLAuthorityBinding*>);
136     ~ResourceEntry();
137
138     // Is this ResourceEntry going to be valid for the next <int> seconds?
139     bool isValid(int);
140     saml::Iterator<saml::SAMLAssertion*> getAssertions();
141   private:
142     ResourceEntryPriv *m_priv;
143   };
144
145   //*******************************************************************
146   // "Global storage"
147
148   SHIBTARGET_EXPORTS extern CCache* g_shibTargetCCache;
149 };
150
151 #endif /* SHIB_CCACHE_UTILS_H */