UNPKG

guld-user

Version:

Guld user management tools.

115 lines (107 loc) 3.25 kB
const guldEnv = require('guld-env') const { getFS } = require('guld-fs') const { getConfig } = require('guld-git-config') const global = require('window-or-global') const got = require('got') const path = require('path') const home = require('user-home') var fs async function getName () { var cfg if (global.GULDNAME && typeof global.GULDNAME !== 'undefined' && global.GULDNAME.length > 0) { return global.GULDNAME } else if (guldEnv.JS.startsWith('node')) { if (process.env.GULDNAME && typeof process.env.GULDNAME !== 'undefined' && process.env.GULDNAME.length > 0) { global.GULDNAME = process.env.GULDNAME return global.GULDNAME } else { cfg = await getConfig('global') if (cfg && cfg.user && cfg.user.username) { global.GULDNAME = cfg.user.username return global.GULDNAME } if (process.env.USER) { global.GULDNAME = process.env.USER return global.GULDNAME } } } else { cfg = await getConfig('global') if (cfg && cfg.user && cfg.user.username) { global.GULDNAME = cfg.user.username return global.GULDNAME } } global.GULDNAME = 'guld' return 'guld' } async function getFullName () { var cfg if (global.GULDFULLNAME && typeof global.GULDFULLNAME !== 'undefined' && global.GULDFULLNAME.length > 0) { return global.GULDFULLNAME } else { cfg = await getConfig('global') if (cfg && cfg.user && cfg.user.name) { global.GULDFULLNAME = cfg.user.name return global.GULDFULLNAME } } } async function exists (gname) { gname = gname || await getName() validate(gname) fs = fs || await getFS() try { var stats = await fs.stat(path.join(home, '.blocktree', gname)) if (stats && stats.isDirectory()) return true } catch (e) { if (!e.hasOwnProperty('code') || e.code !== 'ENOENT') throw e } try { const resp = await got(`https://raw.githubusercontent.com/guldcoin/_blocktree/guld/.gitmodules`) if (resp && resp.body) { return resp.body.indexOf(`[submodule "${gname}"]`) > -1 } } catch (e) { return true // TODO parse for specific error and maybe re-throw } return true } function validate (gname) { var re = /^[a-z0-9-]{4,40}$/ var result = re.exec(gname) if (!result || result[0].length === 0) { throw new RangeError(`name ${gname} is not valid. Can only be lowercase letters, numbers and dashes (-)`) } else return true } async function branches () { fs = fs || await getFS() var heads = await fs.readdir(path.join(home, '.git', 'refs', 'heads')) || [] return heads // this config file method is not how `git branch --list` works /* return Object.keys(cfg).filter(l => { return l.startsWith('branch') }).map(l => { return l.split(' ')[1].replace(/"/g, '') }) */ } async function getAlias (user, network) { user = user || await getName() var cfg = await getConfig('public', user) if (cfg.aliases) { if (network) { if (cfg.aliases.hasOwnProperty(network)) return cfg.aliases[network] } else return cfg.aliases } return {} } module.exports = { getName: getName, getFullName: getFullName, exists: exists, validate: validate, branches: branches, getAlias: getAlias }