UserInteractions.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. const bodyParser = require("body-parser");
  2. const express = require("express");
  3. let session = require('express-session')
  4. let singleton = require('./Singletons')
  5. const {cwh} = require("./Singletons");
  6. module.exports = function UserInteractions(opts) {
  7. async function sha256(message) {
  8. // encode as UTF-8
  9. const msgBuffer = new TextEncoder().encode(message);
  10. // hash the message
  11. const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
  12. // convert ArrayBuffer to Array
  13. const hashArray = Array.from(new Uint8Array(hashBuffer));
  14. // convert bytes to hex string
  15. const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
  16. return hashHex;
  17. }
  18. let app = opts.app;
  19. app.use(session({
  20. secret: "rtifhg5878fj",
  21. resave: false,
  22. saveUninitialized: false,
  23. cookie: {
  24. sameSite: "lax", secure: "auto"
  25. }
  26. }))
  27. app.use(bodyParser.json({"limit": "200mb"}));
  28. app.use(express.json());
  29. let db = opts.db;
  30. app.options("/login", (req, res) => {
  31. res.set(singleton.cwh).end("FUCK YOU CORS")
  32. })
  33. app.get("/userapi", (req, res) => {
  34. if (!req.session.uuid) {
  35. res.set(singleton.cwh).status(500).json({code: 500, R: "IO"})
  36. return
  37. }
  38. db.execute("SELECT username, email from user where uuid = ?", [req.session.uuid], (err, result) => {
  39. res.set(singleton.cwh).end(JSON.stringify({
  40. uuid: req.session.uuid,
  41. username: result[0].username,
  42. email: result[0].email,
  43. }));
  44. })
  45. })
  46. app.post("/login", async function (req, res) {
  47. if (!req.body.username || !req.body.password) {
  48. res.set(singleton.cwh).status(500).json({code: 500, R: "IO"})
  49. } else {
  50. db.execute("SELECT uuid from user where username = ? and password = ?", [req.body.username, await sha256(req.body.password)], function (err, result) {
  51. if (result.length === 0) {
  52. res.set(cwh).status(500).json({code: 500, R: "DNE"})
  53. return;
  54. }
  55. req.session.uuid = result[0].uuid;
  56. res.set(singleton.cwh).status(200).json({
  57. code: 200,
  58. R: "SS",
  59. uid: result[0].uuid
  60. });
  61. })
  62. }
  63. })
  64. app.post("/register", function (req, res) {
  65. db.execute("SELECT uuid FROM user WHERE username = ?", [req.body.username], async function (err, rows) {
  66. if (req.body.username === undefined || req.body.username === "" || req.body.username === null || req.body.password === undefined || req.body.password === "" || req.body.password === null) {
  67. res.set(cwh).status(500).json({code: 500, R: "PE"})
  68. return;
  69. }
  70. if (err) {
  71. console.log(err);
  72. res.set(cwh).status(500).json({code: 500, R: "UNE"});
  73. return;
  74. }
  75. if (rows.length === 0) {
  76. 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()]);
  77. res.status(200).set(singleton.cwh).json({code: 200, R: "SS"});
  78. return;
  79. }
  80. res.set(cwh).status(500).json({code: 500, R: "UE"});
  81. return;
  82. })
  83. })
  84. }