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