00001
00002
00003
00004 #ifndef DMLITE_CPP_AUTHN_H
00005 #define DMLITE_CPP_AUTHN_H
00006
00007 #include "../common/config.h"
00008 #include "base.h"
00009 #include "exceptions.h"
00010 #include "utils/extensible.h"
00011
00012 #include <string>
00013 #include <vector>
00014
00015 namespace dmlite {
00016
00017
00018 class PluginManager;
00019 class StackInstance;
00020
00021
00022 struct SecurityCredentials: public Extensible {
00023 std::string mech;
00024 std::string clientName;
00025 std::string remoteAddress;
00026 std::string sessionId;
00027
00028 std::vector<std::string> fqans;
00029
00030 bool operator == (const SecurityCredentials&) const;
00031 bool operator != (const SecurityCredentials&) const;
00032 bool operator < (const SecurityCredentials&) const;
00033 bool operator > (const SecurityCredentials&) const;
00034 };
00035
00036
00037
00038
00039
00040
00041
00042 struct UserInfo: public Extensible {
00043 std::string name;
00044
00045 bool operator == (const UserInfo&) const;
00046 bool operator != (const UserInfo&) const;
00047 bool operator < (const UserInfo&) const;
00048 bool operator > (const UserInfo&) const;
00049 };
00050
00051
00052
00053 struct GroupInfo: public Extensible {
00054 std::string name;
00055
00056 bool operator == (const GroupInfo&) const;
00057 bool operator != (const GroupInfo&) const;
00058 bool operator < (const GroupInfo&) const;
00059 bool operator > (const GroupInfo&) const;
00060 };
00061
00062
00063
00064 struct SecurityContext {
00065 SecurityContext() {}
00066
00067 SecurityContext(const SecurityCredentials& c,
00068 const UserInfo& u,
00069 std::vector<GroupInfo>& g):
00070 credentials(c), user(u), groups(g) {}
00071
00072 SecurityCredentials credentials;
00073
00074 UserInfo user;
00075 std::vector<GroupInfo> groups;
00076
00077 bool operator == (const SecurityContext&) const;
00078 bool operator != (const SecurityContext&) const;
00079 bool operator < (const SecurityContext&) const;
00080 bool operator > (const SecurityContext&) const;
00081 };
00082
00083
00084
00085
00086
00087 class Authn {
00088 public:
00089
00090 virtual ~Authn();
00091
00092
00093 virtual std::string getImplId(void) const throw() = 0;
00094
00095
00096
00097
00098 virtual SecurityContext* createSecurityContext(const SecurityCredentials& cred) throw (DmException);
00099
00100
00101
00102 virtual SecurityContext* createSecurityContext(void) throw (DmException);
00103
00104
00105
00106
00107 virtual GroupInfo newGroup(const std::string& groupName) throw (DmException);
00108
00109
00110
00111
00112 virtual GroupInfo getGroup(const std::string& groupName) throw (DmException);
00113
00114
00115
00116
00117
00118
00119
00120 virtual GroupInfo getGroup(const std::string& key,
00121 const boost::any& value) throw (DmException);
00122
00123
00124 virtual std::vector<GroupInfo> getGroups(void) throw (DmException);
00125
00126
00127
00128 virtual void updateGroup(const GroupInfo& group) throw (DmException);
00129
00130
00131 virtual void deleteGroup(const std::string& groupName) throw (DmException);
00132
00133
00134
00135
00136 virtual UserInfo newUser(const std::string& userName) throw (DmException);
00137
00138
00139
00140
00141 virtual UserInfo getUser(const std::string& userName) throw (DmException);
00142
00143
00144
00145
00146
00147
00148
00149 virtual UserInfo getUser(const std::string& key,
00150 const boost::any& value) throw (DmException);
00151
00152
00153 virtual std::vector<UserInfo> getUsers(void) throw (DmException);
00154
00155
00156
00157 virtual void updateUser(const UserInfo& user) throw (DmException);
00158
00159
00160 virtual void deleteUser(const std::string& userName) throw (DmException);
00161
00162
00163
00164
00165
00166
00167
00168
00169 virtual void getIdMap(const std::string& userName,
00170 const std::vector<std::string>& groupNames,
00171 UserInfo* user,
00172 std::vector<GroupInfo>* groups) throw (DmException);
00173 };
00174
00175
00176
00177 class AuthnFactory: public virtual BaseFactory {
00178 public:
00179
00180 virtual ~AuthnFactory();
00181
00182 protected:
00183
00184 friend class StackInstance;
00185
00186
00187 static Authn* createAuthn(AuthnFactory* factory,
00188 PluginManager* pm) throw (DmException);
00189
00190
00191 virtual Authn* createAuthn(PluginManager* pm) throw (DmException);
00192 };
00193
00194 };
00195
00196 #endif // DMLITE_CPP_AUTH_H