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:
|
exec:
|
||||||
cmds:
|
cmds:
|
||||||
- docker exec -it cron-nkode bash
|
- 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)
|
log.Printf("user %s for customer %s dne", userEmail, customerId)
|
||||||
return nil, config.ErrUserForCustomerDNE
|
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)
|
svgInterface, err := n.Db.GetSvgStringInterface(user.Interface.SvgId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -203,8 +195,13 @@ func (n *NKodeAPI) Login(customerId models.CustomerId, userEmail models.UserEmai
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
err = n.Db.UpdateUserRefreshToken(user.Id, jwtToken.RefreshToken)
|
if err = n.Db.UpdateUserRefreshToken(user.Id, jwtToken.RefreshToken); err != nil {
|
||||||
if 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 nil, err
|
||||||
}
|
}
|
||||||
return &jwtToken, nil
|
return &jwtToken, nil
|
||||||
|
|||||||
@@ -56,11 +56,6 @@ func (u *User) RefreshPasscode(passcodeAttrIdx []int, customerAttributes Custome
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (u *User) GetLoginInterface() ([]int, error) {
|
func (u *User) GetLoginInterface() ([]int, error) {
|
||||||
err := u.Interface.PartialInterfaceShuffle()
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return u.Interface.IdxInterface, nil
|
return u.Interface.IdxInterface, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -140,40 +140,31 @@ func (u *UserInterface) AttributeAdjacencyGraph() (map[int]utils.Set[int], error
|
|||||||
return graph, nil
|
return graph, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *UserInterface) PartialInterfaceShuffle() error {
|
func (u *UserInterface) LoginShuffle() error {
|
||||||
err := u.shuffleKeys()
|
if err := u.shuffleKeys(); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
numbOfSelectedSets := u.Kp.AttrsPerKey / 2
|
keypadSet1, err := u.InterfaceMatrix()
|
||||||
if u.Kp.AttrsPerKey&1 == 1 {
|
if err = u.shuffleKeys(); err != nil {
|
||||||
numbOfSelectedSets += security.Choice[int]([]int{0, 1})
|
return err
|
||||||
}
|
}
|
||||||
|
keypadSet2, err := u.InterfaceMatrix()
|
||||||
|
numbOfSelectedSets := u.Kp.AttrsPerKey / 2
|
||||||
setIdxs, err := security.RandomPermutation(u.Kp.AttrsPerKey)
|
setIdxs, err := security.RandomPermutation(u.Kp.AttrsPerKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
selectedSets := utils.NewSetFromSlice[int](setIdxs[:numbOfSelectedSets])
|
selectedSets := utils.NewSetFromSlice[int](setIdxs[:numbOfSelectedSets])
|
||||||
|
|
||||||
keypadSetView, err := u.SetViewMatrix()
|
for keyIdx, key := range keypadSet1 {
|
||||||
if err != nil {
|
for idx := range key {
|
||||||
return err
|
|
||||||
}
|
|
||||||
interfaceBySet := make([][]int, u.Kp.AttrsPerKey)
|
|
||||||
for idx, attrs := range keypadSetView {
|
|
||||||
if selectedSets.Contains(idx) {
|
if selectedSets.Contains(idx) {
|
||||||
err = security.FisherYatesShuffle[int](&attrs)
|
keypadSet1[keyIdx][idx] = keypadSet2[keyIdx][idx]
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
interfaceBySet[idx] = attrs
|
|
||||||
}
|
}
|
||||||
keypadView, err := security.MatrixTranspose(interfaceBySet)
|
|
||||||
if err != nil {
|
u.IdxInterface = security.MatrixToList(keypadSet1)
|
||||||
return err
|
|
||||||
}
|
|
||||||
u.IdxInterface = security.MatrixToList(keypadView)
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ func TestUserInterface_PartialInterfaceShuffle(t *testing.T) {
|
|||||||
userInterface, err := NewUserInterface(&kp, mockSvgInterface)
|
userInterface, err := NewUserInterface(&kp, mockSvgInterface)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
preShuffle := userInterface.IdxInterface
|
preShuffle := userInterface.IdxInterface
|
||||||
err = userInterface.PartialInterfaceShuffle()
|
err = userInterface.LoginShuffle()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
postShuffle := userInterface.IdxInterface
|
postShuffle := userInterface.IdxInterface
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user