summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorenahum <nahumhbl@gmail.com>2017-07-27 19:22:23 -0400
committerSaturnino Abril <saturnino.abril@gmail.com>2017-08-03 02:39:14 +0800
commitfa3dd6a84bb51e8a5c3d3183bdb692386bb77c5a (patch)
treeeea9c86827db6933d535fb9172f39c348f586e77
parentb796960a2514a2eb5ae900436806f343dbddf50f (diff)
downloadchat-fa3dd6a84bb51e8a5c3d3183bdb692386bb77c5a.tar.gz
chat-fa3dd6a84bb51e8a5c3d3183bdb692386bb77c5a.tar.bz2
chat-fa3dd6a84bb51e8a5c3d3183bdb692386bb77c5a.zip
If login is using mobile respond with JSON object (#7030)
-rw-r--r--api/user.go16
-rw-r--r--api4/oauth.go24
-rw-r--r--app/oauth.go12
3 files changed, 37 insertions, 15 deletions
diff --git a/api/user.go b/api/user.go
index 0b2fbfba8..bb63cc7e2 100644
--- a/api/user.go
+++ b/api/user.go
@@ -1202,9 +1202,15 @@ func completeSaml(c *Context, w http.ResponseWriter, r *http.Request) {
relayProps = model.MapFromJson(strings.NewReader(stateStr))
}
+ action := relayProps["action"]
if user, err := samlInterface.DoLogin(encodedXML, relayProps); err != nil {
- c.Err = err
- c.Err.StatusCode = http.StatusFound
+ if action == model.OAUTH_ACTION_MOBILE {
+ err.Translate(c.T)
+ w.Write([]byte(err.ToJson()))
+ } else {
+ c.Err = err
+ c.Err.StatusCode = http.StatusFound
+ }
return
} else {
if err := app.CheckUserAdditionalAuthenticationCriteria(user, ""); err != nil {
@@ -1212,7 +1218,7 @@ func completeSaml(c *Context, w http.ResponseWriter, r *http.Request) {
c.Err.StatusCode = http.StatusFound
return
}
- action := relayProps["action"]
+
switch action {
case model.OAUTH_ACTION_SIGNUP:
teamId := relayProps["team_id"]
@@ -1243,8 +1249,8 @@ func completeSaml(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- if action == "mobile" {
- w.Write([]byte(""))
+ if action == model.OAUTH_ACTION_MOBILE {
+ ReturnStatusOK(w)
} else {
http.Redirect(w, r, app.GetProtocol(r)+"://"+r.Host, http.StatusFound)
}
diff --git a/api4/oauth.go b/api4/oauth.go
index 05a38d206..c1aa49df4 100644
--- a/api4/oauth.go
+++ b/api4/oauth.go
@@ -403,10 +403,20 @@ func completeOAuth(c *Context, w http.ResponseWriter, r *http.Request) {
uri := c.GetSiteURLHeader() + "/signup/" + service + "/complete"
body, teamId, props, err := app.AuthorizeOAuthUser(w, r, service, code, state, uri)
+
+ action := ""
+ if props != nil {
+ action = props["action"]
+ }
+
if err != nil {
err.Translate(c.T)
l4g.Error(err.Error())
- http.Redirect(w, r, c.GetSiteURLHeader()+"/error?message="+err.Message, http.StatusTemporaryRedirect)
+ if action == model.OAUTH_ACTION_MOBILE {
+ w.Write([]byte(err.ToJson()))
+ } else {
+ http.Redirect(w, r, c.GetSiteURLHeader()+"/error?message="+err.Message, http.StatusTemporaryRedirect)
+ }
return
}
@@ -414,12 +424,14 @@ func completeOAuth(c *Context, w http.ResponseWriter, r *http.Request) {
if err != nil {
err.Translate(c.T)
l4g.Error(err.Error())
- http.Redirect(w, r, c.GetSiteURLHeader()+"/error?message="+err.Message, http.StatusTemporaryRedirect)
+ if action == model.OAUTH_ACTION_MOBILE {
+ w.Write([]byte(err.ToJson()))
+ } else {
+ http.Redirect(w, r, c.GetSiteURLHeader()+"/error?message="+err.Message, http.StatusTemporaryRedirect)
+ }
return
}
- action := props["action"]
-
var redirectUrl string
if action == model.OAUTH_ACTION_EMAIL_TO_SSO {
redirectUrl = c.GetSiteURLHeader() + "/login?extra=signin_change"
@@ -429,7 +441,11 @@ func completeOAuth(c *Context, w http.ResponseWriter, r *http.Request) {
} else {
session, err := app.DoLogin(w, r, user, "")
if err != nil {
+ err.Translate(c.T)
c.Err = err
+ if action == model.OAUTH_ACTION_MOBILE {
+ w.Write([]byte(err.ToJson()))
+ }
return
}
diff --git a/app/oauth.go b/app/oauth.go
index c93882d4d..4174f8146 100644
--- a/app/oauth.go
+++ b/app/oauth.go
@@ -624,25 +624,25 @@ func AuthorizeOAuthUser(w http.ResponseWriter, r *http.Request, service, code, s
expectedToken, err := GetOAuthStateToken(stateProps["token"])
if err != nil {
- return nil, "", nil, err
+ return nil, "", stateProps, err
}
stateEmail := stateProps["email"]
stateAction := stateProps["action"]
if stateAction == model.OAUTH_ACTION_EMAIL_TO_SSO && stateEmail == "" {
- return nil, "", nil, model.NewAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.invalid_state.app_error", nil, "", http.StatusBadRequest)
+ return nil, "", stateProps, model.NewAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.invalid_state.app_error", nil, "", http.StatusBadRequest)
}
cookieValue := ""
if cookie, err := r.Cookie(COOKIE_OAUTH); err != nil {
- return nil, "", nil, model.NewAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.invalid_state.app_error", nil, "", http.StatusBadRequest)
+ return nil, "", stateProps, model.NewAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.invalid_state.app_error", nil, "", http.StatusBadRequest)
} else {
cookieValue = cookie.Value
}
expectedTokenExtra := generateOAuthStateTokenExtra(stateEmail, stateAction, cookieValue)
if expectedTokenExtra != expectedToken.Extra {
- return nil, "", nil, model.NewAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.invalid_state.app_error", nil, "", http.StatusBadRequest)
+ return nil, "", stateProps, model.NewAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.invalid_state.app_error", nil, "", http.StatusBadRequest)
}
DeleteToken(expectedToken)
@@ -674,7 +674,7 @@ func AuthorizeOAuthUser(w http.ResponseWriter, r *http.Request, service, code, s
var ar *model.AccessResponse
var bodyBytes []byte
if resp, err := utils.HttpClient().Do(req); err != nil {
- return nil, "", nil, model.NewLocAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.token_failed.app_error", nil, err.Error())
+ return nil, "", stateProps, model.NewLocAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.token_failed.app_error", nil, err.Error())
} else {
bodyBytes, _ = ioutil.ReadAll(resp.Body)
resp.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
@@ -703,7 +703,7 @@ func AuthorizeOAuthUser(w http.ResponseWriter, r *http.Request, service, code, s
req.Header.Set("Authorization", "Bearer "+ar.AccessToken)
if resp, err := utils.HttpClient().Do(req); err != nil {
- return nil, "", nil, model.NewLocAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.service.app_error",
+ return nil, "", stateProps, model.NewLocAppError("AuthorizeOAuthUser", "api.user.authorize_oauth_user.service.app_error",
map[string]interface{}{"Service": service}, err.Error())
} else {
return resp.Body, teamId, stateProps, nil