switch to using couch_peruser - there were issues with dbs being created coming back to life after deletion ... weird stuff
This commit is contained in:
parent
328177c9ff
commit
b673fa6e93
|
@ -111,8 +111,9 @@ export async function updateLingdocsUser(uuid: T.UUID, toUpdate:
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function addCouchDbAuthUser(uuid: T.UUID): Promise<{ password: T.UserDbPassword }> {
|
export async function addCouchDbAuthUser(uuid: T.UUID): Promise<{ password: T.UserDbPassword, userDbName: T.WordlistDbName }> {
|
||||||
const password = generateWordlistDbPassword();
|
const password = generateWordlistDbPassword();
|
||||||
|
const userDbName = getWordlistDbName(uuid);
|
||||||
const usersDb = nano.db.use("_users");
|
const usersDb = nano.db.use("_users");
|
||||||
const authUser: T.CouchDbAuthUser = {
|
const authUser: T.CouchDbAuthUser = {
|
||||||
_id: `org.couchdb.user:${uuid}`,
|
_id: `org.couchdb.user:${uuid}`,
|
||||||
|
@ -122,40 +123,40 @@ export async function addCouchDbAuthUser(uuid: T.UUID): Promise<{ password: T.Us
|
||||||
password,
|
password,
|
||||||
};
|
};
|
||||||
await usersDb.insert(authUser);
|
await usersDb.insert(authUser);
|
||||||
return { password };
|
return { password, userDbName };
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createWordlistDatabase(uuid: T.UUID, password: T.UserDbPassword): Promise<{ name: T.WordlistDbName, password: T.UserDbPassword }> {
|
// Instead of these functions, I'm using couch_peruser
|
||||||
|
// export async function createWordlistDatabase(uuid: T.UUID, password: T.UserDbPassword): Promise<{ name: T.WordlistDbName, password: T.UserDbPassword }> {
|
||||||
|
// const name = getWordlistDbName(uuid);
|
||||||
|
// // create wordlist database for user
|
||||||
|
// await nano.db.create(name);
|
||||||
|
// const securityInfo = {
|
||||||
|
// admins: {
|
||||||
|
// names: [uuid],
|
||||||
|
// roles: ["_admin"]
|
||||||
|
// },
|
||||||
|
// members: {
|
||||||
|
// names: [uuid],
|
||||||
|
// roles: ["_admin"],
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
// const userDb = nano.db.use(name);
|
||||||
|
// await userDb.insert(securityInfo as any, "_security");
|
||||||
|
// return { password, name };
|
||||||
|
// }
|
||||||
|
|
||||||
const name = getWordlistDbName(uuid);
|
// export async function deleteWordlistDatabase(uuid: T.UUID): Promise<void> {
|
||||||
// create wordlist database for user
|
// const name = getWordlistDbName(uuid);
|
||||||
await nano.db.create(name);
|
// try {
|
||||||
const securityInfo = {
|
// await nano.db.destroy(name);
|
||||||
admins: {
|
// } catch (e) {
|
||||||
names: [uuid],
|
// // allow the error to pass if we're just trying to delete a database that never existed
|
||||||
roles: ["_admin"]
|
// if (e.message !== "Database does not exist.") {
|
||||||
},
|
// throw new Error("error deleting database");
|
||||||
members: {
|
// }
|
||||||
names: [uuid],
|
// }
|
||||||
roles: ["_admin"],
|
// }
|
||||||
},
|
|
||||||
};
|
|
||||||
const userDb = nano.db.use(name);
|
|
||||||
await userDb.insert(securityInfo as any, "_security");
|
|
||||||
return { password, name };
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function deleteWordlistDatabase(uuid: T.UUID): Promise<void> {
|
|
||||||
const name = getWordlistDbName(uuid);
|
|
||||||
try {
|
|
||||||
await nano.db.destroy(name);
|
|
||||||
} catch (e) {
|
|
||||||
// allow the error to pass if we're just trying to delete a database that never existed
|
|
||||||
if (e.message !== "Database does not exist.") {
|
|
||||||
throw new Error("error deleting database");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function generateWordlistDbPassword(): T.UserDbPassword {
|
function generateWordlistDbPassword(): T.UserDbPassword {
|
||||||
function makeChunk(): string {
|
function makeChunk(): string {
|
||||||
|
|
|
@ -3,8 +3,6 @@ import {
|
||||||
deleteLingdocsUser,
|
deleteLingdocsUser,
|
||||||
getLingdocsUser,
|
getLingdocsUser,
|
||||||
updateLingdocsUser,
|
updateLingdocsUser,
|
||||||
createWordlistDatabase,
|
|
||||||
deleteWordlistDatabase,
|
|
||||||
addCouchDbAuthUser,
|
addCouchDbAuthUser,
|
||||||
deleteCouchDbAuthUser,
|
deleteCouchDbAuthUser,
|
||||||
} from "../lib/couch-db";
|
} from "../lib/couch-db";
|
||||||
|
@ -121,11 +119,11 @@ apiRouter.put("/user/upgrade", async (req, res, next) => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// add user to couchdb authentication db
|
// add user to couchdb authentication db
|
||||||
const { password } = await addCouchDbAuthUser(userId);
|
const { password, userDbName } = await addCouchDbAuthUser(userId);
|
||||||
// create user db
|
// // create user db
|
||||||
const { name } = await createWordlistDatabase(userId, password);
|
// const { name } = await createWordlistDatabase(userId, password);
|
||||||
// update LingdocsUser
|
// update LingdocsUser
|
||||||
const u = await updateLingdocsUser(userId, { level: "student", wordlistDbName: name, userDbPassword: password });
|
const u = await updateLingdocsUser(userId, { level: "student", wordlistDbName: userDbName, userDbPassword: password });
|
||||||
const upgraded: T.UpgradeUserResponse = {
|
const upgraded: T.UpgradeUserResponse = {
|
||||||
ok: true,
|
ok: true,
|
||||||
message: "user upgraded to student",
|
message: "user upgraded to student",
|
||||||
|
@ -143,7 +141,7 @@ apiRouter.put("/user/upgrade", async (req, res, next) => {
|
||||||
apiRouter.delete("/user", async (req, res, next) => {
|
apiRouter.delete("/user", async (req, res, next) => {
|
||||||
try {
|
try {
|
||||||
if (!req.user) throw new Error("user not found");
|
if (!req.user) throw new Error("user not found");
|
||||||
await deleteWordlistDatabase(req.user.userId);
|
// await deleteWordlistDatabase(req.user.userId);
|
||||||
await deleteCouchDbAuthUser(req.user.userId);
|
await deleteCouchDbAuthUser(req.user.userId);
|
||||||
await deleteLingdocsUser(req.user.userId);
|
await deleteLingdocsUser(req.user.userId);
|
||||||
sendResponse(res, { ok: true, message: "user deleted" });
|
sendResponse(res, { ok: true, message: "user deleted" });
|
||||||
|
|
Loading…
Reference in New Issue