mirror of
				https://gitlab.com/MrFry/mrfrys-node-server
				synced 2025-04-01 20:24:18 +02:00 
			
		
		
		
	Added uploaddata API for dataEditor module
This commit is contained in:
		| @@ -22,6 +22,9 @@ Jelenleg a max ilyen 3-4 körül van. Minél nagyobb a szám annál bővebb a lo | |||||||
|  |  | ||||||
| ## Hogy az API és a többi modul tudjon kommunikálni: | ## Hogy az API és a többi modul tudjon kommunikálni: | ||||||
|  |  | ||||||
|  | __Ezt a rész csak nagyon kevés esetben kell megcsinálni, ajánlott kihagyni! Ennélkül is működik | ||||||
|  | lokálisan az API és a usercript!__ | ||||||
|  |  | ||||||
| 1. Ezt a pár sort add hozzá a `/etc/hosts` fájlhoz: | 1. Ezt a pár sort add hozzá a `/etc/hosts` fájlhoz: | ||||||
|     |     | ||||||
|    ``` |    ``` | ||||||
| @@ -71,3 +74,7 @@ Cliens ID összes statisztika napokba rendezve | |||||||
| ### recdata | ### recdata | ||||||
|  |  | ||||||
| Az az adat, amit a szerver az `/isadding` végpontra kap | Az az adat, amit a szerver az `/isadding` végpontra kap | ||||||
|  |  | ||||||
|  | ### dataEdits | ||||||
|  |  | ||||||
|  | Néhány fontos log amit az api generál mikor a felhasználók a dataEditor modult használják | ||||||
|   | |||||||
| @@ -36,6 +36,8 @@ const dataFile = 'public/data.json' | |||||||
| const msgFile = 'stats/msgs' | const msgFile = 'stats/msgs' | ||||||
| const motdFile = 'public/motd' | const motdFile = 'public/motd' | ||||||
| const versionFile = 'public/version' | const versionFile = 'public/version' | ||||||
|  | const passwordFile = 'data/dataEditorPasswords.json' | ||||||
|  | const dataEditsLog = 'stats/dataEdits' | ||||||
|  |  | ||||||
| app.set('view engine', 'ejs') | app.set('view engine', 'ejs') | ||||||
| app.set('views', [ | app.set('views', [ | ||||||
| @@ -45,16 +47,15 @@ app.set('views', [ | |||||||
| app.use(express.static('public')) | app.use(express.static('public')) | ||||||
| app.use(busboy({ | app.use(busboy({ | ||||||
|   limits: { |   limits: { | ||||||
|     fileSize: 10000 * 1024 * 1024 |     fileSize: 50000 * 1024 * 1024 | ||||||
|   } |   } | ||||||
| })) | })) | ||||||
| app.use(bodyParser.json()) |  | ||||||
| app.use(bodyParser.urlencoded({ | app.use(bodyParser.urlencoded({ | ||||||
|   limit: '5mb', |   limit: '10mb', | ||||||
|   extended: true |   extended: true | ||||||
| })) | })) | ||||||
| app.use(bodyParser.json({ | app.use(bodyParser.json({ | ||||||
|   limit: '5mb' |   limit: '10mb' | ||||||
| })) | })) | ||||||
|  |  | ||||||
| var data = actions.LoadJSON(dataFile) | var data = actions.LoadJSON(dataFile) | ||||||
| @@ -159,6 +160,67 @@ app.get('/allqr.txt', function (req, res) { | |||||||
| // ------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------- | ||||||
| // API | // API | ||||||
|  |  | ||||||
|  | app.post('/uploaddata', (req, res) => { | ||||||
|  |   // body: JSON.stringify({ | ||||||
|  |   //   newData: data, | ||||||
|  |   //   count: getCount(data), | ||||||
|  |   //   initialCount: initialCount, | ||||||
|  |   //   password: password, | ||||||
|  |   //   editedQuestions: editedQuestions | ||||||
|  |   // }) | ||||||
|  |  | ||||||
|  |   const { count, initialCount, editedQuestions, password, newData } = req.body | ||||||
|  |   const respStatuses = { | ||||||
|  |     invalidPass: 'invalidPass', | ||||||
|  |     ok: 'ok', | ||||||
|  |     error: 'error' | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   logger.LogReq(req) | ||||||
|  |  | ||||||
|  |   try { | ||||||
|  |     // finding user | ||||||
|  |     const pwds = JSON.parse(utils.ReadFile(passwordFile)) | ||||||
|  |     let user = Object.keys(pwds).find((key) => { | ||||||
|  |       const u = pwds[key] | ||||||
|  |       return u.password === password | ||||||
|  |     }) | ||||||
|  |     user = pwds[user] | ||||||
|  |  | ||||||
|  |     // logging and stuff | ||||||
|  |     logger.Log(`Data upload`, logger.GetColor('bluebg'), true) | ||||||
|  |     logger.Log(`PWD: ${password}`, logger.GetColor('bluebg'), true) | ||||||
|  |     // returning if user password is not ok | ||||||
|  |     if (!user) { | ||||||
|  |       logger.Log(`Data upload: invalid password ${password}`, logger.GetColor('red'), true) | ||||||
|  |       utils.AppendToFile(logger.GetDateString() + '\n' + password + '(FAILED PASSWORD)\n' + JSON.stringify(editedQuestions) + '\n\n', dataEditsLog) | ||||||
|  |       res.json({ status: respStatuses.invalidPass }) | ||||||
|  |       return | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     logger.Log(`Password accepted for ${user.name}`, logger.GetColor('bluebg'), true) | ||||||
|  |     logger.Log(`Old Subjects/Questions: ${initialCount.subjectCount} / ${initialCount.questionCount} | New: ${count.subjectCount} / ${count.questionCount} | Edited question count: ${Object.keys(editedQuestions).length}`, logger.GetColor('bluebg'), true) | ||||||
|  |     // saving detailed editedCount | ||||||
|  |     utils.AppendToFile(logger.GetDateString() + '\n' + JSON.stringify(user) + '\n' + JSON.stringify(editedQuestions) + '\n\n', dataEditsLog) | ||||||
|  |  | ||||||
|  |     // making backup | ||||||
|  |     utils.CopyFile('./' + dataFile, `./public/backs/data_before_${user.name}_${new Date().toString().replace(/ /g, '_')}`) | ||||||
|  |     // writing data | ||||||
|  |     utils.WriteFile(JSON.stringify(data), dataFile) | ||||||
|  |     // reloading data file | ||||||
|  |     data = newData | ||||||
|  |  | ||||||
|  |     res.json({ | ||||||
|  |       status: respStatuses.ok, | ||||||
|  |       user: user.name | ||||||
|  |     }) | ||||||
|  |   } catch (e) { | ||||||
|  |     logger.Log(`Data upload error! `, logger.GetColor('redbg'), true) | ||||||
|  |     console.error(e) | ||||||
|  |     res.json({ status: respStatuses.error, msg: e.message }) | ||||||
|  |   } | ||||||
|  | }) | ||||||
|  |  | ||||||
| app.post('/isAdding', function (req, res) { | app.post('/isAdding', function (req, res) { | ||||||
|   logger.LogReq(req) |   logger.LogReq(req) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,7 +8,8 @@ module.exports = { | |||||||
|   FileExists: FileExists, |   FileExists: FileExists, | ||||||
|   CreatePath: CreatePath, |   CreatePath: CreatePath, | ||||||
|   WatchFile: WatchFile, |   WatchFile: WatchFile, | ||||||
|   ReadDir: ReadDir |   ReadDir: ReadDir, | ||||||
|  |   CopyFile: CopyFile | ||||||
| } | } | ||||||
|  |  | ||||||
| var fs = require('fs') | var fs = require('fs') | ||||||
| @@ -17,6 +18,11 @@ var logger = require('../utils/logger.js') | |||||||
|  |  | ||||||
| const dataFile = './public/data.json' | const dataFile = './public/data.json' | ||||||
|  |  | ||||||
|  | function CopyFile (from, to) { | ||||||
|  |   CreatePath(to) | ||||||
|  |   fs.copyFileSync(from, to) | ||||||
|  | } | ||||||
|  |  | ||||||
| function ReadDir (path) { | function ReadDir (path) { | ||||||
|   return fs.readdirSync(path) |   return fs.readdirSync(path) | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user