@@ -85,6 +85,7 @@ import {
8585 UpdateUserNameRequest ,
8686 UpdateUserProfileRequest ,
8787 UpdateUserProfileResponse ,
88+ VerifyEmailRequest ,
8889} from "@monkeytype/contracts/users" ;
8990import { MILLISECONDS_IN_DAY } from "@monkeytype/util/date-and-time" ;
9091import { MonkeyRequest } from "../types" ;
@@ -241,9 +242,30 @@ export async function sendVerificationEmail(
241242 return new MonkeyResponse ( "Email sent" , null ) ;
242243}
243244
244- export async function verifyEmail ( req : MonkeyRequest ) : Promise < MonkeyResponse > {
245- const { uid, email, emailVerified } = req . ctx . decodedToken ;
246- await UserDAL . updateEmail ( uid , email , emailVerified ) ;
245+ export async function verifyEmail (
246+ req : MonkeyRequest < undefined , VerifyEmailRequest >
247+ ) : Promise < MonkeyResponse > {
248+ const { email } = req . body ;
249+
250+ const { data : firebaseUser } = await tryCatch (
251+ FirebaseAdmin ( ) . auth ( ) . getUserByEmail ( email )
252+ ) ;
253+
254+ if ( firebaseUser === undefined || firebaseUser === null ) {
255+ throw new MonkeyError ( 404 , "not found" , "verify email" ) ;
256+ }
257+
258+ await UserDAL . updateEmail (
259+ firebaseUser . uid ,
260+ email ,
261+ firebaseUser . emailVerified
262+ ) ;
263+
264+ void addImportantLog (
265+ "user_verify_email" ,
266+ `emailVerified changed to ${ firebaseUser . emailVerified } for email ${ email } ` ,
267+ firebaseUser . uid
268+ ) ;
247269
248270 return new MonkeyResponse ( "emailVerify updated." , null ) ;
249271}
@@ -616,13 +638,13 @@ export async function getUser(req: MonkeyRequest): Promise<GetUserResponse> {
616638 // soft-migrate user.emailVerified for existing users, update status if it has changed
617639 const { email, emailVerified } = req . ctx . decodedToken ;
618640 if ( emailVerified !== undefined && emailVerified !== userInfo . emailVerified ) {
641+ await UserDAL . updateEmail ( uid , email , emailVerified ) ;
642+ userInfo . emailVerified = emailVerified ;
619643 void addImportantLog (
620644 "user_verify_email" ,
621- `emailVerified changed to ${ emailVerified } for email ${ email } ` ,
645+ `soft-migrate emailVerified changed to ${ emailVerified } for email ${ email } ` ,
622646 uid
623647 ) ;
624- await UserDAL . updateEmail ( uid , email , emailVerified ) ;
625- userInfo . emailVerified = emailVerified ;
626648 }
627649
628650 const userData : User = {
0 commit comments