diff --git a/api4/user.go b/api4/user.go index 439660e991..7cda65e422 100644 --- a/api4/user.go +++ b/api4/user.go @@ -1914,6 +1914,10 @@ func login(c *Context, w http.ResponseWriter, r *http.Request) { } func loginCWS(c *Context, w http.ResponseWriter, r *http.Request) { + campaignToURL := map[string]string{ + "focalboard": "/boards", + } + if !c.App.Channels().License().IsCloud() { c.Err = model.NewAppError("loginCWS", "api.user.login_cws.license.error", nil, "", http.StatusUnauthorized) return @@ -1921,6 +1925,7 @@ func loginCWS(c *Context, w http.ResponseWriter, r *http.Request) { r.ParseForm() var loginID string var token string + var campaign string if len(r.Form) > 0 { for key, value := range r.Form { if key == "login_id" { @@ -1929,6 +1934,9 @@ func loginCWS(c *Context, w http.ResponseWriter, r *http.Request) { if key == "cws_token" { token = value[0] } + if key == "utm_campaign" { + campaign = value[0] + } } } @@ -1952,7 +1960,14 @@ func loginCWS(c *Context, w http.ResponseWriter, r *http.Request) { } c.LogAuditWithUserId(user.Id, "success") c.App.AttachSessionCookies(c.AppContext, w, r) - http.Redirect(w, r, *c.App.Config().ServiceSettings.SiteURL, http.StatusFound) + + redirectURL := *c.App.Config().ServiceSettings.SiteURL + if len(campaign) > 0 { + if url, ok := campaignToURL[campaign]; ok { + redirectURL += url + } + } + http.Redirect(w, r, redirectURL , http.StatusFound) } func logout(c *Context, w http.ResponseWriter, r *http.Request) { diff --git a/app/login.go b/app/login.go index bd63787546..16cc2d515f 100644 --- a/app/login.go +++ b/app/login.go @@ -63,7 +63,6 @@ func (a *App) AuthenticateUserForLogin(c *request.Context, id, loginId, password if user, err = a.GetUserForLogin(id, loginId); err != nil { return nil, err } - // CWS login allow to use the one-time token to login the users when they're redirected to their // installation for the first time if IsCWSLogin(a, cwsToken) { diff --git a/model/feature_flags.go b/model/feature_flags.go index ae1005b30d..8bce7a1a88 100644 --- a/model/feature_flags.go +++ b/model/feature_flags.go @@ -76,6 +76,8 @@ type FeatureFlags struct { ThreadsEverywhere bool GlobalDrafts bool + + UrlMappingForCWS bool } func (f *FeatureFlags) SetDefaults() { @@ -105,6 +107,7 @@ func (f *FeatureFlags) SetDefaults() { f.ReduceOnBoardingTaskList = false f.ThreadsEverywhere = false f.GlobalDrafts = false + f.UrlMappingForCWS = false } func (f *FeatureFlags) Plugins() map[string]string {