implement reset nkode

This commit is contained in:
2024-09-27 13:51:45 -05:00
parent 1b133edd78
commit 57b5308ca9
17 changed files with 489 additions and 88 deletions

View File

@@ -6,6 +6,7 @@ import (
"github.com/google/uuid"
"log"
"net/http"
"strings"
)
type NKodeHandler struct {
@@ -13,23 +14,24 @@ type NKodeHandler struct {
}
const (
CreateNewCustomer = "/create-new-customer"
GenerateSignupInterface = "/generate-signup-interface"
SetNKode = "/set-nkode"
ConfirmNKode = "/confirm-nkode"
GetLoginInterface = "/get-login-interface"
Login = "/login"
RenewAttributes = "/renew-attributes"
RandomSvgInterface = "/random-svg-interface"
RefreshToken = "/refresh-token"
CreateNewCustomer = "/create-new-customer"
GenerateSignupResetInterface = "/generate-signup-reset-interface"
SetNKode = "/set-nkode"
ConfirmNKode = "/confirm-nkode"
GetLoginInterface = "/get-login-interface"
Login = "/login"
RenewAttributes = "/renew-attributes"
RandomSvgInterface = "/random-svg-interface"
RefreshToken = "/refresh-token"
ResetNKode = "/reset-nkode"
)
func (h *NKodeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
switch r.URL.Path {
case CreateNewCustomer:
h.CreateNewCustomerHandler(w, r)
case GenerateSignupInterface:
h.GenerateSignupInterfaceHandler(w, r)
case GenerateSignupResetInterface:
h.GenerateSignupResetInterfaceHandler(w, r)
case SetNKode:
h.SetNKodeHandler(w, r)
case ConfirmNKode:
@@ -44,6 +46,8 @@ func (h *NKodeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
h.RandomSvgInterfaceHandler(w, r)
case RefreshToken:
h.RefreshTokenHandler(w, r)
case ResetNKode:
h.ResetNKode(w, r)
default:
w.WriteHeader(http.StatusNotFound)
_, err := w.Write([]byte("404 not found"))
@@ -88,23 +92,22 @@ func (h *NKodeHandler) CreateNewCustomerHandler(w http.ResponseWriter, r *http.R
w.WriteHeader(http.StatusOK)
}
func (h *NKodeHandler) GenerateSignupInterfaceHandler(w http.ResponseWriter, r *http.Request) {
func (h *NKodeHandler) GenerateSignupResetInterfaceHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
methodNotAllowed(w)
return
}
log.Print("signup interface")
var signupPost GenerateSignupInterfacePost
err := decodeJson(w, r, &signupPost)
var signupResetPost GenerateSignupRestInterfacePost
err := decodeJson(w, r, &signupResetPost)
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
return
}
kp := KeypadDimension{
AttrsPerKey: signupPost.AttrsPerKey,
NumbOfKeys: signupPost.NumbOfKeys,
AttrsPerKey: signupResetPost.AttrsPerKey,
NumbOfKeys: signupResetPost.NumbOfKeys,
}
err = kp.IsValidKeypadDimension()
if err != nil {
@@ -112,14 +115,19 @@ func (h *NKodeHandler) GenerateSignupInterfaceHandler(w http.ResponseWriter, r *
log.Println(err)
return
}
customerId, err := uuid.Parse(signupPost.CustomerId)
customerId, err := uuid.Parse(signupResetPost.CustomerId)
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
return
}
userEmail, err := ParseEmail(signupPost.UserEmail)
resp, err := h.Api.GenerateSignupInterface(userEmail, CustomerId(customerId), kp)
userEmail, err := ParseEmail(signupResetPost.UserEmail)
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
return
}
resp, err := h.Api.GenerateSignupResetInterface(userEmail, CustomerId(customerId), kp, signupResetPost.Reset)
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
@@ -370,30 +378,29 @@ func (h *NKodeHandler) RandomSvgInterfaceHandler(w http.ResponseWriter, r *http.
}
func (h *NKodeHandler) RefreshTokenHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
if r.Method != http.MethodGet {
methodNotAllowed(w)
}
var refreshTokenPost RefreshTokenPost
err := decodeJson(w, r, &refreshTokenPost)
refreshToken, err := getBearerToken(r)
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
return
}
customerId, err := uuid.Parse(refreshTokenPost.CustomerId)
refreshClaims, err := ParseRefreshToken(refreshToken)
customerId, err := uuid.Parse(refreshClaims.Issuer)
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
return
}
userEmail, err := ParseEmail(refreshTokenPost.UserEmail)
userEmail, err := ParseEmail(refreshClaims.Subject)
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
return
}
accessToken, err := h.Api.RefreshToken(userEmail, CustomerId(customerId), refreshTokenPost.RefreshToken)
accessToken, err := h.Api.RefreshToken(userEmail, CustomerId(customerId), refreshToken)
if err != nil {
internalServerErrorHandler(w)
@@ -417,6 +424,38 @@ func (h *NKodeHandler) RefreshTokenHandler(w http.ResponseWriter, r *http.Reques
w.WriteHeader(http.StatusOK)
}
func (h *NKodeHandler) ResetNKode(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
methodNotAllowed(w)
}
var resetNKodePost ResetNKodePost
err := decodeJson(w, r, &resetNKodePost)
if err != nil {
internalServerErrorHandler(w)
log.Println("error decoding reset nkode post: ", err)
return
}
customerId, err := uuid.Parse(resetNKodePost.CustomerId)
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
return
}
userEmail, err := ParseEmail(resetNKodePost.UserEmail)
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
return
}
err = h.Api.ResetNKode(userEmail, CustomerId(customerId))
if err != nil {
internalServerErrorHandler(w)
log.Println(err)
return
}
w.WriteHeader(http.StatusOK)
}
func decodeJson(w http.ResponseWriter, r *http.Request, post any) error {
if r.Body == nil {
invalidJson(w)
@@ -449,3 +488,13 @@ func invalidJson(w http.ResponseWriter) {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("invalid json"))
}
func getBearerToken(r *http.Request) (string, error) {
authHeader := r.Header.Get("Authorization")
// Check if the Authorization header is present and starts with "Bearer "
if authHeader == "" || !strings.HasPrefix(authHeader, "Bearer ") {
return "", errors.New("authorization header missing or invalid")
}
token := strings.TrimPrefix(authHeader, "Bearer ")
return token, nil
}