mirror of
https://gitlab.com/MrFry/mrfrys-node-server
synced 2025-04-01 20:24:18 +02:00
Merge
This commit is contained in:
commit
bd0c70177d
6 changed files with 68 additions and 20 deletions
|
@ -60,9 +60,12 @@ motd.js | `data.json` és ./public/motd -be írja a paraméterként kapott szöv
|
|||
ids.js | egyedi felhasználó azonosítókat írja statisztika fájlba
|
||||
dataUpdater.js | régifajta adatbázist, amiben még van `.Q` propertyjű kérdés alakít át
|
||||
changedataversion.js | `data.json`-ban és a ./public/version ban írja át a teszt megoldó kliens aktuális verzióját
|
||||
merger.js | Paraméterként kapott adatbázisból törli az egyező bejegyzéseket, és egyesíti egy fájlba
|
||||
merge.sh | Biztonsági mentést készít, és egyszerűsíti az adatbázist, majd felülírja az újjal
|
||||
classes.js | Összehasonlításhoz és tároláshoz szükséges osztályok
|
||||
dbSetup.js | Üres / előre userrel feltöltött adatbázist hoz létre
|
||||
dbtools.js | Javascript wrapper gyakran használt SQL utasításokhoz
|
||||
rmDuplicates.js | Paraméterként átadott JSON kérdés adatbázisból távolítja el az ugyanolyan kérdéseket
|
||||
runSqliteCmds.sh | Paraméterként átadott adatbázison futtatja a második paraméterben található Sqlite parancsokat
|
||||
|
||||
# Egyéb
|
||||
Jelenleg sok optimalizálatlan rész található benne, cél ezek kijavítása, szépítése
|
||||
|
|
|
@ -16,9 +16,33 @@ A `make.sh` script futtatása minden eddigi szerver által használt/generált a
|
|||
|
||||
Szükséges könyvtár struktúrát és egyéb fájlokat automatikusan létrehozza a `make.sh` script
|
||||
|
||||
`npm start ${debugLevel]` ahol a `debugLevel` egy szám, hogy milyen részletesen történjen a logolás.
|
||||
Majd:
|
||||
|
||||
Jelenleg a max ilyen 3-4 körül van. Minél nagyobb a szám annál bővebb a log
|
||||
`npm run dev`
|
||||
vagy
|
||||
`npm start`
|
||||
|
||||
## Környezeti változók
|
||||
* `NS_SQL_DEBUG_LOG`
|
||||
|
||||
Ha `true`, akkor minden SQL utasítás ki lesz írva a konzolra
|
||||
|
||||
* `NS_LOGLEVEL`
|
||||
|
||||
Egy szám lehet, ami minél nagyobb annál részletesebben történik a logolás konzolra. Jelenleg ez
|
||||
ilyen 1-4 közötti skálán mozog.
|
||||
|
||||
## Adatbázis előkészítése
|
||||
|
||||
A szerver egy felhasználókat, session-öket és ehhez tartozó segéd táblákat tartalmazó adatbázist
|
||||
használ. Az adatbázis struktúrát a `modules/api/apiDBStruct.json` tartalmazza, és az adatbázis
|
||||
módosításához szükséges függvények az `utils/dbtools.js` fájlban vannak megvalósítva. Így nem kell
|
||||
SQL lekérdezéseket írni, csak ezeket meghívni.
|
||||
|
||||
A `make.sh` script automatikusan létrehoz egy üres adatbázist a `utils/dbSetup.js` segítségével.
|
||||
Később ezt manuálisan futtatva alaphelyzetbe lehet állítani az adatbázist. Ha létezik egy
|
||||
`utils/ids` fájl, ami sorokban felhasználó kliens ID-kat tartalmaz, akkor a `utils/dbSetup.js`
|
||||
automatikusan létrehoz ezek alapján felhasználókat.
|
||||
|
||||
## Hogy az API és a többi modul tudjon kommunikálni:
|
||||
|
||||
|
@ -34,11 +58,11 @@ lokálisan az API és a usercript!__
|
|||
|
||||
Figyelj rá, hogy az IP cím és az url közötti spacing az pontosan 1 tab!
|
||||
|
||||
Firefox nem mindig használha a hosts filet! Ennélkül a qmining modul nem bír kommunikálni az api-val, ahonnan szedi a kérdéseket, motd-t, felhasználó kérdéseket és ilyesmiket.
|
||||
Firefox nem mindig használja a hosts filet! Ennélkül a qmining modul nem bír kommunikálni az api-val, ahonnan szedi a kérdéseket, motd-t, felhasználó kérdéseket és ilyesmiket.
|
||||
|
||||
2. Ezután a server.js-ben a portot írd át 80-ra és superuserként kell indítani a szervert
|
||||
|
||||
3. Ezután a böngészóben a qmining.frylabs.net-en a gépen futó szerver lesz elérhető
|
||||
3. Ezután a böngészőben a qmining.frylabs.net-en a gépen futó szerver lesz elérhető
|
||||
|
||||
A frylabs.net-es url-ek helyett lehet mást is használni, de néhány helyen előfordulhat hogy be van még égetve, ezért ezek ajánlottak
|
||||
|
||||
|
@ -57,7 +81,7 @@ A feedback oldalra írt üzenetek ebbe mentődnek
|
|||
|
||||
### stats
|
||||
|
||||
JSON file, kulcsok az url-ek, az értékek pedig hogy hányszor kérődtek le
|
||||
JSON file, kulcsok az url-ek, az értékek pedig hogy hányszor lettek lekérve
|
||||
|
||||
### vstats
|
||||
|
||||
|
|
|
@ -11,7 +11,12 @@ module.exports = function (options) {
|
|||
}
|
||||
|
||||
const ip = req.headers['cf-connecting-ip'] || req.connection.remoteAddress
|
||||
const hostname = req.hostname.replace('www.', '').split('.')[0]
|
||||
let hostname = 'UNDEF'
|
||||
if (req.hostname) {
|
||||
hostname = req.hostname.replace('www.', '').split('.')[0]
|
||||
} else {
|
||||
logger.Log('Hostname is undefined!', logger.GetColor('redbg'))
|
||||
}
|
||||
|
||||
// fixme: regexp includes checking
|
||||
const hasLoggableKeyword = loggableKeywords && loggableKeywords.some((x) => {
|
||||
|
|
|
@ -47,7 +47,7 @@ const usersDbBackupPath = 'data/dbs/backup'
|
|||
|
||||
const maxVeteranPwGetCount = 10
|
||||
const addPWPerDay = 1 // every x day a user can give a pw
|
||||
const maxPWCount = 4 // maximum pw give opportunities a user can have at once
|
||||
const maxPWCount = 6 // maximum pw give opportunities a user can have at once
|
||||
const daysAfterUserGetsPWs = 2 // days after user gets pw-s
|
||||
|
||||
let userDB
|
||||
|
@ -140,10 +140,11 @@ function GetApp () {
|
|||
const pw = uuidv4()
|
||||
const insertRes = dbtools.Insert(userDB, 'users', {
|
||||
pw: pw,
|
||||
avaiblePWRequests: 2,
|
||||
created: utils.GetDateString()
|
||||
})
|
||||
|
||||
logger.Log(`User #${requestingUser.id} creted new user #${insertRes.lastInsertRowid}`, logger.GetColor('cyan'))
|
||||
logger.Log(`User #${requestingUser.id} created new user #${insertRes.lastInsertRowid}`, logger.GetColor('cyan'))
|
||||
|
||||
res.json({
|
||||
result: 'success',
|
||||
|
@ -589,6 +590,7 @@ function GetApp () {
|
|||
|
||||
function IncrementAvaiblePWs () {
|
||||
// FIXME: check this if this is legit and works
|
||||
logger.Log('Incrementing avaible PW-s ...')
|
||||
const users = dbtools.SelectAll(userDB, 'users')
|
||||
const today = new Date()
|
||||
const getDayDiff = (dateString) => {
|
||||
|
@ -618,14 +620,14 @@ function GetApp () {
|
|||
})
|
||||
}
|
||||
|
||||
function DailyActions () {
|
||||
function DailyAction () {
|
||||
ExportDailyDataCount()
|
||||
BackupDB()
|
||||
IncrementAvaiblePWs()
|
||||
}
|
||||
|
||||
return {
|
||||
DailyActions: DailyActions,
|
||||
dailyAction: DailyAction,
|
||||
app: app
|
||||
}
|
||||
}
|
||||
|
|
24
server.js
24
server.js
|
@ -17,12 +17,13 @@
|
|||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
------------------------------------------------------------------------- */
|
||||
console.clear()
|
||||
process.stdout.write('\u001b[2J\u001b[0;0H') // console.clear()
|
||||
|
||||
const startHTTPS = true
|
||||
const isRoot = process.getuid && process.getuid() === 0
|
||||
|
||||
const port = isRoot ? 80 : 8080
|
||||
const httpsport = 5001
|
||||
const httpsport = isRoot ? 443 : 5001
|
||||
|
||||
const express = require('express')
|
||||
const vhost = require('vhost')
|
||||
|
@ -120,7 +121,7 @@ Object.keys(modules).forEach(function (k, i) {
|
|||
|
||||
const modApp = mod.getApp()
|
||||
x.app = modApp.app
|
||||
x.dailyAction = modApp.DailyAction
|
||||
x.dailyAction = modApp.dailyAction
|
||||
x.cleanup = modApp.cleanup
|
||||
|
||||
x.urls.forEach((url) => {
|
||||
|
@ -164,10 +165,20 @@ function setLogTimer () {
|
|||
const night = new Date(
|
||||
now.getFullYear(),
|
||||
now.getMonth(),
|
||||
now.getDate() + 1, // the next day, ...
|
||||
0, 0, 0 // ...at 00:00:00 hours
|
||||
now.getDate() + 1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
)
|
||||
logger.DebugLog(`Next daily action: ${night}`, 'daily', 1)
|
||||
const msToMidnight = night.getTime() - now.getTime()
|
||||
logger.DebugLog(`msToMidnight: ${msToMidnight}`, 'daily', 1)
|
||||
logger.DebugLog(`Seconds To Midnight: ${msToMidnight / 1000}`, 'daily', 1)
|
||||
|
||||
if (msToMidnight < 0) {
|
||||
logger.Log(`Error setting up Log Timer, msToMidnight is negative! (${msToMidnight})`, logger.GetColor('redbg'))
|
||||
return
|
||||
}
|
||||
|
||||
setTimeout(function () {
|
||||
LogTimerAction()
|
||||
|
@ -176,10 +187,13 @@ function setLogTimer () {
|
|||
}
|
||||
|
||||
function LogTimerAction () {
|
||||
logger.DebugLog(`Running Log Timer Action`, 'daily', 1)
|
||||
Object.keys(modules).forEach((k, i) => {
|
||||
const x = modules[k]
|
||||
logger.DebugLog(`Ckecking ${k}`, 'daily', 1)
|
||||
if (x.dailyAction) {
|
||||
try {
|
||||
logger.Log(`Running daily action of ${k}`)
|
||||
x.dailyAction()
|
||||
} catch (e) {
|
||||
logger.Log(`Error in ${k} daily action! Details in STDERR`, logger.GetColor('redbg'))
|
||||
|
|
|
@ -18,10 +18,10 @@ function CreateDB () {
|
|||
authDB = dbtools.GetDB(usersDBPath)
|
||||
authDB.pragma('synchronous = OFF')
|
||||
|
||||
// Object.keys(dbStruct).forEach((tableName) => {
|
||||
// const tableData = dbStruct[tableName]
|
||||
// dbtools.CreateTable(authDB, tableName, tableData.tableStruct, tableData.foreignKey)
|
||||
// })
|
||||
Object.keys(dbStruct).forEach((tableName) => {
|
||||
const tableData = dbStruct[tableName]
|
||||
dbtools.CreateTable(authDB, tableName, tableData.tableStruct, tableData.foreignKey)
|
||||
})
|
||||
|
||||
try {
|
||||
if (utils.FileExists('./ids')) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue