@sentio/cli 1.1.9-rc.2 → 1.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -45,16 +45,21 @@ function startServer(params) {
|
|
|
45
45
|
}
|
|
46
46
|
exports.startServer = startServer;
|
|
47
47
|
app.get('/callback', async (req, res) => {
|
|
48
|
-
|
|
48
|
+
const fail = function (...args) {
|
|
49
|
+
console.error(chalk_1.default.red(args));
|
|
50
|
+
res.end(args.toString());
|
|
51
|
+
server.close();
|
|
52
|
+
};
|
|
49
53
|
const host = (0, config_1.getFinalizedHost)(authParams.sentioHost);
|
|
50
54
|
const code = req.query.code;
|
|
51
55
|
if (!code || code.length == 0) {
|
|
56
|
+
fail('Failed to get authorization code');
|
|
52
57
|
return;
|
|
53
58
|
}
|
|
54
59
|
// exchange token
|
|
55
60
|
const tokenResRaw = await getToken(host, code);
|
|
56
61
|
if (!tokenResRaw.ok) {
|
|
57
|
-
|
|
62
|
+
fail(`Failed to get access token: ${tokenResRaw.status} ${tokenResRaw.statusText}`);
|
|
58
63
|
return;
|
|
59
64
|
}
|
|
60
65
|
const tokenRes = await tokenResRaw.json();
|
|
@@ -63,29 +68,30 @@ app.get('/callback', async (req, res) => {
|
|
|
63
68
|
const userResRaw = await getUser(host, accessToken);
|
|
64
69
|
if (!userResRaw.ok) {
|
|
65
70
|
if (userResRaw.status == 401) {
|
|
66
|
-
|
|
71
|
+
fail('The account does not exist, please sign up on sentio first');
|
|
67
72
|
}
|
|
68
73
|
else {
|
|
69
|
-
|
|
74
|
+
fail(`Failed to get user info: ${userResRaw.status} ${userResRaw.statusText}`);
|
|
70
75
|
}
|
|
71
76
|
return;
|
|
72
77
|
}
|
|
73
78
|
const userRes = await userResRaw.json();
|
|
74
79
|
if (!userRes.emailVerified) {
|
|
75
|
-
|
|
80
|
+
fail('Your account is not verified, please verify your email first');
|
|
76
81
|
return;
|
|
77
82
|
}
|
|
78
83
|
// create API key
|
|
79
84
|
const apiKeyName = `${os_1.default.hostname()}-${crypto.randomBytes(4).toString('hex')}`;
|
|
80
85
|
const createApiKeyResRaw = await createApiKey(host, apiKeyName, 'sdk_generated', accessToken);
|
|
81
86
|
if (!createApiKeyResRaw.ok) {
|
|
82
|
-
|
|
87
|
+
fail(`Failed to create API key: ${createApiKeyResRaw.status} ${createApiKeyResRaw.statusText}`);
|
|
83
88
|
return;
|
|
84
89
|
}
|
|
85
90
|
const createApiKeyRes = await createApiKeyResRaw.json();
|
|
86
91
|
const apiKey = createApiKeyRes['key'];
|
|
87
92
|
(0, key_1.WriteKey)(host, apiKey);
|
|
88
|
-
|
|
93
|
+
res.end("Login success, please go back to CLI to continue");
|
|
94
|
+
console.log(chalk_1.default.green('Login success, new API key: ' + apiKey));
|
|
89
95
|
server.close();
|
|
90
96
|
});
|
|
91
97
|
async function getToken(host, code) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-server.js","sourceRoot":"","sources":["../../src/commands/login-server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAA6B;AAC7B,sCAA2D;AAC3D,2CAA8B;AAC9B,4DAA8B;AAC9B,oCAAwC;AACxC,gCAAiC;AACjC,kDAAyB;AAEzB,4CAAmB;AACnB,+CAAgC;AAQhC,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAA;AAErB,IAAI,MAAmB,CAAA;AACvB,IAAI,UAAsB,CAAA;AAE1B,SAAgB,WAAW,CAAC,MAAkB;IAC5C,UAAU,GAAG,MAAM,CAAA;IACnB,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;AACxC,CAAC;AAHD,kCAGC;AAED,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACtC,GAAG,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"login-server.js","sourceRoot":"","sources":["../../src/commands/login-server.ts"],"names":[],"mappings":"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","sourcesContent":["import express from 'express'\nimport { getAuthConfig, getFinalizedHost } from '../config'\nimport url, { URL } from 'url'\nimport fetch from 'node-fetch'\nimport { getCliVersion } from '../utils'\nimport { WriteKey } from '../key'\nimport chalk from 'chalk'\nimport http from 'http'\nimport os from 'os'\nimport * as crypto from 'crypto'\n\ninterface AuthParams {\n serverPort: number\n sentioHost: string\n codeVerifier: string\n}\n\nconst app = express()\n\nlet server: http.Server\nlet authParams: AuthParams\n\nexport function startServer(params: AuthParams) {\n authParams = params\n server = app.listen(params.serverPort)\n}\n\napp.get('/callback', async (req, res) => {\n const fail = function(...args: any[]) {\n console.error(chalk.red(args))\n res.end(args.toString())\n server.close()\n }\n\n const host = getFinalizedHost(authParams.sentioHost)\n const code = req.query.code\n if (!code || (code as string).length == 0) {\n fail('Failed to get authorization code')\n return\n }\n\n // exchange token\n const tokenResRaw = await getToken(host, code as string)\n if (!tokenResRaw.ok) {\n fail(`Failed to get access token: ${tokenResRaw.status} ${tokenResRaw.statusText}`)\n return\n }\n const tokenRes = await tokenResRaw.json()\n const accessToken = tokenRes['access_token']\n\n // check if the account is ready\n const userResRaw = await getUser(host, accessToken)\n if (!userResRaw.ok) {\n if (userResRaw.status == 401) {\n fail('The account does not exist, please sign up on sentio first')\n } else {\n fail(`Failed to get user info: ${userResRaw.status} ${userResRaw.statusText}`)\n }\n return\n }\n const userRes = await userResRaw.json()\n if (!userRes.emailVerified) {\n fail('Your account is not verified, please verify your email first')\n return\n }\n\n // create API key\n const apiKeyName = `${os.hostname()}-${crypto.randomBytes(4).toString('hex')}`\n const createApiKeyResRaw = await createApiKey(host, apiKeyName, 'sdk_generated', accessToken)\n if (!createApiKeyResRaw.ok) {\n fail(`Failed to create API key: ${createApiKeyResRaw.status} ${createApiKeyResRaw.statusText}`)\n return\n }\n const createApiKeyRes = await createApiKeyResRaw.json()\n const apiKey = createApiKeyRes['key']\n WriteKey(host, apiKey)\n\n res.end(\"Login success, please go back to CLI to continue\")\n console.log(chalk.green('Login success, new API key: ' + apiKey))\n\n server.close()\n})\n\nasync function getToken(host: string, code: string) {\n const authConf = getAuthConfig(host)\n const params = new url.URLSearchParams({\n grant_type: 'authorization_code',\n client_id: authConf.clientId,\n code_verifier: authParams.codeVerifier,\n code: code,\n redirect_uri: `http://localhost:${authParams.serverPort}/callback`,\n })\n return fetch(`${authConf.domain}/oauth/token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: params.toString(),\n })\n}\n\nasync function createApiKey(host: string, name: string, source: string, accessToken: string) {\n const createApiKeyUrl = new URL('/api/v1/keys', host)\n return fetch(createApiKeyUrl, {\n method: 'POST',\n headers: {\n Authorization: 'Bearer ' + accessToken,\n version: getCliVersion(),\n },\n body: JSON.stringify({\n name: name,\n scopes: ['write:project'],\n source: source,\n }),\n })\n}\n\nasync function getUser(host: string, accessToken: string) {\n const getUserUrl = new URL('/api/v1/users', host)\n return fetch(getUserUrl, {\n method: 'GET',\n headers: {\n Authorization: 'Bearer ' + accessToken,\n version: getCliVersion(),\n },\n })\n}\n"]}
|
package/package.json
CHANGED
|
@@ -26,17 +26,23 @@ export function startServer(params: AuthParams) {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
app.get('/callback', async (req, res) => {
|
|
29
|
-
|
|
29
|
+
const fail = function(...args: any[]) {
|
|
30
|
+
console.error(chalk.red(args))
|
|
31
|
+
res.end(args.toString())
|
|
32
|
+
server.close()
|
|
33
|
+
}
|
|
34
|
+
|
|
30
35
|
const host = getFinalizedHost(authParams.sentioHost)
|
|
31
36
|
const code = req.query.code
|
|
32
37
|
if (!code || (code as string).length == 0) {
|
|
38
|
+
fail('Failed to get authorization code')
|
|
33
39
|
return
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
// exchange token
|
|
37
43
|
const tokenResRaw = await getToken(host, code as string)
|
|
38
44
|
if (!tokenResRaw.ok) {
|
|
39
|
-
|
|
45
|
+
fail(`Failed to get access token: ${tokenResRaw.status} ${tokenResRaw.statusText}`)
|
|
40
46
|
return
|
|
41
47
|
}
|
|
42
48
|
const tokenRes = await tokenResRaw.json()
|
|
@@ -46,15 +52,15 @@ app.get('/callback', async (req, res) => {
|
|
|
46
52
|
const userResRaw = await getUser(host, accessToken)
|
|
47
53
|
if (!userResRaw.ok) {
|
|
48
54
|
if (userResRaw.status == 401) {
|
|
49
|
-
|
|
55
|
+
fail('The account does not exist, please sign up on sentio first')
|
|
50
56
|
} else {
|
|
51
|
-
|
|
57
|
+
fail(`Failed to get user info: ${userResRaw.status} ${userResRaw.statusText}`)
|
|
52
58
|
}
|
|
53
59
|
return
|
|
54
60
|
}
|
|
55
61
|
const userRes = await userResRaw.json()
|
|
56
62
|
if (!userRes.emailVerified) {
|
|
57
|
-
|
|
63
|
+
fail('Your account is not verified, please verify your email first')
|
|
58
64
|
return
|
|
59
65
|
}
|
|
60
66
|
|
|
@@ -62,13 +68,15 @@ app.get('/callback', async (req, res) => {
|
|
|
62
68
|
const apiKeyName = `${os.hostname()}-${crypto.randomBytes(4).toString('hex')}`
|
|
63
69
|
const createApiKeyResRaw = await createApiKey(host, apiKeyName, 'sdk_generated', accessToken)
|
|
64
70
|
if (!createApiKeyResRaw.ok) {
|
|
65
|
-
|
|
71
|
+
fail(`Failed to create API key: ${createApiKeyResRaw.status} ${createApiKeyResRaw.statusText}`)
|
|
66
72
|
return
|
|
67
73
|
}
|
|
68
74
|
const createApiKeyRes = await createApiKeyResRaw.json()
|
|
69
75
|
const apiKey = createApiKeyRes['key']
|
|
70
76
|
WriteKey(host, apiKey)
|
|
71
|
-
|
|
77
|
+
|
|
78
|
+
res.end("Login success, please go back to CLI to continue")
|
|
79
|
+
console.log(chalk.green('Login success, new API key: ' + apiKey))
|
|
72
80
|
|
|
73
81
|
server.close()
|
|
74
82
|
})
|