UNPKG

3.26 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const http = require("http");
4const fs = require("fs");
5const portfinder = require('portfinder');
6var url = require('url');
7var path = require('path');
8var clc = require('cli-color');
9const cli_ux_1 = require("cli-ux");
10const uuid = require("uuid/v4");
11const auth_1 = require("./auth");
12const logSymbols = require('log-symbols');
13portfinder.basePort = 9012;
14const respondWithFile = (req, res, statusCode, filename) => {
15 return new Promise((resolve, reject) => {
16 fs.readFile(path.join(__dirname, filename), (err, response) => {
17 if (err) {
18 return reject(err);
19 }
20 res.writeHead(statusCode, {
21 'Content-Length': response.length,
22 'Content-Type': 'text/html'
23 });
24 res.end(response);
25 req.socket.destroy();
26 return resolve();
27 });
28 });
29};
30const loginWithLocalhost = (port, state, authUrl) => {
31 return new Promise((resolve, reject) => {
32 const server = http.createServer((req, res) => {
33 const query = url.parse(req.url, true).query || {};
34 if (query.state === state && query.token) {
35 respondWithFile(req, res, 200, './templates/success.html')
36 .then(() => {
37 auth_1.auth.set('token', query.token);
38 server.close();
39 console.log();
40 console.log(logSymbols.success, "You've successfully authenticated the cli!");
41 resolve();
42 process.exit();
43 })
44 .catch(() => {
45 return respondWithFile(req, res, 400, '../templates/failure.html');
46 });
47 }
48 else {
49 return respondWithFile(req, res, 400, './templates/failure.html');
50 }
51 });
52 server.listen(port, () => {
53 console.log();
54 console.log('Visit this URL to log in (will attempt to automatically open it now):');
55 console.log(clc.bold.underline(authUrl));
56 console.log();
57 console.log('Waiting for authentication...');
58 if (process.platform === 'linux') {
59 cli_ux_1.cli.open(authUrl, { app: 'xdg-open' }).catch(e => {
60 //console.log(e)
61 });
62 }
63 else {
64 cli_ux_1.cli.open(authUrl).catch(e => {
65 //console.log(e)
66 });
67 }
68 });
69 server.on('error', () => {
70 console.log(logSymbols.error, 'Failed to login. Please try again or email support@digitaloptgroup.com');
71 resolve();
72 process.exit();
73 });
74 });
75};
76exports.login = (baseURL) => {
77 return portfinder
78 .getPortPromise()
79 .then((port) => {
80 const state = uuid();
81 const authUrl = `${baseURL}/api/v1/login?state=${state}&redirectPort=${port}`;
82 return loginWithLocalhost(port, state, authUrl);
83 })
84 .catch(() => {
85 console.log(logSymbols.error, 'Failed to login. Please try again or email support@digitaloptgroup.com');
86 });
87};