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:
@@ -24,3 +24,9 @@ tasks:
|
||||
exec:
|
||||
cmds:
|
||||
- docker exec -it cron-nkode bash
|
||||
sql:
|
||||
cmds:
|
||||
- sqlc generate
|
||||
swag:
|
||||
cmds:
|
||||
- swag init --dir ./cmd
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user