mirror of
https://github.com/rjNemo/go-pass-gen
synced 2026-06-06 02:46:40 +00:00
45 lines
1 KiB
Go
45 lines
1 KiB
Go
package api
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
|
|
"github.com/go-chi/render"
|
|
|
|
"github.com/rjNemo/go-pass-gen/passgen"
|
|
)
|
|
|
|
func (s Server) HandleNewPassword(w http.ResponseWriter, r *http.Request) {
|
|
params := &PasswordParams{}
|
|
if err := render.Bind(r, params); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
opts := passgen.Options{Length: params.Length, WithNumbers: params.WithNumbers}
|
|
password := passgen.NewPasswordGenerator(opts.SetDefaults()).NewPassword()
|
|
|
|
render.Status(r, http.StatusAccepted)
|
|
err := render.Render(w, r, &PasswordResponse{Password: password})
|
|
if err != nil {
|
|
log.Fatalf("error: %q", err)
|
|
}
|
|
}
|
|
|
|
type PasswordParams struct {
|
|
Length int `json:"length"`
|
|
WithNumbers bool `json:"with_numbers"`
|
|
}
|
|
|
|
func (p PasswordParams) Bind(*http.Request) error {
|
|
return nil
|
|
}
|
|
|
|
type PasswordResponse struct {
|
|
Success bool `json:"success"`
|
|
Error *string `json:"error"`
|
|
Password string `json:"password"`
|
|
}
|
|
|
|
func (resp *PasswordResponse) Render(http.ResponseWriter, *http.Request) error {
|
|
resp.Success = true
|
|
return nil
|
|
}
|