From 7b954238b3d42ba8a8ad9975aa3344f5812cdd77 Mon Sep 17 00:00:00 2001 From: lingdocs <71590811+lingdocs@users.noreply.github.com> Date: Thu, 26 Aug 2021 12:19:09 +0400 Subject: [PATCH] m --- account/src/lib/couch-db.ts | 3 ++- account/src/lib/user-utils.ts | 6 ++++++ account/src/routers/api-router.ts | 2 +- account/src/routers/auth-router.ts | 15 ++++++++++++--- account/views/admin.ejs | 20 ++++++++++++++++---- website/src/lib/account-types.ts | 2 +- website/src/screens/Account.tsx | 8 ++++++-- 7 files changed, 44 insertions(+), 12 deletions(-) diff --git a/account/src/lib/couch-db.ts b/account/src/lib/couch-db.ts index 4d7866a..804f0c9 100644 --- a/account/src/lib/couch-db.ts +++ b/account/src/lib/couch-db.ts @@ -104,7 +104,8 @@ export async function updateLingdocsUser(uuid: T.UUID, toUpdate: requestedUpgradeToStudent: undefined, } | { userTextOptionsRecord: T.UserTextOptionsRecord } | - { requestedUpgradeToStudent: true } + { upgradeToStudentRequest: "waiting" } | + { upgradeToStudentRequest: "denied" } ): Promise { const user = await getLingdocsUser("userId", uuid); if (!user) throw new Error("unable to update - user not found " + uuid); diff --git a/account/src/lib/user-utils.ts b/account/src/lib/user-utils.ts index f4d6251..c1d8d81 100644 --- a/account/src/lib/user-utils.ts +++ b/account/src/lib/user-utils.ts @@ -71,6 +71,12 @@ export async function upgradeUser(userId: T.UUID): Promise { + await updateLingdocsUser(userId, { + upgradeToStudentRequest: "denied", + }); +} + export async function createNewUser(input: { strategy: "local", email: string, diff --git a/account/src/routers/api-router.ts b/account/src/routers/api-router.ts index 134f413..84c57aa 100644 --- a/account/src/routers/api-router.ts +++ b/account/src/routers/api-router.ts @@ -148,7 +148,7 @@ apiRouter.post("/user/upgradeToStudentRequest", async (req, res, next) => { return; } sendUpgradeRequestToAdmin(req.user).catch(console.error); - await updateLingdocsUser(req.user.userId, { requestedUpgradeToStudent: true }); + await updateLingdocsUser(req.user.userId, { upgradeToStudentRequest: "waiting" }); res.send({ ok: true, message: "request for upgrade sent" }); } catch (e) { next(e); diff --git a/account/src/routers/auth-router.ts b/account/src/routers/auth-router.ts index c92aeaf..6b52ebd 100644 --- a/account/src/routers/auth-router.ts +++ b/account/src/routers/auth-router.ts @@ -15,6 +15,7 @@ import { } from "../lib/password-utils"; import { upgradeUser, + denyUserUpgradeRequest, } from "../lib/user-utils"; import { validateReCaptcha } from "../lib/recaptcha"; import { @@ -157,13 +158,21 @@ const authRouter = (passport: PassportStatic) => { } }); - router.post("/admin/upgradeToStudent/:userId", async (req, res, next) => { + /** + * Grant request for upgrade to student + */ + router.post("/admin/upgradeToStudent/:userId/:grantOrDeny", async (req, res, next) => { try { if (!req.user || !req.user.admin) { return res.redirect("/"); } - const userId = req.params.userId; - await upgradeUser(userId as T.UUID); + const userId = req.params.userId as T.UUID; + const grantOrDeny = req.params.grantOrDeny as "grant" | "deny"; + if (grantOrDeny === "grant") { + await upgradeUser(userId); + } else { + await denyUserUpgradeRequest(userId); + } res.redirect("/admin"); } catch (e) { next(e); diff --git a/account/views/admin.ejs b/account/views/admin.ejs index c765904..77a2bba 100644 --- a/account/views/admin.ejs +++ b/account/views/admin.ejs @@ -60,10 +60,22 @@ <% } %> - <% if (users[i].requestedUpgradeToStudent) { %> -
- -
+ <% if (users[i].upgradeToStudentRequest === "waiting") { %> +
+
Requested Upgrade
+
+
+ +
+
+
+
+ +
+
+
+ <% } else if (users[i].upgradeToStudentRequest === "waiting"){ %> + Upgrade Denied <% } else { %> <%= users[i].level %> <% } %> diff --git a/website/src/lib/account-types.ts b/website/src/lib/account-types.ts index c1b71c3..00d75af 100644 --- a/website/src/lib/account-types.ts +++ b/website/src/lib/account-types.ts @@ -39,7 +39,7 @@ export type LingdocsUser = { tokenHash: Hash, requestedOn: TimeStamp, }, - requestedUpgradeToStudent?: boolean, + upgradeToStudentRequest?: "waiting" | "denied", tests: [], lastLogin: TimeStamp, lastActive: TimeStamp, diff --git a/website/src/screens/Account.tsx b/website/src/screens/Account.tsx index f564c81..65f22af 100644 --- a/website/src/screens/Account.tsx +++ b/website/src/screens/Account.tsx @@ -155,10 +155,14 @@ const Account = ({ user, loadUser }: { user: AT.LingdocsUser | undefined, loadUs } -
  • Account Level: {capitalize(user.level)} {user.requestedUpgradeToStudent ? "(Upgrade Requested)" : ""}
  • +
  • Account Level: {capitalize(user.level)} {user.upgradeToStudentRequest === "waiting" + ? "(Upgrade Requested)" + : user.upgradeToStudentRequest === "denied" + ? "(Upgrade Denied)" + : ""}
  • Signs in with: {(user.password && user.email) && - Password + Password } {providers.map((provider) => ( user[provider] &&