UNPKG

ryuu

Version:

Domo App Dev Studio CLI, The main tool used to create, edit, and publish app designs to Domo

109 lines 3.79 kB
import { globSync } from 'glob'; import fs from 'fs-extra'; import path from 'path'; import { constant } from '../models/index.js'; import Domo from 'ryuu-client'; import { log } from './log.js'; import Configstore from 'configstore'; import enquirer from 'enquirer'; const { prompt } = enquirer; const home = Domo.getHomeDir(); export class Login { constructor(instance) { this.instance = instance ?? Login.getCurrentLogin().instance; this.login = new Configstore(`ryuu/${this.instance}`); this.proxy = new Configstore('proxy'); if (this.instance === '') log.fail('You have not logged into any Domo instances'); } static getPreviousLogins() { const logins = (globSync(home + '/ryuu/*.json') || []).map((file) => { return fs.readJsonSync(file); }); return logins; } /** * persist login to user's domo home */ persistLogin(refreshToken, devToken) { this.login.set('instance', this.instance); this.login.set('refreshToken', refreshToken); this.login.set('devToken', !!devToken); return { instance: this.instance, refreshToken, devToken }; } removeDevToken() { this.deleteRefreshToken(); this.login.set('devToken', false); } deleteRefreshToken() { this.login.delete('refreshToken'); } static removeLogin(instance) { const loginFile = path.resolve(home + '/ryuu/' + instance + '.json'); fs.ensureFileSync(loginFile); return fs.unlink(loginFile); } static removeAllLogins() { fs.emptyDirSync(home + '/ryuu/'); } static verifyLogin(login) { verifyLoginLocal(login); } logout() { log.info(`Attempting to log out from ${this.instance}`); if (this.login.has('refreshToken')) { this.deleteRefreshToken(); if (!this.login.has('refreshToken')) { log.ok('Successful logout from ' + this.instance); } else { log.fail(`Failed logout from ${this.instance}`); } } else { log.ok(`Not currently logged into ${this.instance}`); } } async getClient() { const refreshToken = this.login.get('refreshToken'); try { const username = this.proxy.get('username'); const host = this.proxy.get('host'); const port = this.proxy.get('port'); if (!username) return new Domo(this.instance, refreshToken, constant.CLIENT_ID, { host, port }, this.login.get('devToken')); const answers = await prompt([ { type: 'password', message: 'Please enter your password:', name: 'pass', }, ]); return new Domo(this.instance, refreshToken, constant.CLIENT_ID, { host, port, username, password: answers.pass, }, this.login.get('devToken')); } catch { return new Domo(this.instance, refreshToken, constant.CLIENT_ID); } } } Login.getCurrentLogin = () => { const allLogins = globSync(home + '/ryuu/*.json'); // If there are no logins, return an empty object if (allLogins.length === 0) { return { instance: '' }; } const currentLogin = allLogins.reduce((prev, next) => { return fs.statSync(prev).mtime > fs.statSync(next).mtime ? prev : next; }); return fs.readJsonSync(currentLogin); }; function verifyLoginLocal(login) { if (!login.refreshToken) log.fail('Not authenticated', 'Please login using "domo login"'); } //# sourceMappingURL=login.js.map