File size: 3,552 Bytes
91d9d20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
var log = require("../lib/log");
var utils = require("../lib/utils");

var path = require("path");
var Express = require("express");
var ExpressWs = require("express-ws");
var ExpressSession = require("express-session")({
    secret: "không có gì là bí mật.",
    resave: false,
    saveUninitialized: true,
    cookie: {
        secure: true
    }
});
var Os = require("os");
var fs = require("fs");

var App = Express();

ExpressWs(App);
App.set("view engine", "ejs");
App.set("views", path.resolve(__dirname, "views"));
App.use("/assets", utils.requestChecked, Express.static(path.resolve(__dirname, "assets")));
App.use(Express.urlencoded({ extended: true }));
App.use(Express.json());
App.use(ExpressSession);

if (global.mira.config.dashboardOptions.resetAccount) {
    var { Messenger } = global.mira.apis;
    var { adminIDs } = global.mira.config.botOptions;
    var templMail = utils.randomStr({ length: 10, letter: true, number: false }) + "@mira.com";
    var templPass = utils.randomStr({ length: 16 });
    global.mira.config = {
        dashboardOptions: {
            user: templMail,
            password: templPass
        }
    }

    var message =
        "==========================" +
        "\n• Email: " + templMail +
        "\n• Password: " + templPass +
        "\n• Timestamp: " + Date.now() +
        "\n==========================";
    adminIDs.map(id => Messenger.send(message, id, _ => {}));
}

App.post("/", function (req, res) {
    var { dashboardOptions } = global.mira.config;
    var body = req.body;
    var status, resData;

    if (body.url === "/login") {
        var { username, password, remember } = body;
        if (username === dashboardOptions.user && password === dashboardOptions.password) {
            req.session.loggedIn = true;
            req.session.username = username;

            req.session.cookie.maxAge = remember ? 7 * 24 * 60 * 60 * 1000 : 3 * 60 * 60 * 1000;
            req.session.cookie.secure = req.secure || req.headers["x-forwarded-proto"] === "https";
            req.session.cookie.httpOnly = true;

            status = 200;
            resData = {
                isLogin: true
            }
        } else {
            status = 401;
            resData = {
                message: "Wrong Username/Password."
            }
        }
    } else if (body.url === "/logout") {
        req.session.destroy();
        status = 200;
        resData = {
            isLogin: false
        }
    }

    res.status(status || 404);
    res.json(resData || {});
});

App.get("/login", function (req, res) {
    if (utils.isAuthenticated(req))
        res.redirect("/dashboard");
    else
        res.render("login");
});

App.get("/", function (req, res) {
    if (utils.isAuthenticated(req))
        res.redirect("/dashboard");
    else
        res.redirect("/login");
});

App.use(function (req, res) {
    res.status(404);
    res.render("404");
});

var interfaces = Os.networkInterfaces();
var info;

for (var network in interfaces) {
    if (info)
        break;

    info = interfaces[network].find(item => !item.internal && item.family === "IPv4");
}

var Server = App.listen(global.mira.config.dashboardOptions.port, _ => {
    var port = Server.address().port;

    log.info("dashboard.port", port);
    log.info("dashboard.ip", info.address);
    log.info("dashboard.host", "http://" + info.address + ":" + port);
    log.wall();
});