From 5684387bb059a2cb4e5b6eace956057156a65e1b Mon Sep 17 00:00:00 2001 From: Donovan Date: Fri, 30 Aug 2024 18:37:22 -0500 Subject: [PATCH] Add default customer id --- core/model/customer.go | 2 +- core/model/customer_attributes.go | 2 +- core/model/keypad_dimension.go | 2 +- core/model/nkode_handler.go | 25 ++++++++++++++++++++----- core/model/nkode_policy.go | 2 +- core/model/test_helper.go | 2 +- core/model/type.go | 8 +++++--- core/model/user.go | 2 +- core/model/user_cipher_keys.go | 2 +- core/model/user_interface.go | 2 +- core/model/user_test.go | 2 +- core/nkode/customer_test.go | 24 ++++++++++++------------ core/nkode/db_accessor.go | 14 +++++++------- core/nkode/nkode_api.go | 5 ++++- core/nkode/nkode_api_test.go | 2 +- main.go | 21 +++++++++++++++++++-- 16 files changed, 77 insertions(+), 40 deletions(-) diff --git a/core/model/customer.go b/core/model/customer.go index c7bb4f4..df919d6 100644 --- a/core/model/customer.go +++ b/core/model/customer.go @@ -1,4 +1,4 @@ -package m +package model import ( "errors" diff --git a/core/model/customer_attributes.go b/core/model/customer_attributes.go index 7b24a81..586abe8 100644 --- a/core/model/customer_attributes.go +++ b/core/model/customer_attributes.go @@ -1,4 +1,4 @@ -package m +package model import ( "errors" diff --git a/core/model/keypad_dimension.go b/core/model/keypad_dimension.go index ab3f3a4..258451c 100644 --- a/core/model/keypad_dimension.go +++ b/core/model/keypad_dimension.go @@ -1,4 +1,4 @@ -package m +package model import "errors" diff --git a/core/model/nkode_handler.go b/core/model/nkode_handler.go index ebf344a..89c036d 100644 --- a/core/model/nkode_handler.go +++ b/core/model/nkode_handler.go @@ -1,4 +1,4 @@ -package m +package model import ( "encoding/json" @@ -13,8 +13,8 @@ type NKodeHandler struct { func (h *NKodeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { - case api.CreateNewCustomer: - h.CreateNewCustomerHandler(w, r) + //case api.CreateNewCustomer: + // h.CreateNewCustomerHandler(w, r) case api.GenerateSignupInterface: h.GenerateSignupInterfaceHandler(w, r) case api.SetNKode: @@ -46,7 +46,7 @@ func (h *NKodeHandler) CreateNewCustomerHandler(w http.ResponseWriter, r *http.R log.Fatal(err) return } - customerId, err := h.Api.CreateNewCustomer(customerPost.NKodePolicy) + customerId, err := h.Api.CreateNewCustomer(customerPost.NKodePolicy, nil) if err != nil { internalServerErrorHandler(w) log.Fatal(err) @@ -84,7 +84,17 @@ func (h *NKodeHandler) GenerateSignupInterfaceHandler(w http.ResponseWriter, r * log.Fatal(err) return } - resp, err := h.Api.GenerateSignupInterface(signupPost.CustomerId, KeypadDefault) + kp := KeypadDimension{ + AttrsPerKey: signupPost.AttrsPerKey, + NumbOfKeys: signupPost.NumbOfKeys, + } + err = kp.IsValidKeypadDimension() + if err != nil { + keypadSizeOutOfRange(w) + log.Fatal(err) + return + } + resp, err := h.Api.GenerateSignupInterface(signupPost.CustomerId, kp) if err != nil { internalServerErrorHandler(w) log.Fatal(err) @@ -270,3 +280,8 @@ func methodNotAllowed(w http.ResponseWriter) { w.WriteHeader(http.StatusMethodNotAllowed) w.Write([]byte("405 method not allowed")) } + +func keypadSizeOutOfRange(w http.ResponseWriter) { + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte("invalid keypad dimensions")) +} diff --git a/core/model/nkode_policy.go b/core/model/nkode_policy.go index 1f3030a..0aba02b 100644 --- a/core/model/nkode_policy.go +++ b/core/model/nkode_policy.go @@ -1,4 +1,4 @@ -package m +package model import ( "errors" diff --git a/core/model/test_helper.go b/core/model/test_helper.go index 1688c3d..5a5e361 100644 --- a/core/model/test_helper.go +++ b/core/model/test_helper.go @@ -1,4 +1,4 @@ -package m +package model import ( "errors" diff --git a/core/model/type.go b/core/model/type.go index 56a9c3a..cff60b4 100644 --- a/core/model/type.go +++ b/core/model/type.go @@ -1,4 +1,4 @@ -package m +package model import ( "github.com/google/uuid" @@ -13,7 +13,9 @@ type NewCustomerPost struct { } type GenerateSignupInterfacePost struct { - CustomerId CustomerId `json:"customer_id"` + CustomerId CustomerId `json:"customer_id"` + AttrsPerKey int `json:"attrs_per_key"` + NumbOfKeys int `json:"numb_of_keys"` } type SetNKodePost struct { @@ -66,7 +68,7 @@ type Username string type IdxInterface []int type NKodeAPIInterface interface { - CreateNewCustomer(NKodePolicy) (*CustomerId, error) + CreateNewCustomer(NKodePolicy, *CustomerId) (*CustomerId, error) GenerateSignupInterface(CustomerId, KeypadDimension) (*GenerateSignupInterfaceResp, error) SetNKode(Username, CustomerId, SessionId, KeySelection) (IdxInterface, error) ConfirmNKode(CustomerId, SessionId, KeySelection) error diff --git a/core/model/user.go b/core/model/user.go index f69282d..c569b93 100644 --- a/core/model/user.go +++ b/core/model/user.go @@ -1,4 +1,4 @@ -package m +package model import ( "go-nkode/util" diff --git a/core/model/user_cipher_keys.go b/core/model/user_cipher_keys.go index 2434bae..df63a21 100644 --- a/core/model/user_cipher_keys.go +++ b/core/model/user_cipher_keys.go @@ -1,4 +1,4 @@ -package m +package model import ( "crypto/sha256" diff --git a/core/model/user_interface.go b/core/model/user_interface.go index bcc46fc..1a078a5 100644 --- a/core/model/user_interface.go +++ b/core/model/user_interface.go @@ -1,4 +1,4 @@ -package m +package model import ( "errors" diff --git a/core/model/user_test.go b/core/model/user_test.go index bfeb51a..476ecba 100644 --- a/core/model/user_test.go +++ b/core/model/user_test.go @@ -1,4 +1,4 @@ -package m +package model import ( "github.com/stretchr/testify/assert" diff --git a/core/nkode/customer_test.go b/core/nkode/customer_test.go index 2d5be1f..382685e 100644 --- a/core/nkode/customer_test.go +++ b/core/nkode/customer_test.go @@ -14,24 +14,24 @@ func TestCustomer(t *testing.T) { func testNewCustomerAttributes(t *testing.T) { // keypad := m.KeypadDimension{AttrsPerKey: 10, NumbOfKeys: 5} - _, nil := m.NewCustomerAttributes() + _, nil := model.NewCustomerAttributes() assert.NoError(t, nil) } func testCustomerValidKeyEntry(t *testing.T) { - kp := m.KeypadDimension{AttrsPerKey: 10, NumbOfKeys: 9} - nkodePolicy := m.NewDefaultNKodePolicy() - customer, err := m.NewCustomer(nkodePolicy) + kp := model.KeypadDimension{AttrsPerKey: 10, NumbOfKeys: 9} + nkodePolicy := model.NewDefaultNKodePolicy() + customer, err := model.NewCustomer(nkodePolicy) assert.NoError(t, err) - newUserInterface, err := m.NewUserInterface(&kp) + newUserInterface, err := model.NewUserInterface(&kp) assert.NoError(t, err) - username := m.Username("testing123") + username := model.Username("testing123") passcodeIdx := []int{0, 1, 2, 3} user, err := NewUser(*customer, username, passcodeIdx, *newUserInterface, kp) assert.NoError(t, err) userLoginInterface, err := user.GetLoginInterface() assert.NoError(t, err) - selectedKeys, err := m.SelectKeyByAttrIdx(userLoginInterface, passcodeIdx, kp) + selectedKeys, err := model.SelectKeyByAttrIdx(userLoginInterface, passcodeIdx, kp) assert.NoError(t, err) validatedPasscode, err := ValidKeyEntry(*user, *customer, selectedKeys) assert.NoError(t, err) @@ -42,13 +42,13 @@ func testCustomerValidKeyEntry(t *testing.T) { } func testCustomerIsValidNKode(t *testing.T) { - kp := m.KeypadDimension{AttrsPerKey: 10, NumbOfKeys: 7} - nkodePolicy := m.NewDefaultNKodePolicy() - customer, err := m.NewCustomer(nkodePolicy) + kp := model.KeypadDimension{AttrsPerKey: 10, NumbOfKeys: 7} + nkodePolicy := model.NewDefaultNKodePolicy() + customer, err := model.NewCustomer(nkodePolicy) assert.NoError(t, err) - newUserInterface, err := m.NewUserInterface(&kp) + newUserInterface, err := model.NewUserInterface(&kp) assert.NoError(t, err) - username := m.Username("testing123") + username := model.Username("testing123") passcodeIdx := []int{0, 1, 2, 3} user, err := NewUser(*customer, username, passcodeIdx, *newUserInterface, kp) assert.NoError(t, err) diff --git a/core/nkode/db_accessor.go b/core/nkode/db_accessor.go index adc8123..c1e2279 100644 --- a/core/nkode/db_accessor.go +++ b/core/nkode/db_accessor.go @@ -5,11 +5,11 @@ import ( ) type DbAccessor interface { - GetCustomer(m.CustomerId) (*m.Customer, error) - GetUser(m.Username, m.CustomerId) (*m.User, error) - WriteNewCustomer(m.Customer) error - WriteNewUser(m.User) error - UpdateUserInterface(m.UserId, m.UserInterface) error - Renew(m.CustomerId) error - RefreshUser(m.User, []int, m.CustomerAttributes) error + GetCustomer(model.CustomerId) (*model.Customer, error) + GetUser(model.Username, model.CustomerId) (*model.User, error) + WriteNewCustomer(model.Customer) error + WriteNewUser(model.User) error + UpdateUserInterface(model.UserId, model.UserInterface) error + Renew(model.CustomerId) error + RefreshUser(model.User, []int, model.CustomerAttributes) error } diff --git a/core/nkode/nkode_api.go b/core/nkode/nkode_api.go index be15b23..1fac9a6 100644 --- a/core/nkode/nkode_api.go +++ b/core/nkode/nkode_api.go @@ -18,8 +18,11 @@ func NewNKodeAPI(db DbAccessor) NKodeAPI { } } -func (n *NKodeAPI) CreateNewCustomer(nkodePolicy m.NKodePolicy) (*m.CustomerId, error) { +func (n *NKodeAPI) CreateNewCustomer(nkodePolicy m.NKodePolicy, id *m.CustomerId) (*m.CustomerId, error) { newCustomer, err := m.NewCustomer(nkodePolicy) + if id != nil { + newCustomer.Id = *id + } if err != nil { return nil, err } diff --git a/core/nkode/nkode_api_test.go b/core/nkode/nkode_api_test.go index 7252393..78436c6 100644 --- a/core/nkode/nkode_api_test.go +++ b/core/nkode/nkode_api_test.go @@ -31,7 +31,7 @@ func testNKodeAPI(t *testing.T, db DbAccessor) { nkodePolicy := m.NewDefaultNKodePolicy() keypadSize := m.KeypadDimension{AttrsPerKey: 10, NumbOfKeys: 8} nkodeApi := NewNKodeAPI(db) - customerId, err := nkodeApi.CreateNewCustomer(nkodePolicy) + customerId, err := nkodeApi.CreateNewCustomer(nkodePolicy, nil) assert.NoError(t, err) signupResponse, err := nkodeApi.GenerateSignupInterface(*customerId, keypadSize) assert.NoError(t, err) diff --git a/main.go b/main.go index 2be02f0..b262abb 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "github.com/google/uuid" "go-nkode/core/api" "go-nkode/core/model" "go-nkode/core/nkode" @@ -16,9 +17,10 @@ func main() { log.Fatal(err) } nkodeApi := nkode.NewNKodeAPI(db) - handler := m.NKodeHandler{Api: &nkodeApi} + AddDefaultCustomer(nkodeApi) + handler := model.NKodeHandler{Api: &nkodeApi} mux := http.NewServeMux() - mux.Handle(api.CreateNewCustomer, &handler) + //mux.Handle(api.CreateNewCustomer, &handler) mux.Handle(api.GenerateSignupInterface, &handler) mux.Handle(api.SetNKode, &handler) mux.Handle(api.ConfirmNKode, &handler) @@ -28,3 +30,18 @@ func main() { fmt.Println("Running on localhost:8080...") log.Fatal(http.ListenAndServe("localhost:8080", mux)) } + +func AddDefaultCustomer(api nkode.NKodeAPI) { + newId, err := uuid.Parse("ed9ed6e0-082c-4b57-8d8c-f00ed6493457") + if err != nil { + log.Fatal(err) + } + customerId := model.CustomerId(newId) + nkode_policy := model.NewDefaultNKodePolicy() + _, err = api.CreateNewCustomer(nkode_policy, &customerId) + if err != nil { + log.Print(err) + } else { + log.Print("created new customer: ", newId) + } +}