Skip to content

Commit

Permalink
Update mongodb version and fix type errors #2559
Browse files Browse the repository at this point in the history
  • Loading branch information
iamleeg committed Apr 19, 2022
1 parent e360284 commit 1f44ac1
Show file tree
Hide file tree
Showing 14 changed files with 9,082 additions and 14,777 deletions.
23,152 changes: 8,594 additions & 14,558 deletions verification/curator-service/api/package-lock.json

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions verification/curator-service/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
"@types/express-session": "^1.17.0",
"@types/jest": "^27.0.2",
"@types/lodash": "^4.14.161",
"@types/mongodb": "^4.0.7",
"@types/node": "^14.11.1",
"@types/nodemailer": "^6.4.0",
"@types/passport": "^1.0.4",
Expand Down Expand Up @@ -86,7 +85,7 @@
"lodash": "^4.17.21",
"longjohn": "^0.2.12",
"mimemessage": "^1.0.5",
"mongodb": "^3.7.3",
"mongodb": "^4.1.4",
"mongodb-memory-server": "^6.6.7",
"nodemailer": "^6.4.16",
"passport": "^0.4.1",
Expand Down
79 changes: 52 additions & 27 deletions verification/curator-service/api/src/controllers/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ import {
} from 'passport-http-bearer';
import { Strategy as GoogleStrategy, Profile } from 'passport-google-oauth20';
import { NextFunction, Request, Response } from 'express';
import { isUserPasswordValid, IUser, userPublicFields, users } from '../model/user';
import {
isUserPasswordValid,
IUser,
userPublicFields,
users,
} from '../model/user';
import { tokens } from '../model/token';

import { Router } from 'express';
Expand Down Expand Up @@ -150,7 +155,7 @@ interface GoogleProfile extends Profile {
displayName: string;
// List of emails belonging to the profile.
// Unclear as to when multiple ones are possible.
emails: [{ value: string }];
emails: [{ value: string; verified: 'true' | 'false' }];
}

/**
Expand Down Expand Up @@ -263,7 +268,9 @@ export class AuthController {
mustBeAuthenticated,
async (req: Request, res: Response): Promise<void> => {
const theUser = req.user as IUser;
const currentUser = await users().findOne({ _id: new ObjectId(theUser.id) });
const currentUser = await users().findOne({
_id: new ObjectId(theUser.id),
});
if (!currentUser) {
// internal server error as you were authenticated but unknown
res.status(500).end();
Expand Down Expand Up @@ -308,7 +315,10 @@ export class AuthController {
// prefix the API key with the user ID to make it easier to find users by API key in auth
const randomPart = await getRandomString(32);
const apiKey = `${theUser.id.toString()}${randomPart}`;
await users().updateOne({ _id: new ObjectId(theUser.id) }, { $set: { apiKey }});
await users().updateOne(
{ _id: new ObjectId(theUser.id) },
{ $set: { apiKey } },
);
res.status(201).json(apiKey).end();
}
},
Expand Down Expand Up @@ -371,7 +381,9 @@ export class AuthController {

try {
const userQuery = { _id: new ObjectId(user.id) };
const currentUser = await users().findOne(userQuery);
const currentUser = (await users().findOne(
userQuery,
)) as IUser;
if (!currentUser) {
return res.sendStatus(403);
}
Expand All @@ -391,7 +403,7 @@ export class AuthController {
await users().updateOne(userQuery, {
$set: {
password: hashedPassword,
}
},
});

return res
Expand Down Expand Up @@ -516,7 +528,9 @@ export class AuthController {
}

// Check if token exists
const passwordResetToken = await tokens().findOne({ userId });
const passwordResetToken = await tokens().findOne({
userId,
});
if (!passwordResetToken) {
throw new Error(
'Invalid or expired password reset token',
Expand All @@ -541,18 +555,19 @@ export class AuthController {
{ $set: { password: hashedPassword } },
{ returnDocument: 'after' },
);

if (!result.ok) {
logger.error(`error resetting password for user ${userId}`);
logger.error(result.lastErrorObject);
logger.error(
`error resetting password for user ${userId}`,
result.lastErrorObject,
);
throw new Error(
'Something went wrong, please try again later',
);
}

// Send confirmation email to the user
const user = result.value;

const user = result.value as IUser;

await this.emailClient.send(
[user.email],
Expand Down Expand Up @@ -592,10 +607,10 @@ export class AuthController {
email: req.body.email,
roles: req.body.roles,
...(removeGoogleID !== true && { googleID: '42' }),
});
const user = await users().findOne({
} as IUser);
const user = (await users().findOne({
_id: result.insertedId,
});
})) as IUser;
req.login(user, (err: Error) => {
if (!err) {
res.json(user);
Expand Down Expand Up @@ -623,8 +638,10 @@ export class AuthController {

passport.deserializeUser((id: string, done: any) => {
// Find the user based on its id in the cookie.
users().findOne({ _id: new ObjectId(id) })
.then((user) => {
users()
.findOne({ _id: new ObjectId(id) })
.then((u) => {
const user = u as IUser;
// Invalidate session when user cannot be found.
// This means an cookie pointing to an invalid user was sent to us.
// Cf. https://github.com/jaredhanson/passport/issues/6#issuecomment-4857287
Expand Down Expand Up @@ -668,9 +685,11 @@ export class AuthController {
roles: [],
newsletterAccepted:
req.body.newsletterAccepted || false,
});
} as unknown as IUser);

const newUser = await users().findOne({ _id: result.insertedId });
const newUser = (await users().findOne({
_id: result.insertedId,
})) as IUser;

// Send welcome email
await this.emailClient.send(
Expand All @@ -691,7 +710,7 @@ export class AuthController {
<p>The G.h Team</p>`,
);

done(null, newUser.publicFields());
done(null, userPublicFields(newUser));
} catch (error) {
done(error);
}
Expand All @@ -708,7 +727,9 @@ export class AuthController {
},
async (email, password, done) => {
try {
const user = await users().findOne({ email });
const user = (await users().findOne({
email,
})) as IUser;
if (!user) {
return done(null, false, {
message: 'Wrong username or password',
Expand Down Expand Up @@ -767,8 +788,10 @@ export class AuthController {
roles: [],
picture: picture,
newsletterAccepted: isNewsletterAccepted,
});
user = await users().findOne({ _id: result.insertedId });
} as unknown as IUser);
user = (await users().findOne({
_id: result.insertedId,
})) as IUser;

try {
// Send welcome email
Expand Down Expand Up @@ -801,8 +824,8 @@ export class AuthController {
);
const update = await users().findOneAndUpdate(
{ googleID: googleProfile.id },
{ $set: { picture }},
{ returnDocument: 'after'}
{ $set: { picture } },
{ returnDocument: 'after' },
);
user = update.value;
}
Expand All @@ -816,7 +839,7 @@ export class AuthController {
const update = await users().findOneAndUpdate(
{ googleID: googleProfile.id },
{ $set: { newsletterAccepted: true } },
{ returnDocument: 'after' }
{ returnDocument: 'after' },
);
user = update.value;
}
Expand Down Expand Up @@ -863,8 +886,10 @@ export class AuthController {
roles: [],
// Do not care about names for bearer tokens, they are usually not humans.
name: '',
} as unknown as IUser);
user = await users().findOne({
_id: result.insertedId,
});
user = await users().findOne({ _id: result.insertedId });
}
return done(null, user);
} catch (e) {
Expand Down
59 changes: 40 additions & 19 deletions verification/curator-service/api/src/controllers/cases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import axios, { AxiosError } from 'axios';
import { logger } from '../util/logger';
import AWS from 'aws-sdk';
import crypto from 'crypto';
import { FindAndModifyWriteOpResultObject, ObjectId } from 'mongodb';
import { ModifyResult, ObjectId } from 'mongodb';

// Don't set client-side timeouts for requests to the data service.
// TODO: Make this more fine-grained once we fix
Expand Down Expand Up @@ -45,9 +45,12 @@ export default class CasesController {
);
}
res.status(response.status).json(response.data);
} catch (err) {
logger.error(`Exception thrown by axios accessing URL: ${query}`);
logger.error(err);
} catch (e) {
const err = e as AxiosError;
logger.error(
`Exception thrown by axios accessing URL: ${query}`,
err,
);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
return;
Expand All @@ -56,9 +59,14 @@ export default class CasesController {
}
};

private logOutcomeOfAppendingDownloadToUser(userId: string, result: FindAndModifyWriteOpResultObject<any>) {
private logOutcomeOfAppendingDownloadToUser(
userId: string,
result: ModifyResult<IUser>,
) {
if (!result.ok) {
logger.error(`Error adding download to user: ${result.lastErrorObject}`);
logger.error(
`Error adding download to user: ${result.lastErrorObject}`,
);
} else {
logger.info(`Added download to user ${userId}`);
}
Expand Down Expand Up @@ -337,7 +345,8 @@ export default class CasesController {
this.dataServerURL + '/api' + req.url,
);
res.status(response.status).json(response.data);
} catch (err) {
} catch (e) {
const err = e as AxiosError;
logger.error(err);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
Expand All @@ -354,7 +363,8 @@ export default class CasesController {
this.dataServerURL + '/api' + req.url,
);
res.status(response.status).json(response.data);
} catch (err) {
} catch (e) {
const err = e as AxiosError;
logger.error(err);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
Expand All @@ -371,7 +381,8 @@ export default class CasesController {
this.dataServerURL + '/api' + req.url,
);
res.status(response.status).json(response.data);
} catch (err) {
} catch (e) {
const err = e as AxiosError;
logger.error(err);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
Expand All @@ -394,7 +405,8 @@ export default class CasesController {
{ data: req.body },
);
res.status(response.status).end();
} catch (err) {
} catch (e) {
const err = e as AxiosError;
logger.error(err);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
Expand All @@ -411,7 +423,8 @@ export default class CasesController {
this.dataServerURL + '/api' + req.url,
);
res.status(response.status).end();
} catch (err) {
} catch (e) {
const err = e as AxiosError;
logger.error(err);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
Expand All @@ -432,7 +445,8 @@ export default class CasesController {
},
);
res.status(response.status).json(response.data);
} catch (err) {
} catch (e) {
const err = e as AxiosError;
logger.error(err);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
Expand All @@ -455,7 +469,8 @@ export default class CasesController {
},
);
res.status(response.status).json(response.data);
} catch (err) {
} catch (e) {
const err = e as AxiosError;
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
return;
Expand All @@ -479,7 +494,8 @@ export default class CasesController {
);
res.status(upsertResponse.status).send(upsertResponse.data);
return;
} catch (err) {
} catch (e) {
const err = e as AxiosError;
logger.error(err);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
Expand Down Expand Up @@ -508,7 +524,8 @@ export default class CasesController {
numModified: updateResponse.data.numModified,
});
return;
} catch (err) {
} catch (e) {
const err = e as AxiosError;
logger.error(err);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
Expand Down Expand Up @@ -537,7 +554,8 @@ export default class CasesController {
numModified: updateResponse.data.numModified,
});
return;
} catch (err) {
} catch (e) {
const err = e as AxiosError;
logger.error(err);
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
Expand All @@ -562,7 +580,8 @@ export default class CasesController {
},
);
res.status(response.status).end();
} catch (err) {
} catch (e) {
const err = e as AxiosError;
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
return;
Expand All @@ -586,7 +605,8 @@ export default class CasesController {
},
);
res.status(response.status).json(response.data);
} catch (err) {
} catch (e) {
const err = e as AxiosError;
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
return;
Expand All @@ -609,7 +629,8 @@ export default class CasesController {
this.dataServerURL + '/api' + req.url,
);
res.status(response.status).json(response.data);
} catch (err) {
} catch (e) {
const err = e as AxiosError;
if (err.response?.status && err.response?.data) {
res.status(err.response.status).send(err.response.data);
return;
Expand Down
Loading

0 comments on commit 1f44ac1

Please sign in to comment.