Skip to content
This repository has been archived by the owner on Dec 25, 2024. It is now read-only.

Commit

Permalink
Add login system
Browse files Browse the repository at this point in the history
  • Loading branch information
atmoner committed Aug 25, 2022
1 parent 6857dce commit 9b545c4
Show file tree
Hide file tree
Showing 14 changed files with 795 additions and 388 deletions.
4 changes: 2 additions & 2 deletions api/index.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
const express = require('express')


// Create express instance
const app = express()

// Require API routes
const auth = require('./routes/auth')
const processPm2 = require('./routes/process')
const wallets = require('./routes/wallets')

// Import API Routes
app.use(auth)
app.use(processPm2)
app.use(wallets)

Expand Down
22 changes: 22 additions & 0 deletions api/routes/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
const fs = require('fs')
const { Router } = require('express')
var bodyParser = require('body-parser')
const jwt = require('jsonwebtoken')
const authConfig = require('../../auth.config.js')

const router = Router()

router.use(bodyParser.urlencoded({ extended: false }));
router.use(bodyParser.json())

router.post('/auth/login', function (req, res, next) {
if (req.body.name === authConfig.default[0].user && req.body.password === authConfig.default[0].pass) {
const token = jwt.sign({ sub: authConfig.default[0].user }, authConfig.default[0].jwtKey, { expiresIn: '7d' });
res.json(token)
} else
res.json('false')
})

module.exports = router


182 changes: 110 additions & 72 deletions api/routes/process.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,106 +2,144 @@ const { Router } = require('express')
const pm2 = require('pm2')
var bodyParser = require('body-parser')
const fs = require('fs')
const os = require('os');
const os = require('os')
const jwt = require('jsonwebtoken')
const authConfig = require('../../auth.config.js')

const router = Router()
router.use(bodyParser.urlencoded({ extended: false }))
router.use(bodyParser.json())

function checkToken(token, res) {
try {
const decoded = jwt.verify(token, authConfig.default[0].jwtKey);
return true
} catch (err) {
return false
}
}

/* GET PM2 process listing. */
router.get('/process', function (req, res, next) {
pm2.list((err, list) => {
const structDatas = []
list.forEach(function(item){
structDatas.push({ item })
});
res.json(structDatas)
})
router.post('/process', function (req, res, next) {
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
pm2.list((err, list) => {
const structDatas = []
list.forEach(function(item){
structDatas.push({ item })
});
res.json(structDatas)
})
} else
res.status(401).json("Invalid Token")
})
/* POST PM2 process to start. */
router.post('/process/start', function (req, res, next) {
pm2.start({
name: req.body.name
}, (err, proc) => {
// Disconnects from PM2
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
pm2.start({
name: req.body.name
}, (err, proc) => {
// Disconnects from PM2

}, function(err, apps) {
if (err) { throw err }
})
res.json('true')
}, function(err, apps) {
if (err) { throw err }
})
res.json('true')
} else
res.status(401).json("Invalid Token")
})
/* POST PM2 process to stop. */
router.post('/process/stop', function (req, res, next) {
pm2.stop( req.body.id , (err, proc) => {
// Disconnects from PM2
res.json('true')
}, function(err, apps) {
if (err) { throw err }
})
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
pm2.stop( req.body.id , (err, proc) => {
// Disconnects from PM2
res.json('true')
}, function(err, apps) {
if (err) { throw err }
})
} else
res.status(401).json("Invalid Token")
})
/* POST PM2 process to delete. */
router.post('/process/delete', function (req, res, next) {
pm2.delete( req.body.id , (err, proc) => {
// Disconnects from PM2
const homePath = os.homedir()
fs.unlinkSync(homePath + '/.pm2/logs/' + req.body.name + '-out.log')
fs.unlinkSync(homePath + '/.pm2/logs/' + req.body.name + '-error.log')
res.json('true')
}, function(err, apps) {
if (err) { throw err }
})
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
pm2.delete( req.body.id , (err, proc) => {
// Disconnects from PM2
const homePath = os.homedir()
fs.unlinkSync(homePath + '/.pm2/logs/' + req.body.name + '-out.log')
fs.unlinkSync(homePath + '/.pm2/logs/' + req.body.name + '-error.log')
res.json('true')
}, function(err, apps) {
if (err) { throw err }
})
} else
res.status(401).json("Invalid Token")
})
/* POST PM2 process to add. */
router.post('/process/add', function (req, res, next) {
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
var finalVariable = {
"COSMOS_NAME": req.body.name,
"COSMOS_SCRIPT": req.body.script,
"COSMOS_TIMER": req.body.timer,
"COSMOS_TIMER_UI": req.body.timer_ui,
"COSMOS_CHAIN": req.body.chain,
"COSMOS_LOGO": req.body.logo,
}

var finalVariable = {
"COSMOS_NAME": req.body.name,
"COSMOS_SCRIPT": req.body.script,
"COSMOS_TIMER": req.body.timer,
"COSMOS_TIMER_UI": req.body.timer_ui,
"COSMOS_CHAIN": req.body.chain,
"COSMOS_LOGO": req.body.logo,
}

req.body.varPersonalised.forEach(function(item){
finalVariable[item.key] = item.value
})

if (req.body.authData !== false) {
finalVariable["COSMOS_WALLET"] = req.body.authData.wallet
finalVariable["COSMOS_PASS"] = req.body.authData.pass
}
req.body.varPersonalised.forEach(function(item){
finalVariable[item.key] = item.value
})

pm2.start({
script : req.body.script,
name : req.body.name,
env : finalVariable
}, function(err, apps) {
if (err) {
return pm2.disconnect()
if (req.body.authData !== false) {
finalVariable["COSMOS_WALLET"] = req.body.authData.wallet
finalVariable["COSMOS_PASS"] = req.body.authData.pass
}
})
res.json('true')

pm2.start({
script : req.body.script,
name : req.body.name,
env : finalVariable
}, function(err, apps) {
if (err) {
return pm2.disconnect()
}
})
res.json('true')
} else
res.status(401).json("Invalid Token")
})
/* POST PM2 process log. */
router.post('/process/log', function (req, res, next) {
try {
const homePath = os.homedir()
const data = fs.readFileSync(homePath + '/.pm2/logs/' + req.body.name + '-out.log', 'utf8');
res.json(data)
} catch (err) {
res.json(err)
}
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
try {
const homePath = os.homedir()
const data = fs.readFileSync(homePath + '/.pm2/logs/' + req.body.name + '-out.log', 'utf8');
res.json(data)
} catch (err) {
res.json(err)
}
} else
res.status(401).json("Invalid Token")
})
/* POST PM2 empty log. */
router.post('/process/log/empty', function (req, res, next) {
try {
const homePath = os.homedir()
fs.truncateSync(homePath + '/.pm2/logs/' + req.body.name + '-out.log');
res.json('')
} catch (err) {
res.json(err)
}
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
try {
const homePath = os.homedir()
fs.truncateSync(homePath + '/.pm2/logs/' + req.body.name + '-out.log');
res.json('')
} catch (err) {
res.json(err)
}
} else
res.status(401).json("Invalid Token")
})

module.exports = router
54 changes: 38 additions & 16 deletions api/routes/wallets.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,59 @@ const pm2 = require('pm2')
const fs = require('fs')
const { Router } = require('express')
var bodyParser = require('body-parser')
const jwt = require('jsonwebtoken')
const authConfig = require('../../auth.config.js')

const router = Router()

router.use(bodyParser.urlencoded({ extended: false }));
router.use(bodyParser.json())

function checkToken(token, res) {
try {
const decoded = jwt.verify(token, authConfig.default[0].jwtKey);
return true
} catch (err) {
return false
}
}

/* POST wallet add */
router.post('/wallets/add', function (req, res, next) {
var pathTo = __dirname.replace('/api/routes', '')
fs.writeFileSync(pathTo + '/wallets/' + req.body.name + '.json', req.body.data)
res.json('Wallet added')
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
var pathTo = __dirname.replace('/api/routes', '')
fs.writeFileSync(pathTo + '/wallets/' + req.body.name + '.json', req.body.data)
res.json('Wallet added')
} else
res.status(401).json("Invalid Token")
})

/* POST wallet list */
router.get('/wallets/list', function (req, res, next) {
var pathTo = __dirname.replace('/api/routes', '')
fs.readdir(pathTo + '/wallets/', (err, files) => {
var wallets = []
files.forEach(file => {
if (file !== 'index.js')
wallets.push({ name: file.replace('.json', ''), path: pathTo + '/wallets/' + file })
router.post('/wallets/list', function (req, res, next) {
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
var pathTo = __dirname.replace('/api/routes', '')
fs.readdir(pathTo + '/wallets/', (err, files) => {
var wallets = []
files.forEach(file => {
if (file !== 'index.js')
wallets.push({ name: file.replace('.json', ''), path: pathTo + '/wallets/' + file })
})
res.json(wallets)
})
res.json(wallets)
})
} else
res.status(401).json("Invalid Token")
})

/* POST wallet delete */
router.post('/wallets/delete', function (req, res, next) {
var pathTo = __dirname.replace('/api/routes', '')
fs.unlinkSync(pathTo + '/wallets/' + req.body.name + '.json')
res.json('Wallet removed')
var checkTokenReturn = checkToken(req.body.token, res)
if (checkTokenReturn) {
var pathTo = __dirname.replace('/api/routes', '')
fs.unlinkSync(pathTo + '/wallets/' + req.body.name + '.json')
res.json('Wallet removed')
} else
res.status(401).json("Invalid Token")
})

module.exports = router
Expand Down
Empty file added auth.config.js
Empty file.
27 changes: 20 additions & 7 deletions components/AddProcess.vue
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,7 @@
</template>

<script>
import { mapState } from 'vuex'
import cosmosConfig from '~/cosmos.config'
import modulesConfig from '~/scripts/config.modules'
Expand All @@ -288,19 +289,29 @@ export default {
finalWallet: '',
allVariables: [],
}),
computed: {
...mapState('data', ['userToken']),
},
async mounted () {
var allAssets = this.allAssets
cosmosConfig.forEach( function( item ) {
allAssets.push( { text: item.coinLookup.viewDenom, img: item.coinLookup.icon } )
})
this.allAssets = allAssets
const response = await this.$axios.get( '/api/wallets/list' )
var allWallet = this.allWallet
response.data.forEach( function( item ) {
allWallet.push( item.name )
})
this.allWallet = allWallet
try {
const response = await this.$axios.post( '/api/wallets/list', {
token: this.userToken
})
var allWallet = this.allWallet
response.data.forEach( function( item ) {
allWallet.push( item.name )
})
this.allWallet = allWallet
} catch (err) {
console.log(err)
}
},
methods: {
async addProcess( name ) {
Expand Down Expand Up @@ -348,10 +359,12 @@ export default {
chain: this.selectChain.text,
logo: this.selectChain.img,
varPersonalised: formatVariable,
authData: authData
authData: authData,
token: this.userToken
})
this.$store.dispatch( 'data/getAllProcess' )
this.allVariables = []
this.dialogConfig = false
},
setSelected( value ) {
const foundLogo = cosmosConfig.find( element => element.coinLookup.viewDenom === value )
Expand Down
8 changes: 8 additions & 0 deletions createAccount.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import fs from 'fs'
import crypto from 'crypto'

console.log('Create account!')

const stream = fs.createWriteStream('./auth.config.js');
let r = crypto.randomBytes(20).toString('hex');
stream.write("export default [{ user: 'cosmos', pass: 'cosmos', jwtKey: '" + r + "' } ]");
Loading

0 comments on commit 9b545c4

Please sign in to comment.