124 lines
3.6 KiB
JavaScript
124 lines
3.6 KiB
JavaScript
// require module
|
|
const jwt = require('jsonwebtoken');
|
|
// global variable
|
|
const jwt_key = "goodjwtkey";
|
|
|
|
module.exports = {
|
|
// shared variable
|
|
jwt_key,
|
|
|
|
// shared function
|
|
|
|
signJwtToken: function(data) {
|
|
try {
|
|
const result = jwt.sign({ data, exp: Math.floor(Date.now() / 1000) + (60 * 15) }, jwt_key);
|
|
return result;
|
|
}
|
|
catch (e) {
|
|
console.log(e);
|
|
}
|
|
},
|
|
|
|
authenToken: function(token) {
|
|
return new Promise((resolve, reject) => {
|
|
try {
|
|
const data = jwt.verify(token, jwt_key).data;
|
|
if (data.uid) {
|
|
resolve(true);
|
|
} else {
|
|
resolve(false);
|
|
}
|
|
} catch (error) {
|
|
console.error(error);
|
|
resolve(false);
|
|
}
|
|
});
|
|
},
|
|
|
|
loginAuthentication: function(account, password) {
|
|
return new Promise((resolve, reject) => { // 包裝成 Promise
|
|
const spawn = require("child_process").spawn;
|
|
const pythonScript = path.join(__dirname, 'catch.py'); // path/to/catch.py
|
|
const pythonProcess = spawn('python', [pythonScript, account, password]);
|
|
|
|
//console.log(`account: ${account}`);
|
|
//console.log(`password: ${password}`);
|
|
|
|
pythonProcess.stdout.on('data', (data) => {
|
|
data = data.toString().slice(0, -1); // remove the last char
|
|
if (data === 'login falied') {
|
|
resolve(false); // 登入失敗,解析 Promise 為 True
|
|
} else {
|
|
resolve(data.toString().trim()); // 登入成功
|
|
}
|
|
});
|
|
|
|
pythonProcess.stderr.on('data', (data) => {
|
|
console.error(`stderr: ${data.toString()}`);
|
|
});
|
|
|
|
pythonProcess.on('exit', (code) => {
|
|
//console.log(`child process exited with code ${code}`);
|
|
if (code !== 0) {
|
|
reject(new Error(`child process exited with code ${code}`)); // 非 0 退出代碼表示錯誤
|
|
}
|
|
});
|
|
|
|
pythonProcess.on('error', (err) => {
|
|
console.error(err);
|
|
reject(err); // 子進程啟動失敗
|
|
});
|
|
});
|
|
},
|
|
|
|
// get parent absolute path
|
|
getParentPath : function(dir) {
|
|
try {
|
|
n_dir = "";
|
|
dir = dir.split("");
|
|
// determine the type of slash, which will be different between windows and linux
|
|
if (dir.includes("/")) {
|
|
slash_type = "/";
|
|
}
|
|
else {
|
|
slash_type = "\\";
|
|
}
|
|
// pop the last one directory
|
|
while (dir.pop() != slash_type) {
|
|
// pass
|
|
}
|
|
// restructure the full path
|
|
for (let i = 0;i < dir.length;i++) {
|
|
n_dir += dir[i];
|
|
}
|
|
return n_dir;
|
|
}
|
|
catch(e) {
|
|
console.log(e);
|
|
}
|
|
},
|
|
|
|
// return connection of db
|
|
getDBConnection : async function() {
|
|
try {
|
|
const db_manager = require('../db');
|
|
const conn = await db_manager.getDBConnection();
|
|
return conn;
|
|
}
|
|
catch(e) {
|
|
console.error("error getting db connection : ", e);
|
|
return null;
|
|
}
|
|
},
|
|
|
|
// close connection of db
|
|
closeDBConnection : function(conn) {
|
|
try {
|
|
conn.release();
|
|
}
|
|
catch(e) {
|
|
console.error("error closing db connection : ", e);
|
|
}
|
|
}
|
|
}
|