aboutsummaryrefslogtreecommitdiff
path: root/index.js
diff options
context:
space:
mode:
authorAndrew Lee <andrew@alee14.me>2024-12-28 13:09:27 -0500
committerAndrew Lee <andrew@alee14.me>2024-12-28 13:09:27 -0500
commitb2748a5c55255014d5d5ea02fec38c4125e08e25 (patch)
treebd83292e4eb5be716ed32d92bf8d9e0fd2138616 /index.js
parent39cbc8c286227eca935248ad9237d66fa6f45f6e (diff)
downloadfreeso-discord-auth-b2748a5c55255014d5d5ea02fec38c4125e08e25.tar.gz
freeso-discord-auth-b2748a5c55255014d5d5ea02fec38c4125e08e25.tar.bz2
freeso-discord-auth-b2748a5c55255014d5d5ea02fec38c4125e08e25.zip
Ability to change password; Sim time on dashboard
Diffstat (limited to 'index.js')
-rw-r--r--index.js63
1 files changed, 59 insertions, 4 deletions
diff --git a/index.js b/index.js
index 1e03b94..d1744d4 100644
--- a/index.js
+++ b/index.js
@@ -86,7 +86,7 @@ app.get("/", async (req, res) => {
}
});
} else {
- return res.render('error', { error: 'You must be a member of the bits & Bytes server to access this page.' });
+ return res.render('error', { error: 'You must be a member of that server to access this page.' });
}
} else {
res.render('index');
@@ -105,7 +105,7 @@ app.post("/register", upload.none(), async (req, res) => {
try {
const form = new FormData();
form.append('username', username);
- form.append('email', id + '@discord.com');
+ form.append('email', `${id}@discord.com`);
form.append('password', password);
form.append('key', process.env.REG_KEY);
@@ -123,7 +123,7 @@ app.post("/register", upload.none(), async (req, res) => {
console.error("Error inserting user data into database:", err);
return res.render('register', { ...req.user, error: "An error occurred during registration, contact server operator." });
}
- return res.render('success');
+ return res.render('success', { ...req.user, success: "Created account successfully!"});
});
}
} catch (error) {
@@ -131,7 +131,62 @@ app.post("/register", upload.none(), async (req, res) => {
return res.render('register', { ...req.user, error: "An error occurred during registration, contact server operator." });
}
} else {
- res.redirect("/");
+ res.status(401).send("Unauthorized.");
+ }
+});
+
+app.get('/password', (req, res) => {
+ if (req.isAuthenticated()) {
+ res.render('password');
+ } else {
+ res.redirect("/auth/discord");
+ }
+});
+
+app.post('/password/change', upload.none(), async (req, res) => {
+ if (req.isAuthenticated()) {
+ const { id } = req.user;
+ const { currentpassword, newpassword, newpassword2 } = req.body;
+
+ if (newpassword !== newpassword2) {
+ return res.render('password', { ...req.user, error: "Passwords do not match" });
+ }
+
+ try {
+ db.get(`SELECT * FROM users WHERE discord_id = ?`, [id], async (err, row) => {
+ if (err) {
+ console.error("Error querying the database:", err);
+ return res.render('password', {...req.user, error: "An error occurred while checking user data."});
+ }
+
+ if (row) {
+ const form = new FormData();
+ form.append('username', row.fso_username);
+ form.append('old_password', currentpassword);
+ form.append('new_password', newpassword);
+
+ const response = await axios.post(`${process.env.API_URL}/userapi/password`, form, {
+ headers: form.getHeaders()
+ });
+
+ if (response.data.error) {
+ const errorKey = response.data.error_description || "default";
+ const errorMessage = statusMessages.password_reset_errors[errorKey] || "Something went wrong";
+
+ return res.render('password', { ...req.user, error: errorMessage });
+ }
+
+ return res.render('success', { ...req.user, success: "Password changed successfully!" });
+ }
+ });
+
+ } catch (error) {
+ console.error("Error during password change:", error);
+ return res.render('password', { ...req.user, error: "An error occurred during password change, contact server operator." });
+ }
+
+ } else {
+ res.status(401).send("Unauthorized.");
}
});