diff --git a/api/auth.go b/api/auth.go index 4f880373eeeb965b9019760a41ffadbc9436ca56..d6eae9b3d2246c543c306c514ff3e19f8c6be080 100644 --- a/api/auth.go +++ b/api/auth.go @@ -130,7 +130,7 @@ func (a *api) SendPasswordReset(w http.ResponseWriter, req *http.Request) { func (a *api) ValidatePasswordReset(w http.ResponseWriter, req *http.Request) { vars := mux.Vars(req) token := vars["token"] - err := a.db.ValidPasswordReset(token) + passwordReset, err := a.db.GetPasswordReset(token) if err != nil { log.Printf("Can't get password reset %s: %v", token, err) if errors.Is(err, db.ErrorNotFound) { @@ -141,8 +141,14 @@ func (a *api) ValidatePasswordReset(w http.ResponseWriter, req *http.Request) { return } + w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) - w.Write([]byte("Valid token")) + err = json.NewEncoder(w).Encode(*passwordReset.Member) + if err != nil { + log.Printf("Can't encode member: %v", err) + w.WriteHeader(http.StatusInternalServerError) + return + } } func (a *api) PasswordReset(w http.ResponseWriter, req *http.Request) { diff --git a/api/db/member.go b/api/db/member.go index 7d11ae886aceb379be333de44a77df4a3f0350c4..4b86dbb088d439f219df96b4fed2e0c0fa8bcfe9 100644 --- a/api/db/member.go +++ b/api/db/member.go @@ -156,13 +156,8 @@ func (d DB) NewPasswordReset(email string) (member Member, token string, err err return } -func (d *DB) ValidPasswordReset(token string) error { - _, err := d.getPasswordReset(token) - return err -} - func (d *DB) ResetPassword(token, password, login string) error { - passwordReset, err := d.getPasswordReset(token) + passwordReset, err := d.GetPasswordReset(token) if err != nil { return err } @@ -186,7 +181,7 @@ func (d *DB) ResetPassword(token, password, login string) error { }) } -func (d *DB) getPasswordReset(token string) (passwordReset PasswordReset, err error) { +func (d *DB) GetPasswordReset(token string) (passwordReset PasswordReset, err error) { err = d.db.Where("token = ?", token). Preload("Member"). First(&passwordReset).Error diff --git a/api/member.go b/api/member.go index ef81866931129b7598cd71f13a2edd9c125d1108..455f9ac9193a082f5b28c56ede5556b24802ab88 100644 --- a/api/member.go +++ b/api/member.go @@ -33,7 +33,7 @@ func (a *api) AddMember(w http.ResponseWriter, req *http.Request) { w.WriteHeader(http.StatusInternalServerError) return } - err = a.mail.sendNewMember(memberReq.Member, "/nreset/"+token) + err = a.mail.sendNewMember(memberReq.Member, "/reset/"+token) if err != nil { log.Printf("Can't send the pass/login reset email to %s: %v", memberReq.Email, err) w.WriteHeader(http.StatusInternalServerError) diff --git a/src/Panel.js b/src/Panel.js index 4f8480071e506cda93813c9a81337024e1b1392a..b1aaaea5e4cd5f639c929e9cfd62cfce7d481193 100644 --- a/src/Panel.js +++ b/src/Panel.js @@ -87,9 +87,6 @@ function UnlogedPanel(props) { <BrowserRouter> <Switch> <Route path="/reset/:token" component={ResetPassword} /> - <Route path="/nreset/:token"> - <ResetPassword login /> - </Route> <Route path="/reset/" component={ResetRequest} /> <Route path="/"> <SignIn onLogin={props.onLogin} /> diff --git a/src/ResetPassword.js b/src/ResetPassword.js index e5d6c16ca1b4463d8e4f3cee4e3d101eb251fad7..6efd8da05101286515991e237d4d4fc01e5a965d 100644 --- a/src/ResetPassword.js +++ b/src/ResetPassword.js @@ -5,11 +5,12 @@ import PasswordForm from "./PasswordForm"; import Sender from "./Sender"; import { url } from "./util"; -function ResetPassword(props) { +function ResetPassword() { const [password, setPassword] = useState(""); const [login, setLogin] = useState(""); const [validPass, setValidPass] = useState(false); const [validToken, setValidToken] = useState("loading"); + const [needsLogin, setNeedsLogin] = useState(false); const [success, setSuccess] = useState(false); const { token } = useParams(); @@ -17,7 +18,11 @@ function ResetPassword(props) { if (validToken === "loading") { fetch(url("/api/reset/" + token)).then((response) => { setValidToken(response.ok); - }); + return response.json(); + }) + .then((member) => { + setNeedsLogin(!member.login); + }); } }); @@ -50,11 +55,11 @@ function ResetPassword(props) { ); } - const body = props.login ? { password, login } : { password }; - const disabled = !validPass || (props.login && !login); + const body = needsLogin ? { password, login } : { password }; + const disabled = !validPass || (needsLogin && !login); let head = <h2>Cambio de contraseña</h2>; - if (props.login) { + if (needsLogin) { head = ( <div> <h2>Configura tu nombre de acceso y contraseña</h2>