Merge pull request 'Fix-Shuffle' (#8) from Fix-Shuffle into main

Reviewed-on: https://git.infra.nkode.tech/dkelly/go-nkode/pulls/8
This commit is contained in:
dkelly
2024-12-07 13:44:59 +00:00
5 changed files with 27 additions and 38 deletions

View File

@@ -24,3 +24,9 @@ tasks:
exec:
cmds:
- docker exec -it cron-nkode bash
sql:
cmds:
- sqlc generate
swag:
cmds:
- swag init --dir ./cmd

View File

@@ -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

View File

@@ -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
}

View File

@@ -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 {
for keyIdx, key := range keypadSet1 {
for idx := range key {
if selectedSets.Contains(idx) {
err = security.FisherYatesShuffle[int](&attrs)
if err != nil {
return err
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
}

View File

@@ -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