forgot to send request

This commit is contained in:
lingdocs 2021-08-25 12:52:38 +04:00
parent 497d36048b
commit 712a1991a6
3 changed files with 53 additions and 21 deletions

View File

@ -1,11 +1,18 @@
import { v4 as uuidv4 } from "uuid";
import { insertLingdocsUser } from "../lib/couch-db";
import {
insertLingdocsUser,
addCouchDbAuthUser,
updateLingdocsUser,
} from "../lib/couch-db";
import {
getHash,
getEmailTokenAndHash,
} from "../lib/password-utils";
import { getTimestamp } from "../lib/time-utils";
import { sendVerificationEmail } from "../lib/mail-utils";
import {
sendVerificationEmail,
sendAccountUpgradeMessage,
} from "../lib/mail-utils";
import { outsideProviders } from "../middleware/setup-passport";
import * as T from "../../../website/src/lib/account-types";
@ -43,6 +50,28 @@ function getEmailFromGoogleProfile(profile: T.GoogleProfile): { email: string |
};
}
export async function upgradeUser(userId: T.UUID): Promise<T.UpgradeUserResponse> {
// add user to couchdb authentication db
const { password, userDbName } = await addCouchDbAuthUser(userId);
// // create user db
// update LingdocsUser
const u = await updateLingdocsUser(userId, {
level: "student",
wordlistDbName: userDbName,
couchDbPassword: password,
requestedUpgradeToStudent: undefined,
});
if (u.email) {
sendAccountUpgradeMessage(u).catch(console.error);
}
const upgraded: T.UpgradeUserResponse = {
ok: true,
message: "user upgraded to student",
user: u,
};
return upgraded;
}
export async function createNewUser(input: {
strategy: "local",
email: string,

View File

@ -3,7 +3,6 @@ import {
deleteLingdocsUser,
getLingdocsUser,
updateLingdocsUser,
addCouchDbAuthUser,
deleteCouchDbAuthUser,
} from "../lib/couch-db";
import {
@ -12,10 +11,12 @@ import {
getEmailTokenAndHash,
} from "../lib/password-utils";
import {
sendAccountUpgradeMessage,
sendUpgradeRequestToAdmin,
sendVerificationEmail,
} from "../lib/mail-utils";
import {
upgradeUser,
} from "../lib/user-utils";
import * as T from "../../../website/src/lib/account-types";
import env from "../lib/env-vars";
@ -132,22 +133,7 @@ apiRouter.put("/user/upgrade", async (req, res, next) => {
res.send(alreadyUpgraded);
return;
}
// add user to couchdb authentication db
const { password, userDbName } = await addCouchDbAuthUser(userId);
// // create user db
// update LingdocsUser
const u = await updateLingdocsUser(userId, {
level: "student",
wordlistDbName: userDbName,
couchDbPassword: password,
requestedUpgradeToStudent: undefined,
});
sendAccountUpgradeMessage(u).catch(console.error);
const upgraded: T.UpgradeUserResponse = {
ok: true,
message: "user upgraded to student",
user: u,
};
const upgraded: T.UpgradeUserResponse = await upgradeUser(userId);
res.send(upgraded);
} catch (e) {
next(e);
@ -163,6 +149,7 @@ apiRouter.post("/user/upgradeToStudentRequest", async (req, res, next) => {
}
sendUpgradeRequestToAdmin(req.user).catch(console.error);
await updateLingdocsUser(req.user.userId, { requestedUpgradeToStudent: true });
res.send({ ok: true, message: "request for upgrade sent" });
} catch (e) {
next(e);
}

View File

@ -12,6 +12,9 @@ import {
compareToHash,
getEmailTokenAndHash,
} from "../lib/password-utils";
import {
upgradeUser,
} from "../lib/user-utils";
import { validateReCaptcha } from "../lib/recaptcha";
import {
getTimestamp,
@ -151,7 +154,20 @@ const authRouter = (passport: PassportStatic) => {
} catch (e) {
next(e);
}
})
});
router.post("/admin/upgradeToStudent/:userId", async (req, res, next) => {
try {
if (!req.user.admin) {
return res.redirect("/");
}
const userId = req.params.userId;
await upgradeUser(userId as T.UUID);
res.redirect("/admin");
} catch (e) {
next(e);
}
});
router.get("/email-verification/:uuid/:token", async (req, res, next) => {
const page = "email-verification";