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 };