reactium
Version:
A CLI for creating Reactium / Actinium projects.
122 lines (92 loc) • 2.88 kB
JavaScript
const defaults = {
app: 'ReactiumRegistry',
server: 'https://v1.reactium.io/api',
};
export const Session = config => {
const { op } = arcli;
config = config || arcli.props.config;
return op.get(config, 'registry.sessionToken');
};
export const ActiniumInit = (params = {}) => {
const isInit = global.ACTINIUM_INIT;
if (isInit === true) return;
const { op } = arcli;
const config = arcli.props.config;
const app =
op.get(params, 'app') || op.get(config, 'registry.app', 'Actinium');
const serverURL =
op.get(params, 'server') || op.get(config, 'registry.server');
if (app && serverURL) {
Actinium.initialize(app);
Actinium.serverURL = serverURL;
global.ACTINIUM_INIT = true;
} else {
throw new Error('unable to initialize Actinium server');
}
};
export const AuthUpdate = ({ config, params = {} }) => {
config = config || arcli.props.config;
const { fs, homedir, normalizePath, op } = arcli;
const filePath = normalizePath(homedir, '.arcli', 'config.json');
const map = {
app: 'registry.app',
server: 'registry.server',
sessionToken: 'registry.sessionToken',
};
Object.entries(map).forEach(([p, c]) => {
const val = op.get(params, p);
if (val) op.set(config, c, val);
});
fs.writeFileSync(filePath, JSON.stringify(config, null, 2));
arcli.props.config = config;
return config;
};
export const AuthValidated = async ({ params = {} }) => {
let valid = false;
const sessionToken = Session();
if (sessionToken) {
try {
ActiniumInit(params);
} catch (err) {
return valid;
}
try {
const validate =
global.AUTH_VALIDATE ||
Actinium.Cloud.run('session-validate', {}, { sessionToken });
global.AUTH_VALIDATE = validate;
valid = await validate;
} catch (err) {
valid = false;
}
}
return valid;
};
export const AuthRestore = () => {
const { op } = arcli;
const config = arcli.props.config;
Object.entries(defaults).forEach(([k, v]) =>
op.set(config, ['registry', k], v),
);
op.del(config, 'registry.sessionToken');
AuthUpdate({ config });
arcli.props.config = config;
return config;
};
export const Auth = async ({ params = {} }) => {
const { password, username } = params;
if (!password || !username) {
return {
msg: 'params.username and params.password are required parameters',
};
}
try {
ActiniumInit(params);
} catch (err) {
return err;
}
return Actinium.User.logIn(username, password)
.then(user => user.getSessionToken())
.catch(err => err);
};
export { Auth as default };