xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
XrdMacaroonsHandler.hh
Go to the documentation of this file.
1 
2 #include <string>
3 #include <memory>
4 #include <stdexcept>
5 #include <vector>
6 
8 
9 class XrdOucEnv;
10 class XrdOucStream;
11 class XrdSecEntity;
12 class XrdAccAuthorize;
13 
14 namespace Macaroons {
15 
16 enum LogMask {
17  Debug = 0x01,
18  Info = 0x02,
19  Warning = 0x04,
20  Error = 0x08,
21  All = 0xff
22 };
23 
24 class Handler : public XrdHttpExtHandler {
25 public:
26  Handler(XrdSysError *log, const char *config, XrdOucEnv *myEnv,
27  XrdAccAuthorize *chain) :
28  m_max_duration(86400),
29  m_chain(chain),
30  m_log(log)
31  {
32  if (!Config(config, myEnv, m_log, m_location, m_secret, m_max_duration))
33  {
34  throw std::runtime_error("Macaroon handler config failed.");
35  }
36  }
37 
38  virtual ~Handler();
39 
40  virtual bool MatchesPath(const char *verb, const char *path) override;
41  virtual int ProcessReq(XrdHttpExtReq &req) override;
42 
43  virtual int Init(const char *cfgfile) override {return 0;}
44 
45  // Static configuration method; made static to allow Authz object to reuse
46  // this code.
47  static bool Config(const char *config, XrdOucEnv *env, XrdSysError *log,
48  std::string &location, std::string &secret, ssize_t &max_duration);
49 
50 private:
51  std::string GenerateID(const XrdSecEntity &, const std::string &, const std::string &);
52  std::string GenerateActivities(const XrdHttpExtReq &) const;
53 
56  int GenerateMacaroonResponse(XrdHttpExtReq& req, const std::string &response, const std::vector<std::string> &, ssize_t validity, bool oauth_response);
57 
58  static bool xsecretkey(XrdOucStream &Config, XrdSysError *log, std::string &secret);
59  static bool xsitename(XrdOucStream &Config, XrdSysError *log, std::string &location);
60  static bool xtrace(XrdOucStream &Config, XrdSysError *log);
61  static bool xmaxduration(XrdOucStream &Config, XrdSysError *log, ssize_t &max_duration);
62 
63  ssize_t m_max_duration;
66  std::string m_location;
67  std::string m_secret;
68 };
69 
70 }
static bool Config(const char *config, XrdOucEnv *env, XrdSysError *log, std::string &location, std::string &secret, ssize_t &max_duration)
XrdAccAuthorize * m_chain
Definition: XrdMacaroonsHandler.hh:64
virtual int ProcessReq(XrdHttpExtReq &req) override
Definition: XrdOucStream.hh:45
Handler(XrdSysError *log, const char *config, XrdOucEnv *myEnv, XrdAccAuthorize *chain)
Definition: XrdMacaroonsHandler.hh:26
ssize_t m_max_duration
Definition: XrdMacaroonsHandler.hh:63
std::string GenerateID(const XrdSecEntity &, const std::string &, const std::string &)
Definition: XrdAccAuthorize.hh:64
Definition: XrdSysError.hh:89
static bool xsitename(XrdOucStream &Config, XrdSysError *log, std::string &location)
Definition: XrdMacaroonsHandler.hh:24
LogMask
Definition: XrdMacaroonsHandler.hh:16
Definition: XrdMacaroonsHandler.hh:21
int ProcessTokenRequest(XrdHttpExtReq &req)
Definition: XrdOucEnv.hh:41
static bool xmaxduration(XrdOucStream &Config, XrdSysError *log, ssize_t &max_duration)
virtual bool MatchesPath(const char *verb, const char *path) override
Tells if the incoming path is recognized as one of the paths that have to be processed.
Definition: XrdHttpExtHandler.hh:79
static bool xsecretkey(XrdOucStream &Config, XrdSysError *log, std::string &secret)
virtual int Init(const char *cfgfile) override
Initializes the external request handler.
Definition: XrdMacaroonsHandler.hh:43
std::string m_secret
Definition: XrdMacaroonsHandler.hh:67
std::string m_location
Definition: XrdMacaroonsHandler.hh:66
int GenerateMacaroonResponse(XrdHttpExtReq &req, const std::string &response, const std::vector< std::string > &, ssize_t validity, bool oauth_response)
Definition: XrdMacaroonsHandler.hh:20
std::string GenerateActivities(const XrdHttpExtReq &) const
Definition: XrdMacaroonsHandler.hh:19
XrdSysError * m_log
Definition: XrdMacaroonsHandler.hh:65
Definition: XrdMacaroonsHandler.hh:18
Definition: XrdSecEntity.hh:51
Definition: XrdMacaroonsHandler.hh:17
static bool xtrace(XrdOucStream &Config, XrdSysError *log)
Definition: XrdHttpExtHandler.hh:45
int ProcessOAuthConfig(XrdHttpExtReq &req)