Kea 3.3.4
rbac_role.h
Go to the documentation of this file.
1// Copyright (C) 2026 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#ifndef RBAC_ROLE_H
8#define RBAC_ROLE_H
9
11#include <http/request.h>
12
13namespace isc {
14namespace rbac {
15
17class Role;
18
20typedef boost::shared_ptr<Role> RolePtr;
21
23class Role {
24public:
25
30 Role(const std::string& name) : name_(name) {
31 if (name.empty()) {
32 isc_throw(Unexpected, "empty role name");
33 }
34 }
35
37 virtual ~Role() = default;
38
42 std::string getName() const {
43 return (name_);
44 }
45
50 virtual std::string assign(const http::HttpRequestPtr& request) = 0;
51
55 virtual void setup(bool load) = 0;
56
61 static bool requireTls(const http::HttpRequestPtr& request) {
62 return (request && request->getTls());
63 }
64
70
71protected:
73 std::string name_;
74};
75
77class RemoteRole : public Role {
78public:
79
81 RemoteRole() : Role("remote") {
82 }
83
88 virtual std::string assign(const http::HttpRequestPtr& request) final {
89 if (request) {
90 return (request->getRemote());
91 } else {
92 return ("");
93 }
94 }
95
97 virtual void setup(bool) final {
98 }
99};
100
102class SubjectRole : public Role {
103public:
104
106 SubjectRole() : Role("subject") {
107 }
108
113 virtual std::string assign(const http::HttpRequestPtr& request) final {
114 if (request) {
115 return (request->getSubject());
116 } else {
117 return ("");
118 }
119 }
120
124 virtual void setup(bool load) final {
126 }
127};
128
130class IssuerRole : public Role {
131public:
132
134 IssuerRole() : Role("issuer") {
135 }
136
141 virtual std::string assign(const http::HttpRequestPtr& request) final {
142 if (request) {
143 return (request->getIssuer());
144 } else {
145 return ("");
146 }
147 }
148
152 virtual void setup(bool load) final {
154 }
155};
156
158class BasicAuthRole : public Role {
159public:
160
162 BasicAuthRole() : Role("basic-auth") {
163 }
164
169 virtual std::string assign(const http::HttpRequestPtr& request) final {
170 if (request) {
171 return (request->getBasicAuth());
172 } else {
173 return ("");
174 }
175 }
176
180 virtual void setup(bool load) final {
182 }
183};
184
186class CustomRole : public Role {
187public:
188
190 CustomRole() : Role("custom") {
191 }
192
197 virtual std::string assign(const http::HttpRequestPtr& request) final {
198 if (request) {
199 return (request->getCustom());
200 } else {
201 return ("");
202 }
203 }
204
206 virtual void setup(bool) final {
207 }
208};
209
211class StaticRole : public Role {
212public:
213
217 StaticRole(const std::string& role) : Role("static"), role_(role) {
218 }
219
224 virtual std::string assign(const http::HttpRequestPtr& request) final {
225 if (request) {
226 return (role_);
227 } else {
228 return ("");
229 }
230 }
231
233 virtual void setup(bool) final {
234 }
235
239 std::string getRole() const {
240 return (role_);
241 }
242
243private:
245 std::string role_;
246};
247
248} // end of namespace rbac
249} // end of namespace isc
250#endif
static bool recordIssuer_
Record issuer name.
Definition request.h:255
static bool recordSubject_
Access control parameters: Flags which indicate what information to record.
Definition request.h:252
static bool recordBasicAuth_
Record basic auth.
Definition request.h:258
virtual void setup(bool load) final
Setup HTTP library.
Definition rbac_role.h:180
BasicAuthRole()
Constructor.
Definition rbac_role.h:162
virtual std::string assign(const http::HttpRequestPtr &request) final
Assign the role from the basic HTTP authentication.
Definition rbac_role.h:169
virtual void setup(bool) final
Setup HTTP library.
Definition rbac_role.h:206
CustomRole()
Constructor.
Definition rbac_role.h:190
virtual std::string assign(const http::HttpRequestPtr &request) final
Assign the role from the remote custom value.
Definition rbac_role.h:197
virtual std::string assign(const http::HttpRequestPtr &request) final
Assign the role from the remote issuer.
Definition rbac_role.h:141
virtual void setup(bool load) final
Setup HTTP library.
Definition rbac_role.h:152
IssuerRole()
Constructor.
Definition rbac_role.h:134
virtual void setup(bool) final
Setup HTTP library.
Definition rbac_role.h:97
virtual std::string assign(const http::HttpRequestPtr &request) final
Assign the role from the remote address.
Definition rbac_role.h:88
RemoteRole()
Constructor.
Definition rbac_role.h:81
Role assignment base class.
Definition rbac_role.h:23
virtual std::string assign(const http::HttpRequestPtr &request)=0
Assign the role.
std::string name_
The class name.
Definition rbac_role.h:73
virtual ~Role()=default
Destructor.
virtual void setup(bool load)=0
Setup HTTP library.
Role(const std::string &name)
Constructor.
Definition rbac_role.h:30
static RolePtr parse(data::ConstElementPtr cfg)
Parse a role assignment value.
Definition rbac_role.cc:22
static bool requireTls(const http::HttpRequestPtr &request)
Require TLS.
Definition rbac_role.h:61
std::string getName() const
Returns the name.
Definition rbac_role.h:42
StaticRole(const std::string &role)
Constructor.
Definition rbac_role.h:217
virtual std::string assign(const http::HttpRequestPtr &request) final
Assign the static role.
Definition rbac_role.h:224
std::string getRole() const
Return the static role.
Definition rbac_role.h:239
virtual void setup(bool) final
Setup HTTP library.
Definition rbac_role.h:233
SubjectRole()
Constructor.
Definition rbac_role.h:106
virtual void setup(bool load) final
Setup HTTP library.
Definition rbac_role.h:124
virtual std::string assign(const http::HttpRequestPtr &request) final
Assign the role from the remote subject.
Definition rbac_role.h:113
int load(LibraryHandle &handle)
This function is called when the library is loaded.
boost::shared_ptr< const Element > ConstElementPtr
Definition data.h:30
boost::shared_ptr< HttpRequest > HttpRequestPtr
Pointer to the HttpRequest object.
Definition request.h:30
boost::shared_ptr< Role > RolePtr
Type of shared pointers to Role.
Definition rbac_role.h:20
Defines the logger used by the top-level component of kea-lfc.