This repository has been archived by the owner on Mar 4, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
212 lines (191 loc) · 6.67 KB
/
index.js
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
const express = require("express");
const hbs = require("hbs");
const bodyParser = require("body-parser");
const path = require("path");
const { PythonShell } = require("python-shell");
const app = express();
const Enmap = require("enmap");
const db = new Enmap({ name: "data" });
const { port } = require("./config.js");
app.set("views", path.join(__dirname, "src/views"));
app.set("view engine", "hbs");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
/* user open the page */
// index
app.get("/", (req, res) => {
// parse cookies & get value of "user"
// prettier-ignore
const seller = (req.headers.cookie != "" && req.headers.cookie != undefined) ? req.headers.cookie.split("; ")[0].split("=")[1] : "undefined";
if (seller == "undefined") return res.render(`login/index`);
res.render("index/index");
});
// login form
app.get("/login", (req, res) => {
// parse cookies & get value of "user"
// prettier-ignore
const seller = (req.headers.cookie != "" && req.headers.cookie != undefined) ? req.headers.cookie.split("; ")[0].split("=")[1] : "undefined";
if (seller == "undefined") return res.render(`login/index`);
res.render("index/index", {
toast: true,
message: "Silahkan logout terlebih dahulu."
});
});
// Signup form
app.get("/signup", (req, res) => {
// parse cookies & get value of "user"
// prettier-ignore
const seller = (req.headers.cookie != "" && req.headers.cookie != undefined) ? req.headers.cookie.split("; ")[0].split("=")[1] : "undefined";
// check if "user" is not defined
if (seller == "undefined") return res.render(`signup/index`);
// if defined, show message to logout
res.render("index/index", {
toast: true,
message: "Silahkan logout terlebih dahulu."
});
});
// seller's form
app.get("/buy", (req, res) => {
res.render(`buy/index`);
});
// write to RFID form
app.get("/write", (req, res) => {
res.render(`write/index`);
});
// write to RFID form
app.get("/read", (req, res) => {
res.render(`read/index`);
});
// write to RFID form
app.get("/master", (req, res) => {
// parse cookies & get value of "user"
// prettier-ignore
const seller = (req.headers.cookie != "" && req.headers.cookie != undefined) ? req.headers.cookie.split("; ")[0].split("=")[1] : "undefined";
if (seller == "undefined") return res.render(`login/index`);
const barang = db.get(seller, "barang");
res.render(`master/index`, { seller, barang });
});
// write to RFID form
app.get("/sell", (req, res) => {
// parse cookies & get value of "user"
// prettier-ignore
const seller = (req.headers.cookie != "" && req.headers.cookie != undefined) ? req.headers.cookie.split("; ")[0].split("=")[1] : "undefined";
if (seller == "undefined") return res.render(`login/index`);
const barang = db.get(seller, "barang");
res.render(`sell/index`, { seller, barang });
});
// user sign out process
app.get("/logout", (req, res) => {
// re defined "user" in cookie as undefined
res.cookie("user");
// redirect to login form
res.redirect("/login");
});
// DUMP
app.get("/e", (req, res) => {
// let x = db.get("brian").barang.map((item) => {
// return item.itemName;
// });
// console.log(db.get("brian"));
let a = db.get("brian", "barang");
let b = Object.keys(a);
b.forEach((item, i) => {
console.log(db.get("brian", `barang.${item}`));
});
res.end();
});
// !DUMP
/* server side processes
* all post methods are stored bellow.
*/
// user sign in process
app.post("/login", (req, res) => {
// get username and password
const { username, password } = req.body;
// check if username doesn't exists or username and password doesn't match
if (!db.has(username) || db.get(username, "password") != password) {
// render login form and show notice
// prettier-ignore
res.render("login/index", { toast: true, message: "User tidak ada atau sandi salah!", class: "fail" });
} else {
// if it matched set "user" cookie to username
res.cookie("user", username);
// render index
res.render("index/index");
}
});
// user sign up process
app.post("/signup", (req, res) => {
// get username and password
const { username, password } = req.body;
// check if username doesn't exists in db
if (!db.has(username)) {
// set a new username and password
db.set(username, { password: password, totalBarang: 0, barang: {} });
// re-render sign up and notify user
// prettier-ignore
res.render(`signup/index`, { toast: true, message: "Berhasil!", class: "success" });
} else {
// if existed, notify user
// prettier-ignore
res.render(`signup/index`, { toast: true, message: "Sudah Terdaftar!", class: "fail" });
}
});
// buy process
app.post("/buy", (req, res) => {});
// write to RFID
app.post("/write", (req, res) => {
const cmd = require("node-cmd");
// our data
const { level, nis, money } = req.body;
// run write.py script
// prettier-ignore
cmd.get(`python3 src/py/write.py ${level} ${nis} ${money}`, (data, err, stderr) => {
// if its NOT error, render failed with error code
if (!err) res.render("write/failed", { error: err });
// if its error, render success (idk whats going on)
else res.render("write/success");
});
});
// read RFID data
app.post("/read", (req, res) => {
// temp variable
let data;
// get read.py
const py = new PythonShell("./src/py/read.py");
// check incoming output from python
py.on("message", function(m) {
// store it in data
data = m;
});
// do this when python has finished its job
py.end(err => {
// if error, render error with error data
if (err) res.render("error", { error: err });
// else, render card data
// prettier-ignore
else res.render("read/output", { output: JSON.parse(data.replace(/'/g, '"')) });
});
});
// add item to DB
app.post("/addItem", (req, res) => {
const { itemName, itemPrice } = req.body;
// prettier-ignore
const seller = (req.headers.cookie != "" && req.headers.cookie != undefined) ? req.headers.cookie.split("; ")[0].split("=")[1] : "undefined";
// prettier-ignore
db.set(seller, { id: db.get(seller, "totalBarang"), name: itemName, price: itemPrice }, `barang.${itemName}`);
db.inc(seller, "totalBarang");
res.redirect("/master");
});
// edit item info
app.post("/editPrice", (req, res) => {
// get form data
const { selectedItem, newPrice } = req.body;
const itemName = selectedItem.split("-")[0];
// parse cookies & get value of "user"
// prettier-ignore
const seller = (req.headers.cookie != "" && req.headers.cookie != undefined) ? req.headers.cookie.split("; ")[0].split("=")[1] : "undefined";
db.set(seller, newPrice, `barang.${itemName}.price`);
res.redirect("/master");
});
app.listen(3000, port, console.log("3000"));