28 lines
1.2 KiB
TypeScript
28 lines
1.2 KiB
TypeScript
import { api, type PasswordChangeMode } from '../api'
|
|
|
|
export function requiresCurrentPassword(mode: PasswordChangeMode | null | undefined): boolean {
|
|
return mode === 'current_required'
|
|
}
|
|
|
|
export function isForcedPasswordMode(mode: PasswordChangeMode | null | undefined): mode is PasswordChangeMode {
|
|
return mode === 'grant_setup' || mode === 'current_required' || mode === 'one_time_password'
|
|
}
|
|
|
|
export function ForcedPasswordModeSection({ mode, current, onCurrentChange }: { mode: PasswordChangeMode | null; current: string; onCurrentChange: (value: string) => void }) {
|
|
if (mode === 'current_required') {
|
|
return <>
|
|
<label className="lg-label" htmlFor="forced-current">当前密码</label>
|
|
<input id="forced-current" className="lg-input" type="password" value={current}
|
|
onChange={e => onCurrentChange(e.target.value)} autoComplete="current-password" />
|
|
</>
|
|
}
|
|
if (mode === 'grant_setup' || mode === 'one_time_password') {
|
|
return <p className="lg-hint">当前为受限设密会话,此次无需输入当前密码。</p>
|
|
}
|
|
return null
|
|
}
|
|
|
|
export async function submitForcedPassword(mode: PasswordChangeMode, current: string, next: string) {
|
|
await api.changePassword(requiresCurrentPassword(mode) ? current : '', next)
|
|
}
|