Admin done
This commit is contained in:
71
routes/admin.ts
Normal file
71
routes/admin.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import * as auth from "basic-auth";
|
||||
import * as express from "express";
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.use((req, res, next) => {
|
||||
const user = auth(req);
|
||||
if (user && user.name === "isi" && user.pass === "123zauberbar") { // Here you need some logic to validate authentication
|
||||
next();
|
||||
} else {
|
||||
res.set({
|
||||
"WWW-Authenticate": 'Basic realm="kuerbiskern-admin"',
|
||||
}).send(401);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function compare(a, b) {
|
||||
if (a.levels != null && b.levels != null) {
|
||||
return a.levels.avg < b.levels.avg ? 1 : (a.levels.avg === b.levels.avg ? 0 : -1);
|
||||
} else if (a.levels != null) {
|
||||
//console.log("level a");
|
||||
return -1;
|
||||
} else if (b.levels != null) {
|
||||
//console.log("level b");
|
||||
return 1;
|
||||
}
|
||||
//console.log("name");
|
||||
const aid = parseInt(a.entry[2], 10);
|
||||
const bid = parseInt(b.entry[2], 10);
|
||||
return aid > bid ? 1 : (aid === bid ? 0 : -1);
|
||||
}
|
||||
|
||||
|
||||
router.get("/", (req, res, next) => {
|
||||
const users = (req.app as any).db.get("users").value();
|
||||
//console.log(users);
|
||||
const cList = (req.app as any).cocktailList;
|
||||
const cEntries = (req.app as any).cocktails;
|
||||
const list = cEntries.slice(0, cEntries.length);
|
||||
for (const user of users) {
|
||||
for (const ctail of (user.cocktails as Array<{level: number, cocktail: string}>)) {
|
||||
const idx = cList.indexOf(ctail.cocktail);
|
||||
if (Array.isArray(list[idx])) {
|
||||
list[idx] = ({entry: list[idx], levels: [ctail.level]} as any);
|
||||
} else {
|
||||
(list[idx] as {entry: any[], levels: number[]}).levels.push(ctail.level);
|
||||
}
|
||||
}
|
||||
}
|
||||
list.forEach((value, idx, arr) => {
|
||||
if (!Array.isArray(value)) {
|
||||
value.levels = {
|
||||
cnt: (value as any).levels.length,
|
||||
max: Math.max(...(value as any).levels),
|
||||
min: Math.min(...(value as any).levels),
|
||||
avg: (value as any).levels.reduce((a, b) => a + b, 0) / (value as any).levels.length,
|
||||
};
|
||||
} else {
|
||||
arr[idx] = {entry: value, levels: null};
|
||||
}
|
||||
});
|
||||
list.sort((a, b) => {
|
||||
const comp = compare(a, b);
|
||||
return comp;
|
||||
});
|
||||
console.log(list);
|
||||
res.render("admin", {title: "Admin", list});
|
||||
});
|
||||
|
||||
export = router;
|
||||
Reference in New Issue
Block a user