UNPKG

2.06 kBJavaScriptView Raw
1'use strict';
2
3// foreign modules
4
5const userConfig = require('@blinkmobile/blinkmrc').userConfig;
6
7// local modules
8
9const pkg = require('../package.json');
10const scope = require('./scope');
11const urlUtils = require('./utils/url');
12
13// this module
14
15function makeConfig () {
16 return userConfig({
17 name: pkg.name,
18 userConfigDir: process.env.BMP_USER_CONFIG_DIR
19 });
20}
21
22function login (options) {
23 options = options || {};
24 const config = makeConfig();
25
26 return scope.read()
27 .catch(() => {
28 throw new Error('must set project scope first');
29 })
30 .then((s) => urlUtils.getOrigin(urlUtils.toHTTPS(s) || ''))
31 .then((origin) => config.update((cfg) => {
32 cfg.bmp = cfg.bmp || {};
33 cfg.bmp[origin] = {
34 credential: options.credential
35 };
36 return cfg;
37 }));
38}
39
40function logout () {
41 const config = makeConfig();
42
43 return scope.read()
44 .catch(() => {
45 throw new Error('must set project scope first');
46 })
47 .then((s) => urlUtils.getOrigin(s))
48 .then((origin) => config.update((cfg) => {
49 cfg.bmp = cfg.bmp || {};
50 if (cfg.bmp[origin]) {
51 delete cfg.bmp[origin].credential;
52 }
53 return cfg;
54 }));
55}
56
57function readAll () {
58 const config = makeConfig();
59
60 return config.load()
61 .then((obj) => {
62 const bmp = obj.bmp || {};
63 return Object.keys(bmp)
64 .filter((origin) => !!bmp[origin].credential)
65 .map((origin) => {
66 const credential = bmp[origin].credential;
67 return { origin, credential };
68 });
69 });
70}
71
72function read () {
73 return scope.read()
74 .then((s) => Promise.all([
75 urlUtils.getOrigin(urlUtils.toHTTPS(s) || ''),
76 readAll()
77 ]))
78 .then((result) => {
79 const origin = result[0];
80 const auths = result[1];
81 const matches = auths.filter((a) => a.origin === origin);
82 if (matches.length) {
83 return matches[0];
84 }
85 throw new Error(`not yet logged in for scope origin: ${origin}`);
86 });
87}
88
89module.exports = {
90 login,
91 logout,
92 read,
93 readAll
94};