Logo ROOT  
Reference Guide
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#include "TObject.h"
40
41#include "TString.h"
42
43
44
45class TS3HTTPRequest : public TObject {
46
47public:
48
51
52private:
53 EHTTPVerb fVerb; // HTTP Verb
54 EAuthType fAuthType; // Authentication type
55 TString fHost; // Host name
56 TString fBucket; // Bucket name
57 TString fObjectKey; // Object key
58 TString fTimeStamp; // Request time stamp
59 TString fAccessKey; // Access key (for authentication)
60 TString fSecretKey; // Secret key (for authentication)
61 TString fSessionToken; // Session token (for authentication)
62
63
64protected:
65 TString HTTPVerbToTString(EHTTPVerb httpVerb) const;
69 TString MakeAuthPrefix() const;
70 TString MakeHostHeader() const;
71 TString MakeDateHeader() const;
74
75public:
76
78 TS3HTTPRequest(EHTTPVerb httpVerb, const TString& host,
79 const TString& bucket, const TString& objectKey,
80 EAuthType authType, const TString& accessKey,
81 const TString& secretKey);
83 virtual ~TS3HTTPRequest() { }
84
85 EHTTPVerb GetHTTPVerb() const { return fVerb; }
86 const TString& GetHost() const { return fHost; }
87 const TString& GetBucket() const { return fBucket; }
88 const TString& GetObjectKey() const { return fObjectKey; }
89 const TString& GetTimeStamp() const { return fTimeStamp; }
90 const TString& GetAccessKey() const { return fAccessKey; }
91 const TString& GetSecretKey() const { return fSecretKey; }
92 TString GetAuthType() const { return fAuthType; }
94
95 TS3HTTPRequest& SetHost(const TString& host);
96 TS3HTTPRequest& SetBucket(const TString& bucket);
97 TS3HTTPRequest& SetObjectKey(const TString& objectKey);
98 TS3HTTPRequest& SetAccessKey(const TString& accessKey);
99 TS3HTTPRequest& SetSecretKey(const TString& secretKey);
100 TS3HTTPRequest& SetAuthKeys(const TString& accessKey, const TString& secretKey);
103
104 ClassDef(TS3HTTPRequest, 0) // Create generic HTTP request for Amazon S3 and Google Storage services
105};
106
107
108//////////////////////////////////////////////////////////////////////////
109// //
110// Inlines //
111// //
112//////////////////////////////////////////////////////////////////////////
113
115{
116 fHost = host;
117 return *this;
118}
119
121{
122 fBucket = bucket;
123 return *this;
124}
125
127{
128 fObjectKey = objectKey;
129 return *this;
130}
131
132inline TS3HTTPRequest& TS3HTTPRequest::SetAuthKeys(const TString& accessKey, const TString& secretKey)
133{
134 fAccessKey = accessKey;
135 fSecretKey = secretKey;
136 return *this;
137}
138
140{
141 fAuthType = authType;
142 return *this;
143}
144
146{
147 fAccessKey = accessKey;
148 return *this;
149}
150
152{
153 fSecretKey = secretKey;
154 return *this;
155}
156
158{
159 fSessionToken = token;
160 return *this;
161}
162
163#endif
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kTRUE
Definition: RtypesCore.h:87
#define ClassDef(name, id)
Definition: Rtypes.h:326
Mother of all ROOT objects.
Definition: TObject.h:37
TS3HTTPRequest & SetObjectKey(const TString &objectKey)
const TString & GetObjectKey() const
const TString & GetSecretKey() const
TString fSessionToken
TString GetRequest(TS3HTTPRequest::EHTTPVerb httpVerb, Bool_t appendCRLF=kTRUE)
Returns the HTTP request ready to be sent to the server.
const TString & GetBucket() const
TString HTTPVerbToTString(EHTTPVerb httpVerb) const
TString MakeAuthPrefix() const
Returns the authentication prefix.
TString fAccessKey
TString fTimeStamp
TS3HTTPRequest & SetAuthKeys(const TString &accessKey, const TString &secretKey)
TS3HTTPRequest & SetBucket(const TString &bucket)
EAuthType fAuthType
TString MakeTokenHeader() const
Returns the session security token header for this HTTP request.
TString GetAuthType() const
TS3HTTPRequest & SetTimeStamp()
Sets this request's time stamp according to: http://code.google.com/apis/storage/docs/reference-heade...
TS3HTTPRequest & SetSessionToken(const TString &token)
TS3HTTPRequest & SetSecretKey(const TString &secretKey)
TString ComputeSignature(TS3HTTPRequest::EHTTPVerb httpVerb) const
Returns this request's signature.
TString fSecretKey
TString MakeRequestLine(TS3HTTPRequest::EHTTPVerb httpVerb) const
Returns the first line of a HTTP request for this object.
TString MakeAuthHeader(TS3HTTPRequest::EHTTPVerb httpVerb) const
Returns the authentication header for this HTTP request.
EHTTPVerb GetHTTPVerb() const
TS3HTTPRequest & SetAuthType(TS3HTTPRequest::EAuthType authType)
const TString & GetAccessKey() const
const TString & GetTimeStamp() const
const TString & GetHost() const
TString MakeHostHeader() const
Returns the 'Host' header to include in the HTTP request.
TString MakeDateHeader() const
Returns the date header for this HTTP request.
TS3HTTPRequest & SetAccessKey(const TString &accessKey)
TString fObjectKey
EHTTPVerb fVerb
TS3HTTPRequest & SetHost(const TString &host)
virtual ~TS3HTTPRequest()
Basic string class.
Definition: TString.h:131
auto * m
Definition: textangle.C:8