import React, { useContext, useRef } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router'; import ApplyToBody from '../utilities/apply-to-body'; import { TokenContext } from '../utilities/token-provider'; const Reset = props => { //params const [params, setParams] = useSearchParams(); //the URLSearchParams API //history const navigate = useNavigate(); //context const authTokens = useContext(TokenContext); //misplaced? if (authTokens.accessToken || !params.has('email') || !params.has('token')) { navigate("/"); } //refs const passwordRef = useRef(); const retypeRef = useRef(); //render the thing return ( <>

Reset Password

{ evt.preventDefault(); const [err, redirect] = await update(passwordRef.current.value, retypeRef.current.value, params); if (err) { alert(err); return; } alert('Details updated'); //TODO: replace with a message from the auth server //redirect if (redirect) { navigate("/"); } }}>
Return Home
); }; const update = async (password, retype, params) => { if (password != retype) { return ['Passwords do not match']; } if (password && password.length < 8) { return ['Password is too short']; } const result = await fetch(`${process.env.AUTH_URI}/auth/reset?email=${params.get('email')}&token=${params.get('token')}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ password: password ? password : null, }) }); if (!result.ok) { return [`${await result.status}: ${await result.text()}`]; } else { return [null, true]; } } export default Reset;