218 lines
5.6 KiB
JavaScript
218 lines
5.6 KiB
JavaScript
const express = require('express')
|
|
const cors = require('cors')
|
|
const uuid = require('uuid')
|
|
const fs = require('fs')
|
|
const requestIp = require('request-ip')
|
|
|
|
const DataEditor = require('./data-editor')
|
|
|
|
const app = express()
|
|
app.use(cors())
|
|
app.use(express.json())
|
|
app.use(express.urlencoded({extended: true}))
|
|
|
|
let dataEditor = new DataEditor('./data.json')
|
|
|
|
const logIP = (ip, user) => {
|
|
let date = new Date(Date.now())
|
|
let text = ip + ' ' + user + ' ' + date.toString() + '\n'
|
|
fs.appendFile('ip-log.txt', text, err => {
|
|
console.log(err ? err : 'IP Logged successfully')
|
|
})
|
|
}
|
|
|
|
app.post('/user/create', (req, res) => {
|
|
logIP(requestIp.getClientIp(req), req.body.username)
|
|
if(!dataEditor.validateNewUser('', req.body.username, req.body.email, req.body.phoneNumber)) {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'A user with this username, email, or phone number already exists'
|
|
})
|
|
return
|
|
}
|
|
let token = false
|
|
while(!token) {
|
|
token = dataEditor.createUser(
|
|
uuid.v4(),
|
|
req.body.username,
|
|
`${req.body.firstName} ${req.body.lastName}`,
|
|
req.body.password,
|
|
req.body.email,
|
|
req.body.phoneNumber
|
|
)
|
|
}
|
|
res.json(token)
|
|
})
|
|
|
|
app.post('/user/verify', (req, res) => {
|
|
logIP(requestIp.getClientIp(req), req.body.username)
|
|
let token = dataEditor.validateLogin(req.body.username, req.body.password)
|
|
if(!token) {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Invalid username or password'
|
|
})
|
|
return
|
|
}
|
|
res.json(token)
|
|
})
|
|
|
|
app.post('/token/refresh', (req, res) => {
|
|
logIP(requestIp.getClientIp(req), req.body.username)
|
|
let token = dataEditor.refreshToken(req.body.tokenId)
|
|
if(!token || token.username != req.body.username) {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Provided token cannot be refreshed'
|
|
})
|
|
return
|
|
}
|
|
res.json(token)
|
|
})
|
|
|
|
app.post('/token/verify', (req, res) => {
|
|
logIP(requestIp.getClientIp(req), req.body.username)
|
|
let user = dataEditor.checkAuthToken(req.body.tokenId)
|
|
if(!user || user.username != req.body.username) {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Provided token is not valid'
|
|
})
|
|
return
|
|
}
|
|
res.json(user)
|
|
})
|
|
|
|
app.post('/account/create', (req, res) => {
|
|
logIP(requestIp.getClientIp(req), req.body.username)
|
|
let account = dataEditor.createAccount(
|
|
req.body.username,
|
|
req.body.tokenId,
|
|
req.body.type,
|
|
req.body.amount
|
|
)
|
|
if(!account) {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Provided token is not valid'
|
|
})
|
|
return
|
|
}
|
|
res.json(account)
|
|
})
|
|
|
|
app.post('/account/selectall', (req, res) => {
|
|
logIP(requestIp.getClientIp(req), req.body.username)
|
|
let accountList = dataEditor.getAllAccountsForUser(req.body.username, req.body.tokenId)
|
|
if(!accountList) {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Provided token is not valid'
|
|
})
|
|
return
|
|
}
|
|
res.json({
|
|
data: accountList
|
|
})
|
|
})
|
|
|
|
app.post('/account/selectone', (req, res) => {
|
|
logIP(requestIp.getClientIp(req), req.body.username)
|
|
let account = dataEditor.getAccount(
|
|
req.body.username,
|
|
req.body.tokenId,
|
|
req.body.accountNumber
|
|
)
|
|
if(!account) {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Provided token is not valid'
|
|
})
|
|
return
|
|
}
|
|
if(!account.accountNumber) {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Account does not exist'
|
|
})
|
|
return
|
|
}
|
|
res.json(account)
|
|
})
|
|
|
|
app.post('/account/delete', (req, res) => {
|
|
logIP(requestIp.getClientIp(req), req.body.username)
|
|
let accountId = dataEditor.closeAccount(
|
|
req.body.username,
|
|
req.body.tokenId,
|
|
req.body.accountNumber
|
|
)
|
|
if(!accountId) {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Provided token is not valid'
|
|
})
|
|
return
|
|
}
|
|
res.json({
|
|
accountDeleted: accountId
|
|
})
|
|
})
|
|
|
|
app.post('/exchange', (req, res) => {
|
|
logIP(requestIp.getClientIp(req), req.body.username)
|
|
let transactionRes
|
|
switch(req.body.transactionType) {
|
|
case 'withdraw':
|
|
transactionRes = dataEditor.withdraw(
|
|
req.body.username,
|
|
req.body.tokenId,
|
|
req.body.from,
|
|
req.body.amount
|
|
)
|
|
break
|
|
case 'deposit':
|
|
transactionRes = dataEditor.deposit(
|
|
req.body.username,
|
|
req.body.tokenId,
|
|
req.body.to,
|
|
req.body.amount
|
|
)
|
|
break
|
|
case 'transfer':
|
|
transactionRes = dataEditor.transfer(
|
|
req.body.username,
|
|
req.body.tokenId,
|
|
req.body.from,
|
|
req.body.to,
|
|
req.body.amount
|
|
)
|
|
break
|
|
default:
|
|
res.json({
|
|
status: '400',
|
|
msg: 'invalid transaction type'
|
|
})
|
|
return
|
|
}
|
|
if(transactionRes == 'bad token') {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Provided token is not valid'
|
|
})
|
|
return
|
|
}
|
|
if(transactionRes == 'no account') {
|
|
res.json({
|
|
status: '400',
|
|
msg: 'Invalid account number'
|
|
})
|
|
return
|
|
}
|
|
res.json({
|
|
status: '200',
|
|
msg: 'Transaction completed successfully'
|
|
})
|
|
})
|
|
|
|
app.listen(3001) |