ROOT  6.07/01
Reference Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
TS3HTTPRequest.h
Go to the documentation of this file.
1 // @(#)root/net:$Id$
2 // Author: Fabio Hernandez 30/01/2013
3 // based on an initial version by Marcelo Sousa (class THTTPMessage)
4 
5 /*************************************************************************
6  * Copyright (C) 1995-2011, Rene Brun and Fons Rademakers. *
7  * All rights reserved. *
8  * *
9  * For the licensing terms see $ROOTSYS/LICENSE. *
10  * For the list of contributors see $ROOTSYS/README/CREDITS. *
11  *************************************************************************/
12 
13 #ifndef ROOT_TS3HTTPRequest
14 #define ROOT_TS3HTTPRequest
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TS3HTTPRequest //
19 // //
20 // An object of this class represents an HTTP request extended to be //
21 // compatible with Amazon's S3 protocol. //
22 // Specifically, such a request contains an 'Authorization' header with //
23 // information used by the S3 server for authenticating this request. //
24 // The authentication information is computed based on a pair of access //
25 // key and secret key which are both provided to the user by the S3 //
26 // service provider (e.g. Amazon, Google, etc.). //
27 // The secret key is used to compute a signature of selected fields in //
28 // the request. The algorithm for computing the signature is documented //
29 // in: //
30 // //
31 // Google storage: //
32 // http://code.google.com/apis/storage/docs/reference/v1/developer-guidev1.html#authentication
33 // //
34 // Amazon: //
35 // http://docs.aws.amazon.com/AmazonS3/latest/dev/S3_Authentication2.html
36 // //
37 //////////////////////////////////////////////////////////////////////////
38 
39 #ifndef ROOT_TObject
40 #include "TObject.h"
41 #endif
42 
43 #ifndef ROOT_TString
44 #include "TString.h"
45 #endif
46 
47 
48 
49 class TS3HTTPRequest : public TObject {
50 
51 public:
52 
55 
56 private:
57  EHTTPVerb fVerb; // HTTP Verb
58  EAuthType fAuthType; // Authentication type
59  TString fHost; // Host name
60  TString fBucket; // Bucket name
61  TString fObjectKey; // Object key
62  TString fTimeStamp; // Request time stamp
63  TString fAccessKey; // Access key (for authentication)
64  TString fSecretKey; // Secret key (for authentication)
65 
66 
67 protected:
68  TString HTTPVerbToTString(EHTTPVerb httpVerb) const;
72  TString MakeAuthPrefix() const;
73  TString MakeHostHeader() const;
74  TString MakeDateHeader() const;
76 
77 public:
78 
80  TS3HTTPRequest(EHTTPVerb httpVerb, const TString& host,
81  const TString& bucket, const TString& objectKey,
82  EAuthType authType, const TString& accessKey,
83  const TString& secretKey);
85  virtual ~TS3HTTPRequest() { }
86 
87  EHTTPVerb GetHTTPVerb() const { return fVerb; }
88  const TString& GetHost() const { return fHost; }
89  const TString& GetBucket() const { return fBucket; }
90  const TString& GetObjectKey() const { return fObjectKey; }
91  const TString& GetTimeStamp() const { return fTimeStamp; }
92  const TString& GetAccessKey() const { return fAccessKey; }
93  const TString& GetSecretKey() const { return fSecretKey; }
94  TString GetAuthType() const { return fAuthType; }
96 
97  TS3HTTPRequest& SetHost(const TString& host);
98  TS3HTTPRequest& SetBucket(const TString& bucket);
99  TS3HTTPRequest& SetObjectKey(const TString& objectKey);
100  TS3HTTPRequest& SetAccessKey(const TString& accessKey);
101  TS3HTTPRequest& SetSecretKey(const TString& secretKey);
102  TS3HTTPRequest& SetAuthKeys(const TString& accessKey, const TString& secretKey);
104 
105  ClassDef(TS3HTTPRequest, 0) // Create generic HTTP request for Amazon S3 and Google Storage services
106 };
107 
108 
109 //////////////////////////////////////////////////////////////////////////
110 // //
111 // Inlines //
112 // //
113 //////////////////////////////////////////////////////////////////////////
114 
116 {
117  fHost = host;
118  return *this;
119 }
120 
122 {
123  fBucket = bucket;
124  return *this;
125 }
126 
128 {
129  fObjectKey = objectKey;
130  return *this;
131 }
132 
133 inline TS3HTTPRequest& TS3HTTPRequest::SetAuthKeys(const TString& accessKey, const TString& secretKey)
134 {
135  fAccessKey = accessKey;
136  fSecretKey = secretKey;
137  return *this;
138 }
139 
141 {
142  fAuthType = authType;
143  return *this;
144 }
145 
147 {
148  fAccessKey = accessKey;
149  return *this;
150 }
151 
153 {
154  fSecretKey = secretKey;
155  return *this;
156 }
157 
158 #endif
TString MakeRequestLine(TS3HTTPRequest::EHTTPVerb httpVerb) const
Returns the first line of a HTTP request for this object.
TS3HTTPRequest & SetTimeStamp()
Sets this request's time stamp according to: http://code.google.com/apis/storage/docs/reference-heade...
TString GetAuthType() const
TString MakeAuthHeader(TS3HTTPRequest::EHTTPVerb httpVerb) const
Returns the authentication header for this HTTP request.
TString fTimeStamp
virtual ~TS3HTTPRequest()
TS3HTTPRequest & SetObjectKey(const TString &objectKey)
TS3HTTPRequest & SetSecretKey(const TString &secretKey)
Basic string class.
Definition: TString.h:137
bool Bool_t
Definition: RtypesCore.h:59
EAuthType fAuthType
TString fObjectKey
TS3HTTPRequest & SetHost(const TString &host)
#define ClassDef(name, id)
Definition: Rtypes.h:254
const TString & GetBucket() const
TString fSecretKey
const TString & GetHost() const
EHTTPVerb GetHTTPVerb() const
TString MakeAuthPrefix() const
Returns the authentication prefix.
TString fAccessKey
TString GetRequest(TS3HTTPRequest::EHTTPVerb httpVerb, Bool_t appendCRLF=kTRUE)
Returns the HTTP request ready to be sent to the server.
const TString & GetAccessKey() const
TMarker * m
Definition: textangle.C:8
TString MakeHostHeader() const
Returns the 'Host' header to include in the HTTP request.
TS3HTTPRequest & SetAccessKey(const TString &accessKey)
TString MakeDateHeader() const
Returns the date header for this HTTP request.
TString HTTPVerbToTString(EHTTPVerb httpVerb) const
const TString & GetObjectKey() const
const TString & GetSecretKey() const
TS3HTTPRequest & SetAuthType(TS3HTTPRequest::EAuthType authType)
Mother of all ROOT objects.
Definition: TObject.h:58
TString ComputeSignature(TS3HTTPRequest::EHTTPVerb httpVerb) const
Returns this request's signature.
TS3HTTPRequest & SetAuthKeys(const TString &accessKey, const TString &secretKey)
TS3HTTPRequest & SetBucket(const TString &bucket)
const TString & GetTimeStamp() const
const Bool_t kTRUE
Definition: Rtypes.h:91
EHTTPVerb fVerb