diff --git a/Taskfile.yaml b/Taskfile.yaml index 27838ba..fef6d45 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -24,3 +24,9 @@ tasks: exec: cmds: - docker exec -it cron-nkode bash + sql: + cmds: + - sqlc generate + swag: + cmds: + - swag init --dir ./cmd \ No newline at end of file diff --git a/internal/api/nkode_api.go b/internal/api/nkode_api.go index cf0f581..fb280a4 100644 --- a/internal/api/nkode_api.go +++ b/internal/api/nkode_api.go @@ -153,14 +153,6 @@ func (n *NKodeAPI) GetLoginInterface(userEmail models.UserEmail, customerId mode log.Printf("user %s for customer %s dne", userEmail, customerId) return nil, config.ErrUserForCustomerDNE } - err = user.Interface.PartialInterfaceShuffle() - if err != nil { - return nil, err - } - err = n.Db.UpdateUserInterface(user.Id, user.Interface) - if err != nil { - return nil, err - } svgInterface, err := n.Db.GetSvgStringInterface(user.Interface.SvgId) if err != nil { return nil, err @@ -203,8 +195,13 @@ func (n *NKodeAPI) Login(customerId models.CustomerId, userEmail models.UserEmai if err != nil { return nil, err } - err = n.Db.UpdateUserRefreshToken(user.Id, jwtToken.RefreshToken) - if err != nil { + if err = n.Db.UpdateUserRefreshToken(user.Id, jwtToken.RefreshToken); err != nil { + return nil, err + } + if err = user.Interface.LoginShuffle(); err != nil { + return nil, err + } + if err = n.Db.UpdateUserInterface(user.Id, user.Interface); err != nil { return nil, err } return &jwtToken, nil diff --git a/internal/entities/user.go b/internal/entities/user.go index a4ae96f..0754f05 100644 --- a/internal/entities/user.go +++ b/internal/entities/user.go @@ -56,11 +56,6 @@ func (u *User) RefreshPasscode(passcodeAttrIdx []int, customerAttributes Custome } func (u *User) GetLoginInterface() ([]int, error) { - err := u.Interface.PartialInterfaceShuffle() - - if err != nil { - return nil, err - } return u.Interface.IdxInterface, nil } diff --git a/internal/entities/user_interface.go b/internal/entities/user_interface.go index 0a691e8..3b2d966 100644 --- a/internal/entities/user_interface.go +++ b/internal/entities/user_interface.go @@ -140,40 +140,31 @@ func (u *UserInterface) AttributeAdjacencyGraph() (map[int]utils.Set[int], error return graph, nil } -func (u *UserInterface) PartialInterfaceShuffle() error { - err := u.shuffleKeys() - if err != nil { +func (u *UserInterface) LoginShuffle() error { + if err := u.shuffleKeys(); err != nil { return err } - numbOfSelectedSets := u.Kp.AttrsPerKey / 2 - if u.Kp.AttrsPerKey&1 == 1 { - numbOfSelectedSets += security.Choice[int]([]int{0, 1}) + keypadSet1, err := u.InterfaceMatrix() + if err = u.shuffleKeys(); err != nil { + return err } + keypadSet2, err := u.InterfaceMatrix() + numbOfSelectedSets := u.Kp.AttrsPerKey / 2 setIdxs, err := security.RandomPermutation(u.Kp.AttrsPerKey) if err != nil { return err } selectedSets := utils.NewSetFromSlice[int](setIdxs[:numbOfSelectedSets]) - keypadSetView, err := u.SetViewMatrix() - if err != nil { - return err - } - interfaceBySet := make([][]int, u.Kp.AttrsPerKey) - for idx, attrs := range keypadSetView { - if selectedSets.Contains(idx) { - err = security.FisherYatesShuffle[int](&attrs) - if err != nil { - return err + for keyIdx, key := range keypadSet1 { + for idx := range key { + if selectedSets.Contains(idx) { + keypadSet1[keyIdx][idx] = keypadSet2[keyIdx][idx] } } - interfaceBySet[idx] = attrs } - keypadView, err := security.MatrixTranspose(interfaceBySet) - if err != nil { - return err - } - u.IdxInterface = security.MatrixToList(keypadView) + + u.IdxInterface = security.MatrixToList(keypadSet1) return nil } diff --git a/internal/entities/user_test.go b/internal/entities/user_test.go index 9d93c5c..3b64a7b 100644 --- a/internal/entities/user_test.go +++ b/internal/entities/user_test.go @@ -111,7 +111,7 @@ func TestUserInterface_PartialInterfaceShuffle(t *testing.T) { userInterface, err := NewUserInterface(&kp, mockSvgInterface) assert.NoError(t, err) preShuffle := userInterface.IdxInterface - err = userInterface.PartialInterfaceShuffle() + err = userInterface.LoginShuffle() assert.NoError(t, err) postShuffle := userInterface.IdxInterface