func TestOAuthGetAuthorizedApps(t *testing.T) { Setup() a1 := model.OAuthApp{} a1.CreatorId = model.NewId() a1.Name = "TestApp" + model.NewId() a1.CallbackUrls = []string{"https://nowhere.com"} a1.Homepage = "https://nowhere.com" Must(store.OAuth().SaveApp(&a1)) // allow the app p := model.Preference{} p.UserId = a1.CreatorId p.Category = model.PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP p.Name = a1.Id p.Value = "true" Must(store.Preference().Save(&model.Preferences{p})) if result := <-store.OAuth().GetAuthorizedApps(a1.CreatorId); result.Err != nil { t.Fatal(result.Err) } else { apps := result.Data.([]*model.OAuthApp) if len(apps) == 0 { t.Fatal("It should have return apps") } } }
func setCollapsePreference(c *Context, isCollapse bool) *model.CommandResponse { pref := model.Preference{ UserId: c.Session.UserId, Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS, Name: model.PREFERENCE_NAME_COLLAPSE_SETTING, Value: strconv.FormatBool(isCollapse), } if result := <-app.Srv.Store.Preference().Save(&model.Preferences{pref}); result.Err != nil { return &model.CommandResponse{Text: c.T("api.command_expand_collapse.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} } socketMessage := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PREFERENCE_CHANGED, "", "", c.Session.UserId, nil) socketMessage.Add("preference", pref.ToJson()) go app.Publish(socketMessage) var rmsg string if isCollapse { rmsg = c.T("api.command_collapse.success") } else { rmsg = c.T("api.command_expand.success") } return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, Text: rmsg} }
func (s SqlPreferenceStore) save(transaction *gorp.Transaction, preference *model.Preference) StoreResult { result := StoreResult{} preference.PreUpdate() if result.Err = preference.IsValid(); result.Err != nil { return result } params := map[string]interface{}{ "UserId": preference.UserId, "Category": preference.Category, "Name": preference.Name, "Value": preference.Value, } if utils.Cfg.SqlSettings.DriverName == model.DATABASE_DRIVER_MYSQL { if _, err := transaction.Exec( `INSERT INTO Preferences (UserId, Category, Name, Value) VALUES (:UserId, :Category, :Name, :Value) ON DUPLICATE KEY UPDATE Value = :Value`, params); err != nil { result.Err = model.NewLocAppError("SqlPreferenceStore.save", "store.sql_preference.save.updating.app_error", nil, err.Error()) } } else if utils.Cfg.SqlSettings.DriverName == model.DATABASE_DRIVER_POSTGRES { // postgres has no way to upsert values until version 9.5 and trying inserting and then updating causes transactions to abort count, err := transaction.SelectInt( `SELECT count(0) FROM Preferences WHERE UserId = :UserId AND Category = :Category AND Name = :Name`, params) if err != nil { result.Err = model.NewLocAppError("SqlPreferenceStore.save", "store.sql_preference.save.updating.app_error", nil, err.Error()) return result } if count == 1 { s.update(transaction, preference) } else { s.insert(transaction, preference) } } else { result.Err = model.NewLocAppError("SqlPreferenceStore.save", "store.sql_preference.save.missing_driver.app_error", nil, "Failed to update preference because of missing driver") } return result }
func TestOAuthGetAccessDataByUserForApp(t *testing.T) { Setup() a1 := model.OAuthApp{} a1.CreatorId = model.NewId() a1.Name = "TestApp" + model.NewId() a1.CallbackUrls = []string{"https://nowhere.com"} a1.Homepage = "https://nowhere.com" Must(store.OAuth().SaveApp(&a1)) // allow the app p := model.Preference{} p.UserId = a1.CreatorId p.Category = model.PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP p.Name = a1.Id p.Value = "true" Must(store.Preference().Save(&model.Preferences{p})) if result := <-store.OAuth().GetAuthorizedApps(a1.CreatorId); result.Err != nil { t.Fatal(result.Err) } else { apps := result.Data.([]*model.OAuthApp) if len(apps) == 0 { t.Fatal("It should have return apps") } } // save the token ad1 := model.AccessData{} ad1.ClientId = a1.Id ad1.UserId = a1.CreatorId ad1.Token = model.NewId() ad1.RefreshToken = model.NewId() if err := (<-store.OAuth().SaveAccessData(&ad1)).Err; err != nil { t.Fatal(err) } if result := <-store.OAuth().GetAccessDataByUserForApp(a1.CreatorId, a1.Id); result.Err != nil { t.Fatal(result.Err) } else { accessData := result.Data.([]*model.AccessData) if len(accessData) == 0 { t.Fatal("It should have return access data") } } }
func setCollapsePreference(c *Context, value string) *model.CommandResponse { pref := model.Preference{ UserId: c.Session.UserId, Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS, Name: model.PREFERENCE_NAME_COLLAPSE_SETTING, Value: value, } if result := <-Srv.Store.Preference().Save(&model.Preferences{pref}); result.Err != nil { return &model.CommandResponse{Text: c.T("api.command_expand_collapse.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} } socketMessage := model.NewMessage("", "", c.Session.UserId, model.ACTION_PREFERENCE_CHANGED) socketMessage.Add("preference", pref.ToJson()) go Publish(socketMessage) return &model.CommandResponse{} }