This commit is contained in:
MrFry 2020-04-13 09:23:09 +02:00
commit bd0c70177d
6 changed files with 68 additions and 20 deletions

View file

@ -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 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 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 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 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 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 # Egyéb
Jelenleg sok optimalizálatlan rész található benne, cél ezek kijavítása, szépítése Jelenleg sok optimalizálatlan rész található benne, cél ezek kijavítása, szépítése

View file

@ -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 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: ## 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! 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 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 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 ### 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 ### vstats

View file

@ -11,7 +11,12 @@ module.exports = function (options) {
} }
const ip = req.headers['cf-connecting-ip'] || req.connection.remoteAddress 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 // fixme: regexp includes checking
const hasLoggableKeyword = loggableKeywords && loggableKeywords.some((x) => { const hasLoggableKeyword = loggableKeywords && loggableKeywords.some((x) => {

View file

@ -47,7 +47,7 @@ const usersDbBackupPath = 'data/dbs/backup'
const maxVeteranPwGetCount = 10 const maxVeteranPwGetCount = 10
const addPWPerDay = 1 // every x day a user can give a pw 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 const daysAfterUserGetsPWs = 2 // days after user gets pw-s
let userDB let userDB
@ -140,10 +140,11 @@ function GetApp () {
const pw = uuidv4() const pw = uuidv4()
const insertRes = dbtools.Insert(userDB, 'users', { const insertRes = dbtools.Insert(userDB, 'users', {
pw: pw, pw: pw,
avaiblePWRequests: 2,
created: utils.GetDateString() 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({ res.json({
result: 'success', result: 'success',
@ -589,6 +590,7 @@ function GetApp () {
function IncrementAvaiblePWs () { function IncrementAvaiblePWs () {
// FIXME: check this if this is legit and works // FIXME: check this if this is legit and works
logger.Log('Incrementing avaible PW-s ...')
const users = dbtools.SelectAll(userDB, 'users') const users = dbtools.SelectAll(userDB, 'users')
const today = new Date() const today = new Date()
const getDayDiff = (dateString) => { const getDayDiff = (dateString) => {
@ -618,14 +620,14 @@ function GetApp () {
}) })
} }
function DailyActions () { function DailyAction () {
ExportDailyDataCount() ExportDailyDataCount()
BackupDB() BackupDB()
IncrementAvaiblePWs() IncrementAvaiblePWs()
} }
return { return {
DailyActions: DailyActions, dailyAction: DailyAction,
app: app app: app
} }
} }

View file

@ -17,12 +17,13 @@
along with this program. If not, see <https://www.gnu.org/licenses/>. 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 startHTTPS = true
const isRoot = process.getuid && process.getuid() === 0 const isRoot = process.getuid && process.getuid() === 0
const port = isRoot ? 80 : 8080 const port = isRoot ? 80 : 8080
const httpsport = 5001 const httpsport = isRoot ? 443 : 5001
const express = require('express') const express = require('express')
const vhost = require('vhost') const vhost = require('vhost')
@ -120,7 +121,7 @@ Object.keys(modules).forEach(function (k, i) {
const modApp = mod.getApp() const modApp = mod.getApp()
x.app = modApp.app x.app = modApp.app
x.dailyAction = modApp.DailyAction x.dailyAction = modApp.dailyAction
x.cleanup = modApp.cleanup x.cleanup = modApp.cleanup
x.urls.forEach((url) => { x.urls.forEach((url) => {
@ -164,10 +165,20 @@ function setLogTimer () {
const night = new Date( const night = new Date(
now.getFullYear(), now.getFullYear(),
now.getMonth(), now.getMonth(),
now.getDate() + 1, // the next day, ... now.getDate() + 1,
0, 0, 0 // ...at 00:00:00 hours 0,
0,
0
) )
logger.DebugLog(`Next daily action: ${night}`, 'daily', 1)
const msToMidnight = night.getTime() - now.getTime() 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 () { setTimeout(function () {
LogTimerAction() LogTimerAction()
@ -176,10 +187,13 @@ function setLogTimer () {
} }
function LogTimerAction () { function LogTimerAction () {
logger.DebugLog(`Running Log Timer Action`, 'daily', 1)
Object.keys(modules).forEach((k, i) => { Object.keys(modules).forEach((k, i) => {
const x = modules[k] const x = modules[k]
logger.DebugLog(`Ckecking ${k}`, 'daily', 1)
if (x.dailyAction) { if (x.dailyAction) {
try { try {
logger.Log(`Running daily action of ${k}`)
x.dailyAction() x.dailyAction()
} catch (e) { } catch (e) {
logger.Log(`Error in ${k} daily action! Details in STDERR`, logger.GetColor('redbg')) logger.Log(`Error in ${k} daily action! Details in STDERR`, logger.GetColor('redbg'))

View file

@ -18,10 +18,10 @@ function CreateDB () {
authDB = dbtools.GetDB(usersDBPath) authDB = dbtools.GetDB(usersDBPath)
authDB.pragma('synchronous = OFF') authDB.pragma('synchronous = OFF')
// Object.keys(dbStruct).forEach((tableName) => { Object.keys(dbStruct).forEach((tableName) => {
// const tableData = dbStruct[tableName] const tableData = dbStruct[tableName]
// dbtools.CreateTable(authDB, tableName, tableData.tableStruct, tableData.foreignKey) dbtools.CreateTable(authDB, tableName, tableData.tableStruct, tableData.foreignKey)
// }) })
try { try {
if (utils.FileExists('./ids')) { if (utils.FileExists('./ids')) {