-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathAmazonEmailServiceRequests.pas
71 lines (59 loc) · 1.93 KB
/
AmazonEmailServiceRequests.pas
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
unit AmazonEmailServiceRequests;
interface
uses
IPPeerAPI;
type
TAmazonEmailServiceRequests = class
private
FAWSAccessKey: string;
FAWSSecretKey: string;
FDateRequest: TDateTime;
function GetCurrentDate: string;
function GetSignature(const StringToSign: string): string;
public
constructor Create(const AWSAccessKey, AWSSecretKey: string);
procedure PrepareRequest(const Peer: IIPHTTP);
property DateRequest: TDateTime read FDateRequest;
end;
implementation
uses
DateUtils,
SysUtils,
PrepareRequestSignature;
constructor TAmazonEmailServiceRequests.Create(const AWSAccessKey, AWSSecretKey: string);
begin
FAWSAccessKey := AWSAccessKey;
FAWSSecretKey := AWSSecretKey;
end;
function TAmazonEmailServiceRequests.GetCurrentDate: string;
const
FORMAT_HTTP_DATE = 'ddd, dd mmm yyyy hh:nn:ss "GMT"';
begin
FDateRequest := Now;
Result := FormatDateTime(FORMAT_HTTP_DATE, TTimeZone.Local.ToUniversalTime(FDateRequest), TFormatSettings.Create('en-US'));
end;
function TAmazonEmailServiceRequests.GetSignature(const StringToSign: string): string;
var
PrepareRequestSignature: TPrepareRequestSignature;
begin
PrepareRequestSignature := TPrepareRequestSignature.Create(FAWSAccessKey, FAWSSecretKey);
try
Result := PrepareRequestSignature.GetSignature(StringToSign);
finally
PrepareRequestSignature.Free;
end;
end;
procedure TAmazonEmailServiceRequests.PrepareRequest(const Peer: IIPHTTP);
var
CurrentTime: string;
AuthorizationHeader: string;
begin
Peer.GetRequest.ContentType := 'application/x-www-form-urlencoded';
Peer.GetRequest.ContentLength := 230;
CurrentTime := GetCurrentDate;
Peer.GetRequest.CustomHeaders.AddValue('Date', CurrentTime);
AuthorizationHeader := Format('AWS3-HTTPS AWSAccessKeyId=%s, Algorithm=HmacSHA256, Signature=%s',
[FAWSAccessKey, GetSignature(CurrentTime)]);
Peer.GetRequest.CustomHeaders.AddValue('X-Amzn-Authorization', AuthorizationHeader);
end;
end.