mirror of
https://github.com/Expand-sys/ccashfrontend
synced 2025-12-16 23:02:13 +11:00
changed navbar a little
This commit is contained in:
parent
796df3809b
commit
5245d6a735
7 changed files with 615 additions and 740 deletions
49
index.js
49
index.js
|
|
@ -3,20 +3,7 @@ require("pino-pretty");
|
|||
const dotenv = require("dotenv");
|
||||
|
||||
dotenv.config({ path: ".env" });
|
||||
if (process.env.SECURE) {
|
||||
const fastify = require("fastify")({
|
||||
http2: true,
|
||||
https: {
|
||||
allowHTTP1: true, // fallback support for HTTP1
|
||||
key: fs.readFileSync(path.join(root, "..", "config", "key.key")),
|
||||
cert: fs.readFileSync(path.join(root, "..", "config", "cert.cert")),
|
||||
},
|
||||
});
|
||||
} else {
|
||||
const fastify = require("fastify")({
|
||||
//logger: { prettyPrint: true },
|
||||
});
|
||||
}
|
||||
const fastify = require("fastify")();
|
||||
|
||||
const fastifyFlash = require("fastify-flash");
|
||||
|
||||
|
|
@ -99,19 +86,11 @@ fastify.get("/", async function (req, res) {
|
|||
res.view("setup");
|
||||
} else {
|
||||
const client = new CCashClient(process.env.BANKAPIURL);
|
||||
let checkalive;
|
||||
try {
|
||||
checkalive = await client.ping();
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
let alive = false;
|
||||
try {
|
||||
let checkalive = await client.ping();
|
||||
if (checkalive) {
|
||||
alive = true;
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
} else {
|
||||
alive = false;
|
||||
}
|
||||
|
||||
res.view("index", {
|
||||
|
|
@ -222,6 +201,7 @@ fastify.get(
|
|||
admin: req.session.get("admin"),
|
||||
sucesses: successes,
|
||||
errors: errors,
|
||||
alive: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -287,6 +267,7 @@ fastify.post("/register", async function (req, res) {
|
|||
|
||||
fastify.post("/login", async function (req, res) {
|
||||
const client = new CCashClient(process.env.BANKAPIURL);
|
||||
|
||||
if (req.session.get("user")) {
|
||||
res.redirect("/");
|
||||
}
|
||||
|
|
@ -334,30 +315,44 @@ fastify.get("/logout", function (req, res) {
|
|||
});
|
||||
});
|
||||
|
||||
fastify.get("/login", function (req, res) {
|
||||
fastify.get("/login", async function (req, res) {
|
||||
let successes = req.session.get("successes");
|
||||
req.session.set("successes", "");
|
||||
let errors = req.session.get("errors");
|
||||
req.session.set("errors", "");
|
||||
let checkalive = await client.ping();
|
||||
if (checkalive) {
|
||||
alive = true;
|
||||
} else {
|
||||
alive = false;
|
||||
}
|
||||
res.view("login", {
|
||||
successes: successes,
|
||||
errors: errors,
|
||||
user: req.session.get("user"),
|
||||
random: papy(),
|
||||
alive: alive,
|
||||
});
|
||||
});
|
||||
|
||||
fastify.get("/register", function (req, res) {
|
||||
fastify.get("/register", async function (req, res) {
|
||||
let successes = req.session.get("successes");
|
||||
req.session.set("successes", "");
|
||||
let errors = req.session.get("errors");
|
||||
req.session.set("errors", "");
|
||||
let checkalive = await client.ping();
|
||||
if (checkalive) {
|
||||
alive = true;
|
||||
} else {
|
||||
alive = false;
|
||||
}
|
||||
res.view("register", {
|
||||
successes: successes,
|
||||
errors: errors,
|
||||
user: req.session.get("user"),
|
||||
admin: req.session.get("admin"),
|
||||
random: papy(),
|
||||
alive: alive,
|
||||
});
|
||||
});
|
||||
process.on("SIGINT", function () {
|
||||
|
|
|
|||
799
package-lock.json
generated
799
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,82 +1,91 @@
|
|||
|
||||
.main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-around;
|
||||
height: 100vh;
|
||||
}
|
||||
body{
|
||||
background: rgb(182,151,255);
|
||||
background: linear-gradient(180deg, rgba(182,151,255,1) 0%, rgba(113,63,230,1) 100%);
|
||||
height:100vh;
|
||||
}
|
||||
body {
|
||||
background: rgb(182, 151, 255);
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(182, 151, 255, 1) 0%,
|
||||
rgba(113, 63, 230, 1) 100%
|
||||
);
|
||||
height: 100vh;
|
||||
background-attachment: fixed;
|
||||
}
|
||||
.navbarrr{
|
||||
background: rgb(38,9,108);
|
||||
background: linear-gradient(180deg, rgba(38,9,108,1) 0%, rgba(14,3,40,1) 100%);;
|
||||
.navbarrr {
|
||||
background: rgb(38, 9, 108);
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(38, 9, 108, 1) 0%,
|
||||
rgba(14, 3, 40, 1) 100%
|
||||
);
|
||||
}
|
||||
.blue{
|
||||
.blue {
|
||||
background: #46cff2;
|
||||
}
|
||||
.container-large{
|
||||
.container-large {
|
||||
padding-left: 10%;
|
||||
padding-right: 10%;
|
||||
}
|
||||
.col{
|
||||
.col {
|
||||
padding: 0px;
|
||||
padding-left: 0px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
.card{
|
||||
.card {
|
||||
padding: 10px;
|
||||
}
|
||||
.row{
|
||||
.row {
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
.logo{
|
||||
.logo {
|
||||
width: 250px;
|
||||
background-color:white;
|
||||
background-color: white;
|
||||
}
|
||||
.logs{
|
||||
height:350px;
|
||||
overflow:auto;
|
||||
.logs {
|
||||
height: 350px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.content{ flex-grow: 1; }
|
||||
.content {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.gallery{
|
||||
.gallery {
|
||||
background-color: white;
|
||||
margin-bottom: 50px;
|
||||
box-shadow: 10px 10px 5px black;
|
||||
}
|
||||
|
||||
.bg-custom{
|
||||
background-color:#130f40;
|
||||
.bg-custom {
|
||||
background-color: #130f40;
|
||||
}
|
||||
.button-fixed{
|
||||
.button-fixed {
|
||||
bottom: 0;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.fas{
|
||||
.fas {
|
||||
cursor: pointer;
|
||||
font-size: 24px;
|
||||
}
|
||||
p{
|
||||
p {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.text-black{
|
||||
color:black;
|
||||
.text-black {
|
||||
color: black;
|
||||
}
|
||||
.text-white{
|
||||
color:white;
|
||||
.text-white {
|
||||
color: white;
|
||||
}
|
||||
.form-check-input{
|
||||
margin-left:0;
|
||||
padding:inherit;
|
||||
.form-check-input {
|
||||
margin-left: 0;
|
||||
padding: inherit;
|
||||
}
|
||||
|
||||
input[type="radio"]:checked ~ .reveal-if-active,
|
||||
|
|
@ -86,18 +95,21 @@ input[type="checkbox"]:checked ~ .reveal-if-active {
|
|||
overflow: visible;
|
||||
}
|
||||
|
||||
|
||||
|
||||
h1, h2, h3, h4, h5, h6, p, label{
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
color
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
p,
|
||||
label {
|
||||
font-family: "Montserrat", sans-serif;
|
||||
}
|
||||
|
||||
|
||||
h1{
|
||||
h1 {
|
||||
color: white;
|
||||
}
|
||||
.shadow{
|
||||
.shadow {
|
||||
box-shadow: 5px 10px #888888;
|
||||
}
|
||||
$w: Min(10em, 100%);
|
||||
|
|
@ -106,5 +118,23 @@ $w: Min(10em, 100%);
|
|||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, $w);
|
||||
|
||||
> * { width: $w; }
|
||||
> * {
|
||||
width: $w;
|
||||
}
|
||||
}
|
||||
.logo {
|
||||
margin-bottom: -50px;
|
||||
align-content: center;
|
||||
width: 115px;
|
||||
padding: 15px;
|
||||
border-radius: 65px;
|
||||
border-color: rgba(113, 63, 230, 1);
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
box-shadow: 5px 5px 18px black;
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(14, 3, 40, 1) 0%,
|
||||
rgba(38, 9, 108, 1) 100%
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,13 @@ module.exports = function (fastify, opts, done) {
|
|||
{
|
||||
preValidation: [validateAdmin],
|
||||
},
|
||||
function (req, res) {
|
||||
async function (req, res) {
|
||||
let checkalive = await client.ping();
|
||||
if (checkalive) {
|
||||
alive = true;
|
||||
} else {
|
||||
alive = false;
|
||||
}
|
||||
let successes = req.session.get("successes");
|
||||
req.session.set("successes", "");
|
||||
let errors = req.session.get("errors");
|
||||
|
|
@ -26,6 +32,7 @@ module.exports = function (fastify, opts, done) {
|
|||
errors: errors,
|
||||
successes: successes,
|
||||
random: papy(),
|
||||
alive: alive,
|
||||
});
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,13 @@ module.exports = function (fastify, opts, done) {
|
|||
{
|
||||
preValidation: [validate],
|
||||
},
|
||||
function (req, res) {
|
||||
async function (req, res) {
|
||||
let checkalive = await client.ping();
|
||||
if (checkalive) {
|
||||
alive = true;
|
||||
} else {
|
||||
alive = false;
|
||||
}
|
||||
let successes = req.session.get("successes");
|
||||
req.session.set("successes", "");
|
||||
let errors = req.session.get("errors");
|
||||
|
|
@ -28,6 +34,7 @@ module.exports = function (fastify, opts, done) {
|
|||
successes: successes,
|
||||
user: req.session.get("user"),
|
||||
admin: req.session.get("admin"),
|
||||
alive: true,
|
||||
});
|
||||
}
|
||||
);
|
||||
|
|
|
|||
352
views/index.js
352
views/index.js
|
|
@ -1,352 +0,0 @@
|
|||
const root = process.env.PWD;
|
||||
const express = require("express");
|
||||
const path = require("path");
|
||||
const https = require("https");
|
||||
const got = require("got");
|
||||
const bodyParser = require("body-parser");
|
||||
const expressValidator = require("express-validator");
|
||||
const flash = require("connect-flash");
|
||||
const session = require("express-session");
|
||||
const { ensureAuthenticated } = require(`${root}/config/auth.js`);
|
||||
const app = express();
|
||||
const MemoryStore = require("memorystore")(session);
|
||||
const url = require("url");
|
||||
const dotenv = require("dotenv");
|
||||
const fs = require("fs");
|
||||
const mongoose = require("mongoose");
|
||||
const { CCashClient } = require("ccash-client-js");
|
||||
dotenv.config();
|
||||
const { postUser } = require(`${root}/helpers/functions.js`);
|
||||
|
||||
app.set("views", path.join(__dirname, "views"));
|
||||
app.set("view engine", "pug");
|
||||
app.use(flash());
|
||||
app.use(require("connect-flash")());
|
||||
app.use(express.static(path.join(__dirname, "public")));
|
||||
app.use(express.json());
|
||||
app.use(
|
||||
bodyParser.urlencoded({
|
||||
extended: true,
|
||||
})
|
||||
);
|
||||
app.use(function (req, res, next) {
|
||||
res.locals.messages = require("express-messages")(req, res);
|
||||
next();
|
||||
});
|
||||
app.set("trust proxy", 1); // trust first proxy
|
||||
const secure = process.env.SECURE;
|
||||
app.use(
|
||||
session({
|
||||
secret: "fuck shit cunt",
|
||||
resave: true,
|
||||
store: new MemoryStore({
|
||||
checkPeriod: 86400000, // prune expired entries every 24h
|
||||
}),
|
||||
saveUninitialized: true,
|
||||
cookie: { secure: secure, maxAge: 86400000 },
|
||||
})
|
||||
);
|
||||
app.use(
|
||||
expressValidator({
|
||||
errorFormatter: function (param, msg, value) {
|
||||
var namespace = param.split("."),
|
||||
root = namespace.shift(),
|
||||
formParam = root;
|
||||
|
||||
while (namespace.length) {
|
||||
formParam += "[" + namespace.shift() + "]";
|
||||
}
|
||||
return {
|
||||
param: formParam,
|
||||
msg: msg,
|
||||
value: value,
|
||||
};
|
||||
},
|
||||
})
|
||||
);
|
||||
|
||||
function papy() {
|
||||
const rndInt = Math.floor(Math.random() * 1337);
|
||||
let random = false;
|
||||
if (rndInt == 420) {
|
||||
random = true;
|
||||
}
|
||||
return random;
|
||||
}
|
||||
|
||||
app.post("/setup", async function (req, res) {
|
||||
const { url, secure } = req.body;
|
||||
if (secure) {
|
||||
process.env.SECURE = true;
|
||||
}
|
||||
process.env.BANKAPIURL = url;
|
||||
console.log(process.env.BANKAPIURL);
|
||||
fs.writeFileSync(
|
||||
".env",
|
||||
"BANKAPIURL=" +
|
||||
process.env.BANKAPIURL +
|
||||
"\n" +
|
||||
"SECURE=" +
|
||||
process.env.SECURE +
|
||||
"\nSETUP=true"
|
||||
);
|
||||
fs.writeFileSync("tmp/restart.txt", "");
|
||||
res.redirect("/");
|
||||
});
|
||||
|
||||
app.get("/", async function (req, res) {
|
||||
if (process.env.SETUP == false || !process.env.SETUP) {
|
||||
res.render("setup");
|
||||
} else {
|
||||
const client = new CCashClient(process.env.BANKAPIURL);
|
||||
let checkalive;
|
||||
try {
|
||||
checkalive = await client.help();
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
let alive = false;
|
||||
try {
|
||||
if (checkalive) {
|
||||
alive = true;
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
|
||||
res.render("index", {
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
alive: alive,
|
||||
url: process.env.BANKAPIURL,
|
||||
random: papy(),
|
||||
});
|
||||
}
|
||||
});
|
||||
app.get("/BankF", ensureAuthenticated, async function (req, res) {
|
||||
const client = new CCashClient(process.env.BANKAPIURL);
|
||||
let successes = req.session.successes;
|
||||
let errors = req.session.errors;
|
||||
req.session.errors = [];
|
||||
let admin;
|
||||
try {
|
||||
admin = req.session.admin;
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
let balance = 0;
|
||||
try {
|
||||
balance = await client.balance(req.session.user);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
let logsent;
|
||||
console.log("start " + Date.now());
|
||||
try {
|
||||
const { user, password } = req.session;
|
||||
logsent = await client.log(user, password);
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
console.log(logsent);
|
||||
let logrec = logsent;
|
||||
let graphlog = logsent;
|
||||
if (graphlog != null) {
|
||||
graphlog = graphlog.reverse();
|
||||
}
|
||||
let graphdata = "";
|
||||
let currentbal = balance;
|
||||
if (graphlog) {
|
||||
for (i = graphlog.length - 1; i > -1; i--) {
|
||||
if (graphlog[i].from == req.session.user) {
|
||||
currentbal = parseInt(currentbal) + parseInt(graphlog[i].amount);
|
||||
graphdata = graphdata + ", [" + parseInt(i) + "," + currentbal + "]";
|
||||
} else {
|
||||
currentbal = parseInt(currentbal) - parseInt(graphlog[i].amount);
|
||||
graphdata = graphdata + ", [" + parseInt(i) + "," + currentbal + "]";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
graphlog = undefined;
|
||||
}
|
||||
if (graphdata != "") {
|
||||
graphdata =
|
||||
", [" + parseInt(graphlog.length) + "," + balance + "]" + graphdata;
|
||||
graphdata = '["transaction", "balance"]' + graphdata;
|
||||
}
|
||||
if (logsent == null) {
|
||||
logsent = undefined;
|
||||
} else {
|
||||
logsent = await logsent.filter(({ from }) => from === req.session.user);
|
||||
}
|
||||
if (logrec == null) {
|
||||
logrec = undefined;
|
||||
} else {
|
||||
logrec = await logrec.filter(({ to }) => to === req.session.user);
|
||||
}
|
||||
if (logsent) {
|
||||
for (i in logrec) {
|
||||
logrec[i].time = new Date(logrec[i].time);
|
||||
}
|
||||
}
|
||||
if (logrec) {
|
||||
for (i in logsent) {
|
||||
logsent[i].time = new Date(logsent[i].time);
|
||||
}
|
||||
}
|
||||
if (logrec != null) {
|
||||
logrec.reverse();
|
||||
}
|
||||
if (logsent != null) {
|
||||
logsent.reverse();
|
||||
}
|
||||
let maxgraph = balance + 1000;
|
||||
console.log("begin render " + Date.now());
|
||||
res.render("bankf", {
|
||||
maxgraph: maxgraph,
|
||||
graphdata: graphdata,
|
||||
logrec: logrec,
|
||||
logsent: logsent,
|
||||
user: req.session.user,
|
||||
balance: balance,
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
sucesses: successes,
|
||||
errors: errors,
|
||||
random: papy(),
|
||||
});
|
||||
});
|
||||
|
||||
app.post("/sendfunds", async function (req, res) {
|
||||
const client = new CCashClient(process.env.BANKAPIURL);
|
||||
let { amount, name, senderpass } = req.body;
|
||||
req.session.errors = [];
|
||||
req.session.successes = [];
|
||||
let a_name = req.session.user;
|
||||
let result;
|
||||
result = await client.sendFunds(a_name, senderpass, name, amount);
|
||||
console.log(result);
|
||||
if (result == 1) {
|
||||
req.session.successes.push({ msg: "Transfer successful" });
|
||||
//post details
|
||||
res.redirect("/BankF");
|
||||
} else if (result == -1) {
|
||||
req.session.errors.push({ msg: "Transfer Unsuccessful: User not Found" });
|
||||
res.redirect("/Bankf");
|
||||
} else if (result == -2) {
|
||||
req.session.errors.push({ msg: "Transfer Unsuccessful: Wrong Password" });
|
||||
res.redirect("/Bankf");
|
||||
}
|
||||
});
|
||||
|
||||
app.post("/register", async function (req, res) {
|
||||
const client = new CCashClient(process.env.BANKAPIURL);
|
||||
var { name, password, password2 } = req.body;
|
||||
req.session.errors = [];
|
||||
req.session.successes = [];
|
||||
if (!name || !password || !password2) {
|
||||
req.session.errors.push({ msg: "please fill in all fields" });
|
||||
} else if (password != password2) {
|
||||
req.session.errors.push({ msg: "Passwords don't match" });
|
||||
} else if (password.length < 6) {
|
||||
req.session.errors.push({
|
||||
msg: "Password must be at least 6 characters",
|
||||
});
|
||||
} else {
|
||||
let checkuser = await postUser(name, password);
|
||||
console.log(checkuser);
|
||||
if (checkuser == -4) {
|
||||
req.session.errors.push({ msg: "Error: Name too long" });
|
||||
res.redirect("/register");
|
||||
} else if (checkuser == -5) {
|
||||
req.session.errors.push({ msg: "Error: User Already Exists" });
|
||||
res.redirect("/register");
|
||||
} else {
|
||||
req.session.successes.push({ msg: "Account Created! please Log in" });
|
||||
res.redirect("/login");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
app.post("/login", async function (req, res) {
|
||||
const client = new CCashClient(process.env.BANKAPIURL);
|
||||
if (req.session.user) {
|
||||
res.redirect("/");
|
||||
}
|
||||
req.session.regenerate(function (err) {});
|
||||
const { name, password } = req.body;
|
||||
let adminTest;
|
||||
try {
|
||||
adminTest = await client.adminVerifyPassword(password);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
console.log(adminTest);
|
||||
if (adminTest != -2) {
|
||||
req.session.admin = adminTest;
|
||||
req.session.adminp = password;
|
||||
req.session.user = name;
|
||||
req.session.password = password;
|
||||
res.redirect("/BankF");
|
||||
} else {
|
||||
let verified;
|
||||
verified = await client.verifyPassword(name, password);
|
||||
console.log(verified);
|
||||
if (verified == 1) {
|
||||
req.session.user = name;
|
||||
req.session.password = password;
|
||||
res.redirect("/BankF");
|
||||
} else {
|
||||
req.session.errors = [];
|
||||
req.session.errors.push({ msg: "Password wrong" });
|
||||
res.redirect("/login");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let admin = require("./routes/admin");
|
||||
app.use("/admin", admin);
|
||||
|
||||
let settings = require("./routes/settings");
|
||||
app.use("/settings", settings);
|
||||
|
||||
app.get("/logout", function (req, res) {
|
||||
req.session.regenerate(function (err) {
|
||||
res.render("login", {
|
||||
random: papy(),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
app.get("/login", function (req, res) {
|
||||
let successes = req.session.successes;
|
||||
let errors = req.session.errors;
|
||||
req.session.regenerate(function (err) {
|
||||
res.render("login", {
|
||||
successes: successes,
|
||||
errors: errors,
|
||||
user: req.session.user,
|
||||
random: papy(),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
app.get("/register", function (req, res) {
|
||||
let successes = req.session.successes;
|
||||
req.session.successes = [];
|
||||
let errors = req.session.errors;
|
||||
req.session.errors = [];
|
||||
res.render("register", {
|
||||
errors: errors,
|
||||
successes: successes,
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
random: papy(),
|
||||
});
|
||||
});
|
||||
process.on("SIGINT", function () {
|
||||
process.exit();
|
||||
});
|
||||
app.listen(process.env.PORT || 3000, function () {
|
||||
console.log("Server started on port 3000...");
|
||||
});
|
||||
|
|
@ -13,13 +13,18 @@ html
|
|||
body
|
||||
nav.navbar.navbar-expand-lg.navbar-dark.navbarrr.shadow-lg
|
||||
.container
|
||||
.logo
|
||||
a.navbar-brand(href='/')
|
||||
img(src="/CCashLogo3.png" style="width:75px; height:74px")
|
||||
button.navbar-toggler(type='button', data-toggle='collapse', data-target='#navbars', aria-controls='navbars', aria-expanded='false', aria-label='Toggle navigation')
|
||||
span.navbar-toggler-icon
|
||||
#navbars.collapse.navbar-collapse
|
||||
ul.navbar-nav.mr-auto
|
||||
|
||||
li.nav-item
|
||||
if alive
|
||||
p.text-white Server is Online
|
||||
if !alive
|
||||
p(style="color: red;") Server is offline
|
||||
ul.navbar-nav.mr-right.text-white
|
||||
if user == undefined
|
||||
li.nav-item
|
||||
|
|
|
|||
Loading…
Reference in a new issue