102 lines
3.1 KiB
JavaScript

const utils = require('../utils.js');
const path = require('path');
const auth = require('../utils/auth_utils');
const db = require('../utils/db');
db.createTable('users', [
{name :'id', type: 'INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL'},
{name :'name', type: 'VARCHAR(32) NOT NULL UNIQUE'},
{name :'password', type: `VARCHAR(255) NOT NULL DEFAULT '123456'`},
{name :'update_time', type: 'DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP'}
]);
function getUser(username) {
let ret = db.selectData('users', null, `name='${username}'`);
let info = db.info;
return [ret, info];
}
function addUser(username, password) {
let ret = db.insertData('users', {name: username, password: password});
if (ret == false) {
return [false, db.err.code];
}
let info = db.info;
return [ret, info];
}
function getAllUsers() {
let ret = db.selectData('users');
let info = db.info;
return [ret, info];
}
function checkAdmin(adminname, password) {
if (adminname === (utils.env.ADMIN_LOGIN_NAME || 'admin') &&
password === (utils.env.ADMIN_LOGIN_PASSWORD || 'admin') ) {
const token = auth.generateToken({
username: adminname,
id: -1
});
return {...utils.json.success, data: {token: token, href: '/users/admin'}};
} else {
return {...utils.json.user_is_invalid};
}
}
function checkUsers(username, password) {
let [ret, info] = getUser(username);
if (!ret) {
return {...utils.json.user_is_invalid, data: info};
} else if (!info || (Array.isArray(info) && info.length === 1)) {
info = info[0];
if (info.password !== password) {
return {...utils.json.user_is_invalid, data: 'password error'};
} else {
const token = auth.generateToken({
username: username,
id: info.id
})
return {...utils.json.success, data: {token: token, href: '/users'}};
}
} else {
return {...utils.json.user_is_invalid, data: 'user name error'};
}
}
function registerUsers(username, password) {
let [ret, info] = addUser(username, password);
if (!ret) {
if (info === 'SQLITE_CONSTRAINT_UNIQUE') {
info = 'user name is exist';
} else {
info = 'unknown error';
}
return {...utils.json.user_register_is_invalid, data: info};
} else {
return {...utils.json.success};
}
}
function getAllUsersToJson(token) {
if (typeof token === 'string') {
return auth.verifyToken(token, (err) => {
if (err) {
return {...utils.json.token_is_invalid, data: info};
}
let [ret, info] = getAllUsers();
if (ret) {
return {...utils.json.success, data: info};
} else {
return {...utils.json.error};
}
});
} else {
return {...utils.json.token_is_invalid, data: null};
}
}
const VIEWS_USERS_PATH = path.resolve(utils.VIEWS_PATH, 'users')
module.exports = { checkAdmin, checkUsers, registerUsers, getAllUsersToJson, VIEWS_USERS_PATH };