Skip to content
Snippets Groups Projects
Commit 1a205c51 authored by meskio's avatar meskio :tent:
Browse files

Be able to set login on password reset

parent 6f236cb0
No related branches found
No related tags found
No related merge requests found
...@@ -130,7 +130,7 @@ func (a *api) SendPasswordReset(w http.ResponseWriter, req *http.Request) { ...@@ -130,7 +130,7 @@ func (a *api) SendPasswordReset(w http.ResponseWriter, req *http.Request) {
func (a *api) ValidatePasswordReset(w http.ResponseWriter, req *http.Request) { func (a *api) ValidatePasswordReset(w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req) vars := mux.Vars(req)
token := vars["token"] token := vars["token"]
err := a.db.ValidPasswordReset(token) passwordReset, err := a.db.GetPasswordReset(token)
if err != nil { if err != nil {
log.Printf("Can't get password reset %s: %v", token, err) log.Printf("Can't get password reset %s: %v", token, err)
if errors.Is(err, db.ErrorNotFound) { if errors.Is(err, db.ErrorNotFound) {
...@@ -141,8 +141,14 @@ func (a *api) ValidatePasswordReset(w http.ResponseWriter, req *http.Request) { ...@@ -141,8 +141,14 @@ func (a *api) ValidatePasswordReset(w http.ResponseWriter, req *http.Request) {
return return
} }
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK) 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) { func (a *api) PasswordReset(w http.ResponseWriter, req *http.Request) {
......
...@@ -156,13 +156,8 @@ func (d DB) NewPasswordReset(email string) (member Member, token string, err err ...@@ -156,13 +156,8 @@ func (d DB) NewPasswordReset(email string) (member Member, token string, err err
return return
} }
func (d *DB) ValidPasswordReset(token string) error {
_, err := d.getPasswordReset(token)
return err
}
func (d *DB) ResetPassword(token, password, login string) error { func (d *DB) ResetPassword(token, password, login string) error {
passwordReset, err := d.getPasswordReset(token) passwordReset, err := d.GetPasswordReset(token)
if err != nil { if err != nil {
return err return err
} }
...@@ -186,7 +181,7 @@ func (d *DB) ResetPassword(token, password, login string) error { ...@@ -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). err = d.db.Where("token = ?", token).
Preload("Member"). Preload("Member").
First(&passwordReset).Error First(&passwordReset).Error
......
...@@ -33,7 +33,7 @@ func (a *api) AddMember(w http.ResponseWriter, req *http.Request) { ...@@ -33,7 +33,7 @@ func (a *api) AddMember(w http.ResponseWriter, req *http.Request) {
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
return return
} }
err = a.mail.sendNewMember(memberReq.Member, "/nreset/"+token) err = a.mail.sendNewMember(memberReq.Member, "/reset/"+token)
if err != nil { if err != nil {
log.Printf("Can't send the pass/login reset email to %s: %v", memberReq.Email, err) log.Printf("Can't send the pass/login reset email to %s: %v", memberReq.Email, err)
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
......
...@@ -87,9 +87,6 @@ function UnlogedPanel(props) { ...@@ -87,9 +87,6 @@ function UnlogedPanel(props) {
<BrowserRouter> <BrowserRouter>
<Switch> <Switch>
<Route path="/reset/:token" component={ResetPassword} /> <Route path="/reset/:token" component={ResetPassword} />
<Route path="/nreset/:token">
<ResetPassword login />
</Route>
<Route path="/reset/" component={ResetRequest} /> <Route path="/reset/" component={ResetRequest} />
<Route path="/"> <Route path="/">
<SignIn onLogin={props.onLogin} /> <SignIn onLogin={props.onLogin} />
......
...@@ -5,11 +5,12 @@ import PasswordForm from "./PasswordForm"; ...@@ -5,11 +5,12 @@ import PasswordForm from "./PasswordForm";
import Sender from "./Sender"; import Sender from "./Sender";
import { url } from "./util"; import { url } from "./util";
function ResetPassword(props) { function ResetPassword() {
const [password, setPassword] = useState(""); const [password, setPassword] = useState("");
const [login, setLogin] = useState(""); const [login, setLogin] = useState("");
const [validPass, setValidPass] = useState(false); const [validPass, setValidPass] = useState(false);
const [validToken, setValidToken] = useState("loading"); const [validToken, setValidToken] = useState("loading");
const [needsLogin, setNeedsLogin] = useState(false);
const [success, setSuccess] = useState(false); const [success, setSuccess] = useState(false);
const { token } = useParams(); const { token } = useParams();
...@@ -17,7 +18,11 @@ function ResetPassword(props) { ...@@ -17,7 +18,11 @@ function ResetPassword(props) {
if (validToken === "loading") { if (validToken === "loading") {
fetch(url("/api/reset/" + token)).then((response) => { fetch(url("/api/reset/" + token)).then((response) => {
setValidToken(response.ok); setValidToken(response.ok);
}); return response.json();
})
.then((member) => {
setNeedsLogin(!member.login);
});
} }
}); });
...@@ -50,11 +55,11 @@ function ResetPassword(props) { ...@@ -50,11 +55,11 @@ function ResetPassword(props) {
); );
} }
const body = props.login ? { password, login } : { password }; const body = needsLogin ? { password, login } : { password };
const disabled = !validPass || (props.login && !login); const disabled = !validPass || (needsLogin && !login);
let head = <h2>Cambio de contraseña</h2>; let head = <h2>Cambio de contraseña</h2>;
if (props.login) { if (needsLogin) {
head = ( head = (
<div> <div>
<h2>Configura tu nombre de acceso y contraseña</h2> <h2>Configura tu nombre de acceso y contraseña</h2>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment