diff --git a/app/session.go b/app/session.go index 5e29b42880..7b04cc38ca 100644 --- a/app/session.go +++ b/app/session.go @@ -262,12 +262,10 @@ func (a *App) CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAc } func (a *App) createSessionForUserAccessToken(tokenString string) (*model.Session, *model.AppError) { - var token *model.UserAccessToken - result := <-a.Srv.Store.UserAccessToken().GetByToken(tokenString) - if result.Err != nil { - return nil, model.NewAppError("createSessionForUserAccessToken", "app.user_access_token.invalid_or_missing", nil, result.Err.Error(), http.StatusUnauthorized) + token, err := a.Srv.Store.UserAccessToken().GetByToken(tokenString) + if err != nil { + return nil, model.NewAppError("createSessionForUserAccessToken", "app.user_access_token.invalid_or_missing", nil, err.Error(), http.StatusUnauthorized) } - token = result.Data.(*model.UserAccessToken) if !token.IsActive { return nil, model.NewAppError("createSessionForUserAccessToken", "app.user_access_token.invalid_or_missing", nil, "inactive_token", http.StatusUnauthorized) diff --git a/store/sqlstore/user_access_token_store.go b/store/sqlstore/user_access_token_store.go index 68325c89f4..8ec04bb8d5 100644 --- a/store/sqlstore/user_access_token_store.go +++ b/store/sqlstore/user_access_token_store.go @@ -172,20 +172,17 @@ func (s SqlUserAccessTokenStore) GetAll(offset, limit int) ([]*model.UserAccessT return tokens, nil } -func (s SqlUserAccessTokenStore) GetByToken(tokenString string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - token := model.UserAccessToken{} +func (s SqlUserAccessTokenStore) GetByToken(tokenString string) (*model.UserAccessToken, *model.AppError) { + token := model.UserAccessToken{} - if err := s.GetReplica().SelectOne(&token, "SELECT * FROM UserAccessTokens WHERE Token = :Token", map[string]interface{}{"Token": tokenString}); err != nil { - if err == sql.ErrNoRows { - result.Err = model.NewAppError("SqlUserAccessTokenStore.GetByToken", "store.sql_user_access_token.get_by_token.app_error", nil, err.Error(), http.StatusNotFound) - } else { - result.Err = model.NewAppError("SqlUserAccessTokenStore.GetByToken", "store.sql_user_access_token.get_by_token.app_error", nil, err.Error(), http.StatusInternalServerError) - } + if err := s.GetReplica().SelectOne(&token, "SELECT * FROM UserAccessTokens WHERE Token = :Token", map[string]interface{}{"Token": tokenString}); err != nil { + if err == sql.ErrNoRows { + return nil, model.NewAppError("SqlUserAccessTokenStore.GetByToken", "store.sql_user_access_token.get_by_token.app_error", nil, err.Error(), http.StatusNotFound) } + return nil, model.NewAppError("SqlUserAccessTokenStore.GetByToken", "store.sql_user_access_token.get_by_token.app_error", nil, err.Error(), http.StatusInternalServerError) + } - result.Data = &token - }) + return &token, nil } func (s SqlUserAccessTokenStore) GetByUser(userId string, offset, limit int) store.StoreChannel { diff --git a/store/store.go b/store/store.go index 3a03184d34..90cc7ee890 100644 --- a/store/store.go +++ b/store/store.go @@ -520,7 +520,7 @@ type UserAccessTokenStore interface { DeleteAllForUser(userId string) StoreChannel Get(tokenId string) (*model.UserAccessToken, *model.AppError) GetAll(offset int, limit int) ([]*model.UserAccessToken, *model.AppError) - GetByToken(tokenString string) StoreChannel + GetByToken(tokenString string) (*model.UserAccessToken, *model.AppError) GetByUser(userId string, page, perPage int) StoreChannel Search(term string) StoreChannel UpdateTokenEnable(tokenId string) StoreChannel diff --git a/store/storetest/mocks/UserAccessTokenStore.go b/store/storetest/mocks/UserAccessTokenStore.go index 9102567636..c7cb93eb26 100644 --- a/store/storetest/mocks/UserAccessTokenStore.go +++ b/store/storetest/mocks/UserAccessTokenStore.go @@ -96,19 +96,28 @@ func (_m *UserAccessTokenStore) GetAll(offset int, limit int) ([]*model.UserAcce } // GetByToken provides a mock function with given fields: tokenString -func (_m *UserAccessTokenStore) GetByToken(tokenString string) store.StoreChannel { +func (_m *UserAccessTokenStore) GetByToken(tokenString string) (*model.UserAccessToken, *model.AppError) { ret := _m.Called(tokenString) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok { + var r0 *model.UserAccessToken + if rf, ok := ret.Get(0).(func(string) *model.UserAccessToken); ok { r0 = rf(tokenString) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).(*model.UserAccessToken) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string) *model.AppError); ok { + r1 = rf(tokenString) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetByUser provides a mock function with given fields: userId, page, perPage diff --git a/store/storetest/user_access_token_store.go b/store/storetest/user_access_token_store.go index 292a59d34e..ba17dae8c5 100644 --- a/store/storetest/user_access_token_store.go +++ b/store/storetest/user_access_token_store.go @@ -41,13 +41,13 @@ func testUserAccessTokenSaveGetDelete(t *testing.T, ss store.Store) { t.Fatal("received incorrect token after save") } - if result := <-ss.UserAccessToken().GetByToken(uat.Token); result.Err != nil { - t.Fatal(result.Err) - } else if received := result.Data.(*model.UserAccessToken); received.Token != uat.Token { + if received, err2 := ss.UserAccessToken().GetByToken(uat.Token); err2 != nil { + t.Fatal(err2) + } else if received.Token != uat.Token { t.Fatal("received incorrect token after save") } - if result := <-ss.UserAccessToken().GetByToken("notarealtoken"); result.Err == nil { + if _, err = ss.UserAccessToken().GetByToken("notarealtoken"); err == nil { t.Fatal("should have failed on bad token") } @@ -71,7 +71,7 @@ func testUserAccessTokenSaveGetDelete(t *testing.T, ss store.Store) { t.Fatal("should error - session should be deleted") } - if err = (<-ss.UserAccessToken().GetByToken(s1.Token)).Err; err == nil { + if _, err = ss.UserAccessToken().GetByToken(s1.Token); err == nil { t.Fatal("should error - access token should be deleted") } @@ -94,7 +94,7 @@ func testUserAccessTokenSaveGetDelete(t *testing.T, ss store.Store) { t.Fatal("should error - session should be deleted") } - if err := (<-ss.UserAccessToken().GetByToken(s2.Token)).Err; err == nil { + if _, err := ss.UserAccessToken().GetByToken(s2.Token); err == nil { t.Fatal("should error - access token should be deleted") } }