@@ -4,39 +4,45 @@ const { parse: parseUrl } = require('url')
4
4
5
5
module . exports . requestHooks = [
6
6
async context => {
7
+ console . log ( context )
7
8
const { store, request } = context
8
9
const keyId = await store . getItem ( 'keyId' )
9
10
let privateKey = await store . getItem ( 'privateKey' )
10
11
privateKey = `-----BEGIN PRIVATE KEY-----\n${ privateKey } \n-----END PRIVATE KEY-----`
12
+ const signRequest = await store . getItem ( 'signRequest' )
11
13
12
- const parsedUrl = parseUrl ( request . getUrl ( ) )
14
+ if ( signRequest ) {
15
+ const parsedUrl = parseUrl ( request . getUrl ( ) )
13
16
14
- const algorithmBits = 256
15
- const hashAlgorithm = `sha${ algorithmBits } `
16
- const digestAlgorithm = `SHA-${ algorithmBits } `
17
- const signAlgorithm = `RSA-SHA${ algorithmBits } `
17
+ const algorithmBits = 256
18
+ const hashAlgorithm = `sha${ algorithmBits } `
19
+ const digestAlgorithm = `SHA-${ algorithmBits } `
20
+ const signAlgorithm = `RSA-SHA${ algorithmBits } `
18
21
19
- const date = DateTime . utc ( ) . toRFC2822 ( )
22
+ const date = DateTime . utc ( ) . toRFC2822 ( )
20
23
21
- const digestHash = crypto . createHash ( hashAlgorithm )
22
- const digest = digestHash . update ( request . getBodyText ( ) ) . digest ( 'base64' )
24
+ const digestHash = crypto . createHash ( hashAlgorithm )
25
+ const digest = digestHash . update ( request . getBodyText ( ) ) . digest ( 'base64' )
23
26
24
- const signatureString = [ ]
25
- signatureString . push ( `(request-target): ${ request . getMethod ( ) . toLowerCase ( ) } ${ parsedUrl . path } ` )
26
- signatureString . push ( `host: ${ parsedUrl . hostname } ` )
27
- signatureString . push ( `digest: ${ digestAlgorithm } =${ digest } ` )
28
- signatureString . push ( `date: ${ date } ` )
29
- if ( request . hasHeader ( 'Content-Type' ) ) signatureString . push ( `content-type: ${ request . getHeader ( 'Content-Type' ) } ` )
30
- const signature = signatureString . join ( '\n' )
27
+ const signatureString = [ ]
28
+ signatureString . push ( `(request-target): ${ request . getMethod ( ) . toLowerCase ( ) } ${ parsedUrl . path } ` )
29
+ signatureString . push ( `host: ${ parsedUrl . hostname } ` )
30
+ signatureString . push ( `digest: ${ digestAlgorithm } =${ digest } ` )
31
+ signatureString . push ( `date: ${ date } ` )
32
+ if ( request . hasHeader ( 'Content-Type' ) ) signatureString . push ( `content-type: ${ request . getHeader ( 'Content-Type' ) } ` )
33
+ const signature = signatureString . join ( '\n' )
31
34
32
- const signatureSign = crypto . createSign ( signAlgorithm )
33
- const signedSignature = signatureSign . update ( signature ) . sign ( privateKey , 'base64' )
35
+ const signatureSign = crypto . createSign ( signAlgorithm )
36
+ const signedSignature = signatureSign . update ( signature ) . sign ( privateKey , 'base64' )
34
37
35
- const authorization = `Signature keyId="${ keyId } ", algorithm="${ signAlgorithm . toLowerCase ( ) } ", headers="(request-target) host digest date${ request . hasHeader ( 'Content-Type' ) ? ' content-type' : '' } ", signature="${ signedSignature } "`
38
+ const authorization = `Signature keyId="${ keyId } ", algorithm="${ signAlgorithm . toLowerCase ( ) } ", headers="(request-target) host digest date${ request . hasHeader ( 'Content-Type' ) ? ' content-type' : '' } ", signature="${ signedSignature } "`
36
39
37
- request . setHeader ( 'Digest' , `${ digestAlgorithm } =${ digest } ` )
38
- request . setHeader ( 'Date' , date )
39
- request . setHeader ( 'Authorization' , authorization )
40
+ request . setHeader ( 'Digest' , `${ digestAlgorithm } =${ digest } ` )
41
+ request . setHeader ( 'Date' , date )
42
+ request . setHeader ( 'Authorization' , authorization )
43
+ }
44
+
45
+ await store . clear ( )
40
46
}
41
47
]
42
48
@@ -57,8 +63,11 @@ module.exports.templateTags = [{
57
63
] ,
58
64
59
65
async run ( context , keyId , privateKey ) {
60
- await context . store . setItem ( 'keyId' , keyId )
61
- await context . store . setItem ( 'privateKey' , privateKey )
66
+ const { store } = context
67
+ await store . clear ( )
68
+ await store . setItem ( 'keyId' , keyId )
69
+ await store . setItem ( 'privateKey' , privateKey )
70
+ await store . setItem ( 'signRequest' , true )
62
71
return ' '
63
72
}
64
73
} ]
0 commit comments