You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

114 lines
2.9 KiB

package gateway
import (
"fmt"
"net/http"
"git.chrishayward.xyz/x/users/proto"
)
func Register(client proto.UsersClient) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
password, passwordAgain :=
r.URL.Query().Get("password"),
r.URL.Query().Get("password_again")
_, err := client.Register(r.Context(), &proto.RegisterRequest{
Form: &proto.UserForm{
Email: r.URL.Query().Get("email"),
Password: &password,
PasswordAgain: &passwordAgain,
},
})
if err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(err.Error()))
}
w.WriteHeader(http.StatusOK)
})
}
func Login(client proto.UsersClient) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
password, passwordAgain :=
r.URL.Query().Get("password"),
r.URL.Query().Get("password_again")
res, err := client.Login(r.Context(), &proto.LoginRequest{
Form: &proto.UserForm{
Email: r.URL.Query().Get("email"),
Password: &password,
PasswordAgain: &passwordAgain,
},
})
if err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(err.Error()))
}
w.WriteHeader(http.StatusOK)
w.Write([]byte(res.Token.Token))
})
}
func Authorize(client proto.UsersClient, serverSecret *string) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
res, err := client.Authorize(r.Context(), &proto.AuthorizeRequest{
Secret: *serverSecret,
Token: &proto.UserToken{
Token: r.URL.Query().Get("token"),
},
})
if err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(err.Error()))
}
w.WriteHeader(http.StatusOK)
w.Write([]byte(fmt.Sprintf("%d", res.User.Id)))
})
}
func ResetPassword(client proto.UsersClient, port *int) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
res, err := client.ResetPassword(r.Context(), &proto.ResetPasswordRequest{
Form: &proto.UserForm{
Email: r.URL.Query().Get("email"),
},
})
if err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(err.Error()))
}
w.WriteHeader(http.StatusOK)
w.Write([]byte(fmt.Sprintf(
"Please follow this link to update your password: http://localhost:%d/change_password?token=%s\n",
*port, res.Token.Token)))
})
}
func ChangePassword(client proto.UsersClient) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
password, passwordAgain :=
r.URL.Query().Get("password"),
r.URL.Query().Get("password_again")
_, err := client.ChangePassword(r.Context(), &proto.ChangePasswordRequest{
Form: &proto.UserForm{
Email: r.URL.Query().Get("email"),
Password: &password,
PasswordAgain: &passwordAgain,
},
})
if err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(err.Error()))
}
w.WriteHeader(http.StatusOK)
})
}