浏览代码

Login, Register, Session storage.

AXCWG 3 月之前
父节点
当前提交
1f245b0f28
共有 5 个文件被更改,包括 176 次插入10 次删除
  1. 69 0
      UserInteractions.js
  2. 8 2
      main.js
  3. 80 0
      package-lock.json
  4. 1 0
      package.json
  5. 18 8
      test.js

+ 69 - 0
UserInteractions.js

@@ -0,0 +1,69 @@
+const bodyParser = require("body-parser");
+const express = require("express");
+let session = require('express-session')
+
+module.exports = function UserInteractions(opts) {
+    async function sha256(message) {
+        // encode as UTF-8
+        const msgBuffer = new TextEncoder().encode(message);
+
+        // hash the message
+        const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
+
+        // convert ArrayBuffer to Array
+        const hashArray = Array.from(new Uint8Array(hashBuffer));
+
+        // convert bytes to hex string
+        const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
+        return hashHex;
+    }
+
+    let app = opts.app;
+    app.use(session({
+        secret: "rtifhg5878fj",
+        resave: false,
+        saveUninitialized: false,
+        cookie: {
+            secure: "auto"
+        }
+    }))
+    app.use(bodyParser.json({"limit": "200mb"}));
+    app.use(express.json());
+    let db = opts.db;
+    console.log("init")
+    app.post("/userapi", (req, res) => {
+        res.end(JSON.stringify(req.session));
+    })
+    app.post("/login", async function (req, res) {
+        db.execute("SELECT uuid from user where username = ? and password = ?", [req.body.username, await sha256(req.body.password)], function (err, result) {
+            if (result.length === 0) {
+                res.status(500).json({code: 500, R: "DNE"})
+                return;
+            }
+            req.session.uuid = result[0].uuid;
+            res.header("").status(200).json({code: 200, R: "SS", uid: result[0].uuid});
+        })
+    })
+    app.post("/register", function (req, res) {
+        db.execute("SELECT uuid FROM user WHERE username = ?", [req.body.username], async function (err, rows) {
+            if (req.body.username === undefined || req.body.username === "" || req.body.username === null || req.body.password === undefined || req.body.password === "" || req.body.password === null) {
+                res.status(500).json({code: 500, R: "PE"})
+                return;
+            }
+            if (err) {
+                console.log(err);
+                res.status(500).json({code: 500, R: "UNE"});
+                return;
+            }
+            if (rows.length === 0) {
+                db.execute("INSERT INTO user (uuid, username, email, password, avatar, time) values (?,?,?,?,?,?)", [crypto.randomUUID(), req.body.username, null, await sha256(req.body.password), null, Date.now()]);
+                res.json({code: 200, R: "SS"});
+
+                return;
+            }
+            res.status(500).json({code: 500, R: "UE"});
+            return;
+        })
+    })
+}
+

+ 8 - 2
main.js

@@ -18,6 +18,8 @@ const Kind = {
     5: "其他",
     5: "其他",
 }
 }
 
 
+
+
 const db = mysql.createConnection({
 const db = mysql.createConnection({
     host: 'mc.andyxie.cn',
     host: 'mc.andyxie.cn',
     user: 'instrunet',
     user: 'instrunet',
@@ -27,6 +29,7 @@ const db = mysql.createConnection({
     enableKeepAlive: true,
     enableKeepAlive: true,
     keepAliveInitialDelay: 0,
     keepAliveInitialDelay: 0,
 })
 })
+
 const nodemailer = require('nodemailer')
 const nodemailer = require('nodemailer')
 let Queue = require('js-queue');
 let Queue = require('js-queue');
 
 
@@ -34,12 +37,13 @@ const webp = require('webp-converter')
 webp.grant_permission()
 webp.grant_permission()
 let queue = new Queue();
 let queue = new Queue();
 queue.autoRun = false;
 queue.autoRun = false;
-
+require('./UserInteractions')({
+    app: app, db: db
+})
 const bodyParser = require("body-parser");
 const bodyParser = require("body-parser");
 const nrc = require('node-run-cmd')
 const nrc = require('node-run-cmd')
 const https = require("node:https");
 const https = require("node:https");
 const {OpenCC} = require("opencc");
 const {OpenCC} = require("opencc");
-const {HttpsProxyAgent} = require("https-proxy-agent");
 const sortArray = require("sort-array");
 const sortArray = require("sort-array");
 const converters2t = new OpenCC('s2t.json')
 const converters2t = new OpenCC('s2t.json')
 const convertert2s = new OpenCC('t2s.json')
 const convertert2s = new OpenCC('t2s.json')
@@ -48,6 +52,7 @@ app.use(express.json());
 app.use(SendSeekable)
 app.use(SendSeekable)
 
 
 
 
+
 const transporter = nodemailer.createTransport({
 const transporter = nodemailer.createTransport({
     host: 'smtp.qq.com', port: 465, secure: true, auth: {
     host: 'smtp.qq.com', port: 465, secure: true, auth: {
         user: '3095864740@qq.com', pass: 'caemyuagapsadfff',
         user: '3095864740@qq.com', pass: 'caemyuagapsadfff',
@@ -580,6 +585,7 @@ app.get('/:uuid', function (req, res) {
 })
 })
 
 
 
 
+
 if (argv.https === "true") {
 if (argv.https === "true") {
     https.createServer({
     https.createServer({
         key: fs.readFileSync('andyxie.cn.key'), cert: fs.readFileSync('andyxie.cn.pem')
         key: fs.readFileSync('andyxie.cn.key'), cert: fs.readFileSync('andyxie.cn.pem')

+ 80 - 0
package-lock.json

@@ -12,6 +12,7 @@
         "body-parser": "^1.20.3",
         "body-parser": "^1.20.3",
         "cnchar": "^3.2.6",
         "cnchar": "^3.2.6",
         "express": "^4.21.1",
         "express": "^4.21.1",
+        "express-session": "^1.18.1",
         "html-entities": "^2.5.2",
         "html-entities": "^2.5.2",
         "https": "^1.0.0",
         "https": "^1.0.0",
         "https-proxy-agent": "^7.0.6",
         "https-proxy-agent": "^7.0.6",
@@ -826,6 +827,55 @@
         "node": ">= 0.10.0"
         "node": ">= 0.10.0"
       }
       }
     },
     },
+    "node_modules/express-session": {
+      "version": "1.18.1",
+      "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz",
+      "integrity": "sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==",
+      "license": "MIT",
+      "dependencies": {
+        "cookie": "0.7.2",
+        "cookie-signature": "1.0.7",
+        "debug": "2.6.9",
+        "depd": "~2.0.0",
+        "on-headers": "~1.0.2",
+        "parseurl": "~1.3.3",
+        "safe-buffer": "5.2.1",
+        "uid-safe": "~2.1.5"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/express-session/node_modules/cookie": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/express-session/node_modules/cookie-signature": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
+      "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
+      "license": "MIT"
+    },
+    "node_modules/express-session/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/express-session/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "license": "MIT"
+    },
     "node_modules/express/node_modules/debug": {
     "node_modules/express/node_modules/debug": {
       "version": "2.6.9",
       "version": "2.6.9",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -1863,6 +1913,15 @@
         "node": ">= 0.8"
         "node": ">= 0.8"
       }
       }
     },
     },
+    "node_modules/on-headers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/once": {
     "node_modules/once": {
       "version": "1.4.0",
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -2010,6 +2069,15 @@
         "url": "https://github.com/sponsors/ljharb"
         "url": "https://github.com/sponsors/ljharb"
       }
       }
     },
     },
+    "node_modules/random-bytes": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
+      "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/range-parser": {
     "node_modules/range-parser": {
       "version": "1.2.1",
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
       "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -2631,6 +2699,18 @@
         "node": ">=12.17"
         "node": ">=12.17"
       }
       }
     },
     },
+    "node_modules/uid-safe": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
+      "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+      "license": "MIT",
+      "dependencies": {
+        "random-bytes": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/unique-filename": {
     "node_modules/unique-filename": {
       "version": "1.1.1",
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
       "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",

+ 1 - 0
package.json

@@ -15,6 +15,7 @@
     "body-parser": "^1.20.3",
     "body-parser": "^1.20.3",
     "cnchar": "^3.2.6",
     "cnchar": "^3.2.6",
     "express": "^4.21.1",
     "express": "^4.21.1",
+    "express-session": "^1.18.1",
     "html-entities": "^2.5.2",
     "html-entities": "^2.5.2",
     "https": "^1.0.0",
     "https": "^1.0.0",
     "https-proxy-agent": "^7.0.6",
     "https-proxy-agent": "^7.0.6",

+ 18 - 8
test.js

@@ -1,8 +1,18 @@
-let queue = require('js-queue')
-const req = require("express/lib/request");
-let queue1 = new queue();
-queue1.autoRun = false;
-const cnchar = require('cnchar');
-const sortArray = require("sort-array");
-
-console.log( URL.canParse("data: "))
+
+
+async function sha256(message) {
+    // encode as UTF-8
+    const msgBuffer = new TextEncoder().encode(message);
+
+    // hash the message
+    const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
+
+    // convert ArrayBuffer to Array
+    const hashArray = Array.from(new Uint8Array(hashBuffer));
+
+    // convert bytes to hex string
+    return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
+}
+sha256("212121").then((hash) => {
+    console.log(hash);
+})