]> git.proxmox.com Git - ceph.git/blame - ceph/src/rgw/rgw_auth_registry.h
update sources to v12.1.3
[ceph.git] / ceph / src / rgw / rgw_auth_registry.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4
5#ifndef CEPH_RGW_AUTH_REGISTRY_H
6#define CEPH_RGW_AUTH_REGISTRY_H
7
8#include <functional>
9#include <memory>
10#include <ostream>
11#include <type_traits>
12#include <utility>
13
14#include "rgw_auth.h"
15#include "rgw_auth_s3.h"
16#include "rgw_swift_auth.h"
17
18namespace rgw {
19namespace auth {
20
21/* A class aggregating the knowledge about all Strategies in RadosGW. It is
22 * responsible for handling the dynamic reconfiguration on e.g. realm update. */
23class StrategyRegistry {
d2e6a577
FG
24 template <class AbstractorT,
25 bool AllowAnonAccessT = false>
26 using s3_strategy_t = \
27 rgw::auth::s3::AWSAuthStrategy<AbstractorT, AllowAnonAccessT>;
31f18b77
FG
28
29 struct s3_main_strategy_t : public Strategy {
30 using s3_main_strategy_plain_t = \
d2e6a577 31 s3_strategy_t<rgw::auth::s3::AWSGeneralAbstractor, true>;
31f18b77 32 using s3_main_strategy_boto2_t = \
d2e6a577 33 s3_strategy_t<rgw::auth::s3::AWSGeneralBoto2Abstractor, true>;
31f18b77
FG
34
35 s3_main_strategy_plain_t s3_main_strategy_plain;
36 s3_main_strategy_boto2_t s3_main_strategy_boto2;
37
38 s3_main_strategy_t(CephContext* const cct, RGWRados* const store)
39 : s3_main_strategy_plain(cct, store),
40 s3_main_strategy_boto2(cct, store) {
41 add_engine(Strategy::Control::SUFFICIENT, s3_main_strategy_plain);
42 add_engine(Strategy::Control::FALLBACK, s3_main_strategy_boto2);
43 }
44
45 const char* get_name() const noexcept override {
46 return "rgw::auth::StrategyRegistry::s3_main_strategy_t";
47 }
48 } s3_main_strategy;
7c673cae 49
7c673cae 50 using s3_post_strategy_t = \
31f18b77 51 s3_strategy_t<rgw::auth::s3::AWSBrowserUploadAbstractor>;
7c673cae
FG
52 s3_post_strategy_t s3_post_strategy;
53
54 rgw::auth::swift::DefaultStrategy swift_strategy;
55
56public:
57 StrategyRegistry(CephContext* const cct,
58 RGWRados* const store)
59 : s3_main_strategy(cct, store),
60 s3_post_strategy(cct, store),
61 swift_strategy(cct, store) {
62 }
63
7c673cae
FG
64 const s3_main_strategy_t& get_s3_main() const {
65 return s3_main_strategy;
66 }
67
68 const s3_post_strategy_t& get_s3_post() const {
69 return s3_post_strategy;
70 }
71
72 const rgw::auth::swift::DefaultStrategy& get_swift() const {
73 return swift_strategy;
74 }
75
76 static std::shared_ptr<StrategyRegistry>
77 create(CephContext* const cct,
78 RGWRados* const store) {
79 return std::make_shared<StrategyRegistry>(cct, store);
80 }
81};
82
83} /* namespace auth */
84} /* namespace rgw */
85
86using rgw_auth_registry_t = rgw::auth::StrategyRegistry;
87using rgw_auth_registry_ptr_t = std::shared_ptr<rgw_auth_registry_t>;
88
89#endif /* CEPH_RGW_AUTH_REGISTRY_H */