1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#ifndef CEPH_RGW_SWIFT_H
#define CEPH_RGW_SWIFT_H
#include "common/Cond.h"
#include "rgw_common.h"
class RGWRados;
struct rgw_swift_auth_info {
int status;
string auth_groups;
string user;
string display_name;
long long ttl;
rgw_swift_auth_info() : status(0), ttl(0) {}
};
class KeystoneToken {
public:
string tenant_name;
string tenant_id;
string user_name;
time_t expiration;
map<string, bool> roles;
KeystoneToken() : expiration(0) {}
int parse(CephContext *cct, bufferlist& bl);
bool expired() {
uint64_t now = ceph_clock_now(NULL).sec();
return (now < (uint64_t)expiration);
}
};
class RGWSwift {
CephContext *cct;
atomic_t down_flag;
int validate_token(const char *token, struct rgw_swift_auth_info *info);
int validate_keystone_token(RGWRados *store, const string& token, struct rgw_swift_auth_info *info,
RGWUserInfo& rgw_user);
int parse_keystone_token_response(const string& token, bufferlist& bl, struct rgw_swift_auth_info *info,
KeystoneToken& t);
int update_user_info(RGWRados *store, struct rgw_swift_auth_info *info, RGWUserInfo& user_info);
class KeystoneRevokeThread : public Thread {
CephContext *cct;
RGWSwift *swift;
Mutex lock;
Cond cond;
public:
KeystoneRevokeThread(CephContext *_cct, RGWSwift *_swift) : cct(_cct), swift(_swift), lock("KeystoneRevokeThread") {}
void *entry();
void stop();
};
KeystoneRevokeThread *keystone_revoke_thread;
void init();
void finalize();
void init_keystone();
void finalize_keystone();
bool supports_keystone() {
return !cct->_conf->rgw_keystone_url.empty();
}
protected:
int check_revoked();
public:
RGWSwift(CephContext *_cct) : cct(_cct), keystone_revoke_thread(NULL) {
init();
}
~RGWSwift() {
finalize();
}
bool verify_swift_token(RGWRados *store, req_state *s);
bool going_down();
};
extern RGWSwift *rgw_swift;
void swift_init(CephContext *cct);
void swift_finalize();
#endif
|