b68/packages/cli/bin/commands/auth.js

195 lines
6.4 KiB
JavaScript

import axios from 'axios'
import fs from 'fs'
import APIURL from '../../api.config.js'
import Configstore from 'configstore'
import readline from 'readline'
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
})
const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8'))
const configStore = new Configstore(packageJson.name)
export const login = (email, apiKey) => {
console.log('Validation initaited ...')
let axConfig = {
method: 'get',
url: APIURL + '/api/auth/validate/' + email + '/' + apiKey,
}
axios(axConfig)
.then(function (response) {
if (response.data === 'OK') {
console.log(
'Credentials validated and Stored at ' +
configStore.path +
'!'
)
configStore.set('email', email)
configStore.set('apiKey', apiKey)
console.log(
'You are now authenticated as ' +
configStore.get('email') +
'!'
)
process.exit(0)
} else {
console.log('Validation failed!')
process.exit(1)
}
})
.catch(function (error) {
console.log(error.message)
console.log(
'Unable to validate credentials please try again or check your credentials'
)
})
}
export const loginOtp = (email) => {
console.log('OTP based Login initaited ...')
let axConfig = {
method: 'get',
url: APIURL + '/api/auth/otp/' + email,
}
axios(axConfig)
.then(function (response) {
if (response.data === 'Login OTP was send') {
console.log('OTP sent to ' + email + ' !!')
rl.question('Enter the OTP send to you :', function (otp) {
if (otp) {
axConfig = {
method: 'post',
url: APIURL + '/api/auth/otp/verify',
data: {
email: email,
otp: otp,
},
}
axios(axConfig)
.then(function (response) {
if (response.data.email === email) {
console.log(response.data)
console.log(
'Credentials validated and Stored at ' +
configStore.path +
'!'
)
configStore.set('email', email)
configStore.set(
'apiKey',
response.data.apiKey
)
console.log(
'You are now authenticated as ' +
configStore.get('email') +
'!'
)
} else {
console.log('Validation failed!')
process.exit(1)
}
rl.close()
})
.catch(function (error) {
console.log(error.message)
console.log(
'Unable to validate credentials please try again or check your credentials'
)
})
}
})
} else {
console.log('OTP failed!')
process.exit(1)
}
})
.catch(function (error) {
console.log(error.message)
console.log(
'Unable to send OTP please try again or check your credentials'
)
})
rl.on('close', function () {
process.exit(0)
})
}
export const register = (email) => {
console.log('Registration initaited ...')
let axConfig = {
method: 'get',
url: APIURL + '/api/auth/reg?email=' + email,
}
axios(axConfig)
.then(function (response) {
if (response.data.email === email) {
console.log('Registration successful !!')
} else {
console.log('Registration failed!')
process.exit(1)
}
})
.catch(function (error) {
console.log(error.message)
console.log(
'Unable to register please try again or check your credentials'
)
})
}
export const check = () => {
console.log('Checking credentials ...')
if (configStore.has('email') && configStore.has('apiKey')) {
console.log('Credentials found at ' + configStore.path + '!!')
} else {
console.error('Credentials not found !!')
process.exit(1)
}
let axConfig = {
method: 'get',
url:
APIURL +
'/api/auth/validate/' +
configStore.get('email') +
'/' +
configStore.get('apiKey'),
}
axios(axConfig)
.then(function (response) {
if (response.data === 'OK') {
console.log('Credentials validated !!')
console.log('You are logged in as ' + configStore.get('email'))
process.exit(0)
} else {
console.log('Credentials not validated!')
process.exit(1)
}
})
.catch(function (error) {
console.log(error.message)
console.log(
'Unable to check credentials please try again or check your credentials'
)
})
}
export const logout = () => {
console.log('Logging out ...')
configStore.delete('email')
configStore.delete('apiKey')
console.log('You are logged out')
process.exit(0)
}
export default {
login,
register,
check,
logout,
loginOtp,
configStore,
}