feat(server): first version

This commit is contained in:
2021-10-30 00:30:23 +08:00
commit 7e8985972c
11 changed files with 4224 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
const inquirer = require("inquirer");
const sqlite3 = require("@journeyapps/sqlcipher");
const sqlite = require("sqlite");
let pushSQL =
"INSERT INTO msg (\
msg_id,\
create_time,\
msg_type,\
composed_type,\
content,\
from_name,\
from_nickname,\
to_name,\
to_nickname,\
is_group_message,\
speaking_group_member_name,\
filename,\
display_filename\
) VALUES (\
$messageID,\
$createTimestamp,\
$messageType,\
$type,\
$content,\
$fromName,\
$fromNickName,\
$toName,\
$toNickName,\
$isGroupMessage,\
$speakingGroupMemberName,\
$filename,\
$displayFilename\
)";
let db, pushStatement;
async function initDB(dbFile) {
db = await sqlite.open({
filename: dbFile,
driver: sqlite3.Database,
});
while (true) {
try {
const { password } = await inquirer.prompt([
{ type: "password", name: "password", message: "密码:", prefix: "" },
]);
password && (await db.exec(`PRAGMA KEY=${password}`));
await db.exec(
`CREATE TABLE IF NOT EXISTS msg (
msg_id TEXT NOT NULL,
create_time INTEGER NOT NULL,
msg_type INTEGER NOT NULL,
composed_type TEXT NOT NULL,
content TEXT,
from_name TEXT,
from_nickname TEXT,
to_name TEXT,
to_nickname TEXT,
is_group_message INTEGER,
speaking_group_member_name TEXT,
filename TEXT,
display_filename TEXT)`
);
break;
} catch (e) {
if (e.name === "SQLITE_NOTADB") {
console.warn("密码错误");
} else {
throw e;
}
}
}
pushStatement = await db.prepare(pushSQL);
}
/** 将消息存储到数据库 */
async function pushMessage(message) {
const m = {};
for (const key of Object.keys(message)) {
m["$" + key] = message[key];
}
await pushStatement.run(m);
}
module.exports = {
initDB,
pushMessage,
};