1 |
|
2 | 'use strict'
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | const request = require('request')
|
11 |
|
12 | const scope = require('./scope.js')
|
13 |
|
14 | function assumeAWSRole(
|
15 | config /* : BlinkMRCServer */,
|
16 | pathname /* : string */,
|
17 | accessToken /* : string | void */
|
18 | ) /* : Promise<Object> */ {
|
19 | const serverCLIServiceConfig = scope.serverCLIServiceConfig(config)
|
20 | return new Promise((resolve, reject) => {
|
21 | request.post(
|
22 | `${serverCLIServiceConfig.origin}${pathname}`,
|
23 | {
|
24 | auth: {
|
25 | bearer: accessToken
|
26 | },
|
27 | json: true
|
28 | },
|
29 | (err, response, body) => {
|
30 | if (err) {
|
31 | return reject(err)
|
32 | }
|
33 | if (response.statusCode !== 200) {
|
34 | return reject(
|
35 | new Error(
|
36 | body && body.message
|
37 | ? body.message
|
38 | : 'Unknown error, please try again and contact support if the problem persists'
|
39 | )
|
40 | )
|
41 | }
|
42 | return resolve(body)
|
43 | }
|
44 | )
|
45 | }).then(body => ({
|
46 | accessKeyId: body.Credentials.AccessKeyId,
|
47 | secretAccessKey: body.Credentials.SecretAccessKey,
|
48 | sessionToken: body.Credentials.SessionToken
|
49 | }))
|
50 | }
|
51 |
|
52 | function assumeAWSRoleToDeploy(
|
53 | config /* : BlinkMRCServer */,
|
54 | env /* : string */,
|
55 | accessToken /* : string | void */
|
56 | ) /* : Promise<Object> */ {
|
57 | return assumeAWSRole(
|
58 | config,
|
59 | `/v2/apis/${config.project || ''}/environments/${env}/credentials/deploy`,
|
60 | accessToken
|
61 | )
|
62 | }
|
63 |
|
64 | function assumeAWSRoleToViewLogs(
|
65 | config /* : BlinkMRCServer */,
|
66 | env /* : string */,
|
67 | accessToken /* : string | void */
|
68 | ) /* : Promise<Object> */ {
|
69 | return assumeAWSRole(
|
70 | config,
|
71 | `/apis/${config.project || ''}/environments/${env}/credentials/logs`,
|
72 | accessToken
|
73 | )
|
74 | }
|
75 |
|
76 | function assumeAWSRoleToServeLocally(
|
77 | config /* : BlinkMRCServer */,
|
78 | env /* : string */,
|
79 | accessToken /* : string | void */
|
80 | ) /* : Promise<Object> */ {
|
81 | return assumeAWSRole(
|
82 | config,
|
83 | `/apis/${config.project || ''}/environments/${env}/credentials/serve`,
|
84 | accessToken
|
85 | )
|
86 | }
|
87 |
|
88 | module.exports = {
|
89 | assumeAWSRoleToDeploy,
|
90 | assumeAWSRoleToViewLogs,
|
91 | assumeAWSRoleToServeLocally
|
92 | }
|