Files
2026-07-26 18:25:37 +09:00

42 lines
1.1 KiB
JavaScript

import { UserProfiles, PasswordResetRequests } from "../../../models/index.js";
import define from "../define.js";
import { hashPassword } from "../../../misc/password.js";
export const meta = {
tags: [
"reset password"
],
requireCredential: false,
description: "Complete the password reset that was previously requested.",
errors: {}
};
export const paramDef = {
type: "object",
properties: {
token: {
type: "string"
},
password: {
type: "string"
}
},
required: [
"token",
"password"
]
};
export default define(meta, paramDef, async (ps, user)=>{
const req = await PasswordResetRequests.findOneByOrFail({
token: ps.token
});
// 発行してから30分以上経過していたら無効
if (Date.now() - req.createdAt.getTime() > 1000 * 60 * 30) {
throw new Error(); // TODO
}
// Generate hash of password
const hash = await hashPassword(ps.password);
await UserProfiles.update(req.userId, {
password: hash
});
PasswordResetRequests.delete(req.id);
});