| 531 | } |
| 532 | |
| 533 | requestEmailUpdate(id, email) { |
| 534 | // check if the email is already in use |
| 535 | return this.emailExists(email) |
| 536 | .then((exists) => { |
| 537 | if (exists) { |
| 538 | return new Promise((resolve, reject) => reject(new Error(409))); |
| 539 | } |
| 540 | |
| 541 | return db.User.findByPk(id); |
| 542 | }) |
| 543 | .then((userData) => { |
| 544 | const tokenPayload = { |
| 545 | id: userData.id, |
| 546 | email: userData.email, |
| 547 | newEmail: email, |
| 548 | }; |
| 549 | |
| 550 | const token = jwt.sign(tokenPayload, settings.encryptionKey, { |
| 551 | expiresIn: "3h", |
| 552 | }); |
| 553 | |
| 554 | return mail.emailUpdate({ |
| 555 | email, |
| 556 | updateUrl: `${settings.client}/user/profile?email=${token}`, |
| 557 | }); |
| 558 | }) |
| 559 | .catch((error) => { |
| 560 | return new Promise((resolve, reject) => reject(error)); |
| 561 | }); |
| 562 | } |
| 563 | |
| 564 | updateEmail(id, token) { |
| 565 | let decodedToken; |