summaryrefslogtreecommitdiffstats
path: root/store/sqlstore/user_access_token_store.go
diff options
context:
space:
mode:
authorNick Frazier <nrflaw@gmail.com>2017-10-19 08:10:29 -0400
committerJoram Wilander <jwawilander@gmail.com>2017-10-19 08:10:29 -0400
commit7fa4913f902457dadb1a4806ce194eb122dbc090 (patch)
treeea340ad55f6dfa1e6ee647e0a87af69ac406e25d /store/sqlstore/user_access_token_store.go
parent8e19ba029f889519d93cf272960dce858971106c (diff)
downloadchat-7fa4913f902457dadb1a4806ce194eb122dbc090.tar.gz
chat-7fa4913f902457dadb1a4806ce194eb122dbc090.tar.bz2
chat-7fa4913f902457dadb1a4806ce194eb122dbc090.zip
[PLT-7794] Add user access token enable/disable endpoints (#7630)
* Add column to UserAccessTokens table * PLT-7794 Add user access token enable/disable endpoints * replaced eliminated global variable * updates to user_access_token_store and upgrade.go * style fix and cleanup
Diffstat (limited to 'store/sqlstore/user_access_token_store.go')
-rw-r--r--store/sqlstore/user_access_token_store.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/store/sqlstore/user_access_token_store.go b/store/sqlstore/user_access_token_store.go
index 2535943c7..530ba8d16 100644
--- a/store/sqlstore/user_access_token_store.go
+++ b/store/sqlstore/user_access_token_store.go
@@ -198,3 +198,65 @@ func (s SqlUserAccessTokenStore) GetByUser(userId string, offset, limit int) sto
result.Data = tokens
})
}
+
+func (s SqlUserAccessTokenStore) UpdateTokenEnable(tokenId string) store.StoreChannel {
+ return store.Do(func(result *store.StoreResult) {
+ if _, err := s.GetMaster().Exec("UPDATE UserAccessTokens SET IsActive = TRUE WHERE Id = :Id", map[string]interface{}{"Id": tokenId}); err != nil {
+ result.Err = model.NewAppError("SqlUserAccessTokenStore.UpdateTokenEnable", "store.sql_user_access_token.update_token_enable.app_error", nil, "id="+tokenId+", "+err.Error(), http.StatusInternalServerError)
+ } else {
+ result.Data = tokenId
+ }
+ })
+}
+
+func (s SqlUserAccessTokenStore) UpdateTokenDisable(tokenId string) store.StoreChannel {
+ return store.Do(func(result *store.StoreResult) {
+ transaction, err := s.GetMaster().Begin()
+ if err != nil {
+ result.Err = model.NewAppError("SqlUserAccessTokenStore.UpdateTokenDisable", "store.sql_user_access_token.update_token_disble.app_error", nil, err.Error(), http.StatusInternalServerError)
+ } else {
+ if extrasResult := s.deleteSessionsAndDisableToken(transaction, tokenId); extrasResult.Err != nil {
+ *result = extrasResult
+ }
+
+ if result.Err == nil {
+ if err := transaction.Commit(); err != nil {
+ // don't need to rollback here since the transaction is already closed
+ result.Err = model.NewAppError("SqlUserAccessTokenStore.UpdateTokenDisable", "store.sql_user_access_token.update_token_disable.app_error", nil, err.Error(), http.StatusInternalServerError)
+ }
+ } else {
+ if err := transaction.Rollback(); err != nil {
+ result.Err = model.NewAppError("SqlUserAccessTokenStore.UpdateTokenDisable", "store.sql_user_access_token.update_token_disable.app_error", nil, err.Error(), http.StatusInternalServerError)
+ }
+ }
+ }
+ })
+}
+
+func (s SqlUserAccessTokenStore) deleteSessionsAndDisableToken(transaction *gorp.Transaction, tokenId string) store.StoreResult {
+ result := store.StoreResult{}
+
+ query := ""
+ if s.DriverName() == model.DATABASE_DRIVER_POSTGRES {
+ query = "DELETE FROM Sessions s USING UserAccessTokens o WHERE o.Token = s.Token AND o.Id = :Id"
+ } else if s.DriverName() == model.DATABASE_DRIVER_MYSQL {
+ query = "DELETE s.* FROM Sessions s INNER JOIN UserAccessTokens o ON o.Token = s.Token WHERE o.Id = :Id"
+ }
+
+ if _, err := transaction.Exec(query, map[string]interface{}{"Id": tokenId}); err != nil {
+ result.Err = model.NewAppError("SqlUserAccessTokenStore.deleteSessionsAndDisableToken", "store.sql_user_access_token.update_token_disable.app_error", nil, "id="+tokenId+", err="+err.Error(), http.StatusInternalServerError)
+ return result
+ }
+
+ return s.updateTokenDisable(transaction, tokenId)
+}
+
+func (s SqlUserAccessTokenStore) updateTokenDisable(transaction *gorp.Transaction, tokenId string) store.StoreResult {
+ result := store.StoreResult{}
+
+ if _, err := transaction.Exec("UPDATE UserAccessTokens SET IsActive = FALSE WHERE Id = :Id", map[string]interface{}{"Id": tokenId}); err != nil {
+ result.Err = model.NewAppError("SqlUserAccessTokenStore.updateTokenDisable", "store.sql_user_access_token.update_token_disable.app_error", nil, "", http.StatusInternalServerError)
+ }
+
+ return result
+}