diff --git a/internal/handlers/handler_2fa_available_methods_test.go b/internal/handlers/handler_2fa_available_methods_test.go index 1a3c58ba2..1552d80fe 100644 --- a/internal/handlers/handler_2fa_available_methods_test.go +++ b/internal/handlers/handler_2fa_available_methods_test.go @@ -28,12 +28,12 @@ func (s *SecondFactorAvailableMethodsFixture) TestShouldServeDefaultMethods() { s.mock.Assert200OK(s.T(), []string{"totp", "u2f"}) } -func (s *SecondFactorAvailableMethodsFixture) TestShouldServeDefaultMethodsAndDuo() { +func (s *SecondFactorAvailableMethodsFixture) TestShouldServeDefaultMethodsAndMobilePush() { s.mock.Ctx.Configuration = schema.Configuration{ DuoAPI: &schema.DuoAPIConfiguration{}, } SecondFactorAvailableMethodsGet(s.mock.Ctx) - s.mock.Assert200OK(s.T(), []string{"totp", "u2f", "duo_push"}) + s.mock.Assert200OK(s.T(), []string{"totp", "u2f", "mobile_push"}) } func TestRunSuite(t *testing.T) { diff --git a/internal/handlers/handler_user_info.go b/internal/handlers/handler_user_info.go index 3acb55f4f..9f51774be 100644 --- a/internal/handlers/handler_user_info.go +++ b/internal/handlers/handler_user_info.go @@ -72,7 +72,7 @@ func UserInfoGet(ctx *middlewares.AutheliaCtx) { errors := loadInfo(userSession.Username, ctx.Providers.StorageProvider, &preferences, ctx.Logger) if len(errors) > 0 { - ctx.Error(fmt.Errorf("Unable to load user preferences"), operationFailedMessage) + ctx.Error(fmt.Errorf("Unable to load user information"), operationFailedMessage) return } ctx.SetJSONBody(preferences) diff --git a/internal/handlers/handler_user_info_test.go b/internal/handlers/handler_user_info_test.go index 0a48c9252..f7a1970bc 100644 --- a/internal/handlers/handler_user_info_test.go +++ b/internal/handlers/handler_user_info_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/clems4ever/authelia/internal/mocks" + "github.com/clems4ever/authelia/internal/storage" "github.com/golang/mock/gomock" "github.com/sirupsen/logrus" @@ -30,34 +31,41 @@ func (s *FetchSuite) TearDownTest() { s.mock.Close() } -func (s *FetchSuite) setPreferencesExpectations(preferences UserPreferences) { - s.mock.StorageProviderMock. +func setPreferencesExpectations(preferences UserPreferences, provider *storage.MockProvider) { + provider. EXPECT(). LoadPrefered2FAMethod(gomock.Eq("john")). Return(preferences.Method, nil) - var u2fData []byte if preferences.HasU2F { - u2fData = []byte("abc") + u2fData := []byte("abc") + provider. + EXPECT(). + LoadU2FDeviceHandle(gomock.Eq("john")). + Return(u2fData, u2fData, nil) + } else { + provider. + EXPECT(). + LoadU2FDeviceHandle(gomock.Eq("john")). + Return(nil, nil, storage.ErrNoU2FDeviceHandle) } - s.mock.StorageProviderMock. - EXPECT(). - LoadU2FDeviceHandle(gomock.Eq("john")). - Return(u2fData, u2fData, nil) - - var totpSecret string if preferences.HasTOTP { - totpSecret = "secret" + totpSecret := "secret" + provider. + EXPECT(). + LoadTOTPSecret(gomock.Eq("john")). + Return(totpSecret, nil) + } else { + provider. + EXPECT(). + LoadTOTPSecret(gomock.Eq("john")). + Return("", storage.ErrNoTOTPSecret) } - s.mock.StorageProviderMock. - EXPECT(). - LoadTOTPSecret(gomock.Eq("john")). - Return(totpSecret, nil) } -func (s *FetchSuite) TestMethodSetToU2F() { +func TestMethodSetToU2F(t *testing.T) { table := []UserPreferences{ UserPreferences{ Method: "totp", @@ -72,26 +80,39 @@ func (s *FetchSuite) TestMethodSetToU2F() { HasU2F: true, HasTOTP: false, }, + UserPreferences{ + Method: "mobile_push", + HasU2F: false, + HasTOTP: false, + }, } for _, expectedPreferences := range table { - s.setPreferencesExpectations(expectedPreferences) - UserInfoGet(s.mock.Ctx) + mock := mocks.NewMockAutheliaCtx(t) + // Set the intial user session. + userSession := mock.Ctx.GetSession() + userSession.Username = "john" + userSession.AuthenticationLevel = 1 + mock.Ctx.SaveSession(userSession) + + setPreferencesExpectations(expectedPreferences, mock.StorageProviderMock) + UserInfoGet(mock.Ctx) actualPreferences := UserPreferences{} - s.mock.GetResponseData(s.T(), &actualPreferences) + mock.GetResponseData(t, &actualPreferences) - s.Run("expected method", func() { - s.Assert().Equal(expectedPreferences.Method, actualPreferences.Method) + t.Run("expected method", func(t *testing.T) { + assert.Equal(t, expectedPreferences.Method, actualPreferences.Method) }) - s.Run("registered u2f", func() { - s.Assert().Equal(expectedPreferences.HasU2F, actualPreferences.HasU2F) + t.Run("registered u2f", func(t *testing.T) { + assert.Equal(t, expectedPreferences.HasU2F, actualPreferences.HasU2F) }) - s.Run("registered totp", func() { - s.Assert().Equal(expectedPreferences.HasTOTP, actualPreferences.HasTOTP) + t.Run("registered totp", func(t *testing.T) { + assert.Equal(t, expectedPreferences.HasTOTP, actualPreferences.HasTOTP) }) + mock.Close() } } @@ -104,12 +125,12 @@ func (s *FetchSuite) TestShouldGetDefaultPreferenceIfNotInDB() { s.mock.StorageProviderMock. EXPECT(). LoadU2FDeviceHandle(gomock.Eq("john")). - Return(nil, nil, nil) + Return(nil, nil, storage.ErrNoU2FDeviceHandle) s.mock.StorageProviderMock. EXPECT(). LoadTOTPSecret(gomock.Eq("john")). - Return("", nil) + Return("", storage.ErrNoTOTPSecret) UserInfoGet(s.mock.Ctx) s.mock.Assert200OK(s.T(), UserPreferences{Method: "totp"}) @@ -119,10 +140,19 @@ func (s *FetchSuite) TestShouldReturnError500WhenStorageFailsToLoad() { s.mock.StorageProviderMock.EXPECT(). LoadPrefered2FAMethod(gomock.Eq("john")). Return("", fmt.Errorf("Failure")) + + s.mock.StorageProviderMock. + EXPECT(). + LoadU2FDeviceHandle(gomock.Eq("john")) + + s.mock.StorageProviderMock. + EXPECT(). + LoadTOTPSecret(gomock.Eq("john")) + UserInfoGet(s.mock.Ctx) s.mock.Assert200KO(s.T(), "Operation failed.") - assert.Equal(s.T(), "Unable to load prefered 2FA method: Failure", s.mock.Hook.LastEntry().Message) + assert.Equal(s.T(), "Unable to load user information", s.mock.Hook.LastEntry().Message) assert.Equal(s.T(), logrus.ErrorLevel, s.mock.Hook.LastEntry().Level) } diff --git a/internal/storage/provider_mock.go b/internal/storage/provider_mock.go index 1df8557d6..670c85d07 100644 --- a/internal/storage/provider_mock.go +++ b/internal/storage/provider_mock.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/clems4ever/authelia/internal/storage (interfaces: Provider) +// Source: internal/storage/provider.go // Package storage is a generated GoMock package. package storage @@ -34,84 +34,139 @@ func (m *MockProvider) EXPECT() *MockProviderMockRecorder { return m.recorder } -// AppendAuthenticationLog mocks base method -func (m *MockProvider) AppendAuthenticationLog(arg0 models.AuthenticationAttempt) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AppendAuthenticationLog", arg0) - ret0, _ := ret[0].(error) - return ret0 -} - -// AppendAuthenticationLog indicates an expected call of AppendAuthenticationLog -func (mr *MockProviderMockRecorder) AppendAuthenticationLog(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AppendAuthenticationLog", reflect.TypeOf((*MockProvider)(nil).AppendAuthenticationLog), arg0) -} - -// FindIdentityVerificationToken mocks base method -func (m *MockProvider) FindIdentityVerificationToken(arg0 string) (bool, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "FindIdentityVerificationToken", arg0) - ret0, _ := ret[0].(bool) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// FindIdentityVerificationToken indicates an expected call of FindIdentityVerificationToken -func (mr *MockProviderMockRecorder) FindIdentityVerificationToken(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindIdentityVerificationToken", reflect.TypeOf((*MockProvider)(nil).FindIdentityVerificationToken), arg0) -} - -// LoadLatestAuthenticationLogs mocks base method -func (m *MockProvider) LoadLatestAuthenticationLogs(arg0 string, arg1 time.Time) ([]models.AuthenticationAttempt, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "LoadLatestAuthenticationLogs", arg0, arg1) - ret0, _ := ret[0].([]models.AuthenticationAttempt) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// LoadLatestAuthenticationLogs indicates an expected call of LoadLatestAuthenticationLogs -func (mr *MockProviderMockRecorder) LoadLatestAuthenticationLogs(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadLatestAuthenticationLogs", reflect.TypeOf((*MockProvider)(nil).LoadLatestAuthenticationLogs), arg0, arg1) -} - // LoadPrefered2FAMethod mocks base method -func (m *MockProvider) LoadPrefered2FAMethod(arg0 string) (string, error) { +func (m *MockProvider) LoadPrefered2FAMethod(username string) (string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "LoadPrefered2FAMethod", arg0) + ret := m.ctrl.Call(m, "LoadPrefered2FAMethod", username) ret0, _ := ret[0].(string) ret1, _ := ret[1].(error) return ret0, ret1 } // LoadPrefered2FAMethod indicates an expected call of LoadPrefered2FAMethod -func (mr *MockProviderMockRecorder) LoadPrefered2FAMethod(arg0 interface{}) *gomock.Call { +func (mr *MockProviderMockRecorder) LoadPrefered2FAMethod(username interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadPrefered2FAMethod", reflect.TypeOf((*MockProvider)(nil).LoadPrefered2FAMethod), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadPrefered2FAMethod", reflect.TypeOf((*MockProvider)(nil).LoadPrefered2FAMethod), username) +} + +// SavePrefered2FAMethod mocks base method +func (m *MockProvider) SavePrefered2FAMethod(username, method string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SavePrefered2FAMethod", username, method) + ret0, _ := ret[0].(error) + return ret0 +} + +// SavePrefered2FAMethod indicates an expected call of SavePrefered2FAMethod +func (mr *MockProviderMockRecorder) SavePrefered2FAMethod(username, method interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SavePrefered2FAMethod", reflect.TypeOf((*MockProvider)(nil).SavePrefered2FAMethod), username, method) +} + +// FindIdentityVerificationToken mocks base method +func (m *MockProvider) FindIdentityVerificationToken(token string) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FindIdentityVerificationToken", token) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindIdentityVerificationToken indicates an expected call of FindIdentityVerificationToken +func (mr *MockProviderMockRecorder) FindIdentityVerificationToken(token interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindIdentityVerificationToken", reflect.TypeOf((*MockProvider)(nil).FindIdentityVerificationToken), token) +} + +// SaveIdentityVerificationToken mocks base method +func (m *MockProvider) SaveIdentityVerificationToken(token string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SaveIdentityVerificationToken", token) + ret0, _ := ret[0].(error) + return ret0 +} + +// SaveIdentityVerificationToken indicates an expected call of SaveIdentityVerificationToken +func (mr *MockProviderMockRecorder) SaveIdentityVerificationToken(token interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SaveIdentityVerificationToken", reflect.TypeOf((*MockProvider)(nil).SaveIdentityVerificationToken), token) +} + +// RemoveIdentityVerificationToken mocks base method +func (m *MockProvider) RemoveIdentityVerificationToken(token string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveIdentityVerificationToken", token) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveIdentityVerificationToken indicates an expected call of RemoveIdentityVerificationToken +func (mr *MockProviderMockRecorder) RemoveIdentityVerificationToken(token interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveIdentityVerificationToken", reflect.TypeOf((*MockProvider)(nil).RemoveIdentityVerificationToken), token) +} + +// SaveTOTPSecret mocks base method +func (m *MockProvider) SaveTOTPSecret(username, secret string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SaveTOTPSecret", username, secret) + ret0, _ := ret[0].(error) + return ret0 +} + +// SaveTOTPSecret indicates an expected call of SaveTOTPSecret +func (mr *MockProviderMockRecorder) SaveTOTPSecret(username, secret interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SaveTOTPSecret", reflect.TypeOf((*MockProvider)(nil).SaveTOTPSecret), username, secret) } // LoadTOTPSecret mocks base method -func (m *MockProvider) LoadTOTPSecret(arg0 string) (string, error) { +func (m *MockProvider) LoadTOTPSecret(username string) (string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "LoadTOTPSecret", arg0) + ret := m.ctrl.Call(m, "LoadTOTPSecret", username) ret0, _ := ret[0].(string) ret1, _ := ret[1].(error) return ret0, ret1 } // LoadTOTPSecret indicates an expected call of LoadTOTPSecret -func (mr *MockProviderMockRecorder) LoadTOTPSecret(arg0 interface{}) *gomock.Call { +func (mr *MockProviderMockRecorder) LoadTOTPSecret(username interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadTOTPSecret", reflect.TypeOf((*MockProvider)(nil).LoadTOTPSecret), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadTOTPSecret", reflect.TypeOf((*MockProvider)(nil).LoadTOTPSecret), username) +} + +// DeleteTOTPSecret mocks base method +func (m *MockProvider) DeleteTOTPSecret(username string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteTOTPSecret", username) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteTOTPSecret indicates an expected call of DeleteTOTPSecret +func (mr *MockProviderMockRecorder) DeleteTOTPSecret(username interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteTOTPSecret", reflect.TypeOf((*MockProvider)(nil).DeleteTOTPSecret), username) +} + +// SaveU2FDeviceHandle mocks base method +func (m *MockProvider) SaveU2FDeviceHandle(username string, keyHandle, publicKey []byte) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SaveU2FDeviceHandle", username, keyHandle, publicKey) + ret0, _ := ret[0].(error) + return ret0 +} + +// SaveU2FDeviceHandle indicates an expected call of SaveU2FDeviceHandle +func (mr *MockProviderMockRecorder) SaveU2FDeviceHandle(username, keyHandle, publicKey interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SaveU2FDeviceHandle", reflect.TypeOf((*MockProvider)(nil).SaveU2FDeviceHandle), username, keyHandle, publicKey) } // LoadU2FDeviceHandle mocks base method -func (m *MockProvider) LoadU2FDeviceHandle(arg0 string) ([]byte, []byte, error) { +func (m *MockProvider) LoadU2FDeviceHandle(username string) ([]byte, []byte, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "LoadU2FDeviceHandle", arg0) + ret := m.ctrl.Call(m, "LoadU2FDeviceHandle", username) ret0, _ := ret[0].([]byte) ret1, _ := ret[1].([]byte) ret2, _ := ret[2].(error) @@ -119,77 +174,36 @@ func (m *MockProvider) LoadU2FDeviceHandle(arg0 string) ([]byte, []byte, error) } // LoadU2FDeviceHandle indicates an expected call of LoadU2FDeviceHandle -func (mr *MockProviderMockRecorder) LoadU2FDeviceHandle(arg0 interface{}) *gomock.Call { +func (mr *MockProviderMockRecorder) LoadU2FDeviceHandle(username interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadU2FDeviceHandle", reflect.TypeOf((*MockProvider)(nil).LoadU2FDeviceHandle), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadU2FDeviceHandle", reflect.TypeOf((*MockProvider)(nil).LoadU2FDeviceHandle), username) } -// RemoveIdentityVerificationToken mocks base method -func (m *MockProvider) RemoveIdentityVerificationToken(arg0 string) error { +// AppendAuthenticationLog mocks base method +func (m *MockProvider) AppendAuthenticationLog(attempt models.AuthenticationAttempt) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RemoveIdentityVerificationToken", arg0) + ret := m.ctrl.Call(m, "AppendAuthenticationLog", attempt) ret0, _ := ret[0].(error) return ret0 } -// RemoveIdentityVerificationToken indicates an expected call of RemoveIdentityVerificationToken -func (mr *MockProviderMockRecorder) RemoveIdentityVerificationToken(arg0 interface{}) *gomock.Call { +// AppendAuthenticationLog indicates an expected call of AppendAuthenticationLog +func (mr *MockProviderMockRecorder) AppendAuthenticationLog(attempt interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveIdentityVerificationToken", reflect.TypeOf((*MockProvider)(nil).RemoveIdentityVerificationToken), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AppendAuthenticationLog", reflect.TypeOf((*MockProvider)(nil).AppendAuthenticationLog), attempt) } -// SaveIdentityVerificationToken mocks base method -func (m *MockProvider) SaveIdentityVerificationToken(arg0 string) error { +// LoadLatestAuthenticationLogs mocks base method +func (m *MockProvider) LoadLatestAuthenticationLogs(username string, fromDate time.Time) ([]models.AuthenticationAttempt, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SaveIdentityVerificationToken", arg0) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "LoadLatestAuthenticationLogs", username, fromDate) + ret0, _ := ret[0].([]models.AuthenticationAttempt) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// SaveIdentityVerificationToken indicates an expected call of SaveIdentityVerificationToken -func (mr *MockProviderMockRecorder) SaveIdentityVerificationToken(arg0 interface{}) *gomock.Call { +// LoadLatestAuthenticationLogs indicates an expected call of LoadLatestAuthenticationLogs +func (mr *MockProviderMockRecorder) LoadLatestAuthenticationLogs(username, fromDate interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SaveIdentityVerificationToken", reflect.TypeOf((*MockProvider)(nil).SaveIdentityVerificationToken), arg0) -} - -// SavePrefered2FAMethod mocks base method -func (m *MockProvider) SavePrefered2FAMethod(arg0, arg1 string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SavePrefered2FAMethod", arg0, arg1) - ret0, _ := ret[0].(error) - return ret0 -} - -// SavePrefered2FAMethod indicates an expected call of SavePrefered2FAMethod -func (mr *MockProviderMockRecorder) SavePrefered2FAMethod(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SavePrefered2FAMethod", reflect.TypeOf((*MockProvider)(nil).SavePrefered2FAMethod), arg0, arg1) -} - -// SaveTOTPSecret mocks base method -func (m *MockProvider) SaveTOTPSecret(arg0, arg1 string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SaveTOTPSecret", arg0, arg1) - ret0, _ := ret[0].(error) - return ret0 -} - -// SaveTOTPSecret indicates an expected call of SaveTOTPSecret -func (mr *MockProviderMockRecorder) SaveTOTPSecret(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SaveTOTPSecret", reflect.TypeOf((*MockProvider)(nil).SaveTOTPSecret), arg0, arg1) -} - -// SaveU2FDeviceHandle mocks base method -func (m *MockProvider) SaveU2FDeviceHandle(arg0 string, arg1, arg2 []byte) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SaveU2FDeviceHandle", arg0, arg1, arg2) - ret0, _ := ret[0].(error) - return ret0 -} - -// SaveU2FDeviceHandle indicates an expected call of SaveU2FDeviceHandle -func (mr *MockProviderMockRecorder) SaveU2FDeviceHandle(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SaveU2FDeviceHandle", reflect.TypeOf((*MockProvider)(nil).SaveU2FDeviceHandle), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadLatestAuthenticationLogs", reflect.TypeOf((*MockProvider)(nil).LoadLatestAuthenticationLogs), username, fromDate) }