Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/updaters/account-updaters.js
// @flow | // @flow | ||||
import { getRustAPI } from 'rust-node-addon'; | |||||
import bcrypt from 'twin-bcrypt'; | import bcrypt from 'twin-bcrypt'; | ||||
import type { | import type { | ||||
ResetPasswordRequest, | ResetPasswordRequest, | ||||
UpdatePasswordRequest, | UpdatePasswordRequest, | ||||
UpdateUserSettingsRequest, | UpdateUserSettingsRequest, | ||||
LogInResponse, | LogInResponse, | ||||
} from 'lib/types/account-types.js'; | } from 'lib/types/account-types.js'; | ||||
import { updateTypes } from 'lib/types/update-types.js'; | import { updateTypes } from 'lib/types/update-types.js'; | ||||
import type { PasswordUpdate } from 'lib/types/user-types.js'; | import type { PasswordUpdate } from 'lib/types/user-types.js'; | ||||
import { ServerError } from 'lib/utils/errors.js'; | import { ServerError } from 'lib/utils/errors.js'; | ||||
import { createUpdates } from '../creators/update-creator.js'; | import { createUpdates } from '../creators/update-creator.js'; | ||||
import { dbQuery, SQL } from '../database/database.js'; | import { dbQuery, SQL } from '../database/database.js'; | ||||
import { handleAsyncPromise } from '../responders/handlers.js'; | |||||
import type { Viewer } from '../session/viewer.js'; | import type { Viewer } from '../session/viewer.js'; | ||||
async function accountUpdater( | async function accountUpdater( | ||||
viewer: Viewer, | viewer: Viewer, | ||||
update: PasswordUpdate, | update: PasswordUpdate, | ||||
): Promise<void> { | ): Promise<void> { | ||||
if (!viewer.loggedIn) { | if (!viewer.loggedIn) { | ||||
throw new ServerError('not_logged_in'); | throw new ServerError('not_logged_in'); | ||||
Show All 18 Lines | if (!bcrypt.compareSync(update.currentPassword, verifyRow.hash)) { | ||||
throw new ServerError('invalid_credentials'); | throw new ServerError('invalid_credentials'); | ||||
} | } | ||||
const changedFields = { hash: bcrypt.hashSync(newPassword) }; | const changedFields = { hash: bcrypt.hashSync(newPassword) }; | ||||
const saveQuery = SQL` | const saveQuery = SQL` | ||||
UPDATE users SET ${changedFields} WHERE id = ${viewer.userID} | UPDATE users SET ${changedFields} WHERE id = ${viewer.userID} | ||||
`; | `; | ||||
await dbQuery(saveQuery); | await dbQuery(saveQuery); | ||||
handleAsyncPromise( | |||||
(async () => { | |||||
const rustApi = await getRustAPI(); | |||||
await rustApi.updateUser(viewer.userID, newPassword); | |||||
})(), | |||||
); | |||||
const updateDatas = [ | const updateDatas = [ | ||||
{ | { | ||||
type: updateTypes.UPDATE_CURRENT_USER, | type: updateTypes.UPDATE_CURRENT_USER, | ||||
userID: viewer.userID, | userID: viewer.userID, | ||||
time: Date.now(), | time: Date.now(), | ||||
}, | }, | ||||
]; | ]; | ||||
▲ Show 20 Lines • Show All 53 Lines • Show Last 20 Lines |