If login is using mobile respond with JSON object (#7030)
Этот коммит содержится в:
коммит произвёл
Saturnino Abril
родитель
b796960a25
Коммит
fa3dd6a84b
16
api/user.go
16
api/user.go
@@ -1202,9 +1202,15 @@ func completeSaml(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
relayProps = model.MapFromJson(strings.NewReader(stateStr))
|
relayProps = model.MapFromJson(strings.NewReader(stateStr))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
action := relayProps["action"]
|
||||||
if user, err := samlInterface.DoLogin(encodedXML, relayProps); err != nil {
|
if user, err := samlInterface.DoLogin(encodedXML, relayProps); err != nil {
|
||||||
c.Err = err
|
if action == model.OAUTH_ACTION_MOBILE {
|
||||||
c.Err.StatusCode = http.StatusFound
|
err.Translate(c.T)
|
||||||
|
w.Write([]byte(err.ToJson()))
|
||||||
|
} else {
|
||||||
|
c.Err = err
|
||||||
|
c.Err.StatusCode = http.StatusFound
|
||||||
|
}
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
if err := app.CheckUserAdditionalAuthenticationCriteria(user, ""); err != nil {
|
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
|
c.Err.StatusCode = http.StatusFound
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
action := relayProps["action"]
|
|
||||||
switch action {
|
switch action {
|
||||||
case model.OAUTH_ACTION_SIGNUP:
|
case model.OAUTH_ACTION_SIGNUP:
|
||||||
teamId := relayProps["team_id"]
|
teamId := relayProps["team_id"]
|
||||||
@@ -1243,8 +1249,8 @@ func completeSaml(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if action == "mobile" {
|
if action == model.OAUTH_ACTION_MOBILE {
|
||||||
w.Write([]byte(""))
|
ReturnStatusOK(w)
|
||||||
} else {
|
} else {
|
||||||
http.Redirect(w, r, app.GetProtocol(r)+"://"+r.Host, http.StatusFound)
|
http.Redirect(w, r, app.GetProtocol(r)+"://"+r.Host, http.StatusFound)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -403,10 +403,20 @@ func completeOAuth(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
uri := c.GetSiteURLHeader() + "/signup/" + service + "/complete"
|
uri := c.GetSiteURLHeader() + "/signup/" + service + "/complete"
|
||||||
|
|
||||||
body, teamId, props, err := app.AuthorizeOAuthUser(w, r, service, code, state, uri)
|
body, teamId, props, err := app.AuthorizeOAuthUser(w, r, service, code, state, uri)
|
||||||
|
|
||||||
|
action := ""
|
||||||
|
if props != nil {
|
||||||
|
action = props["action"]
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err.Translate(c.T)
|
err.Translate(c.T)
|
||||||
l4g.Error(err.Error())
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -414,12 +424,14 @@ func completeOAuth(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
err.Translate(c.T)
|
err.Translate(c.T)
|
||||||
l4g.Error(err.Error())
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
action := props["action"]
|
|
||||||
|
|
||||||
var redirectUrl string
|
var redirectUrl string
|
||||||
if action == model.OAUTH_ACTION_EMAIL_TO_SSO {
|
if action == model.OAUTH_ACTION_EMAIL_TO_SSO {
|
||||||
redirectUrl = c.GetSiteURLHeader() + "/login?extra=signin_change"
|
redirectUrl = c.GetSiteURLHeader() + "/login?extra=signin_change"
|
||||||
@@ -429,7 +441,11 @@ func completeOAuth(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
} else {
|
} else {
|
||||||
session, err := app.DoLogin(w, r, user, "")
|
session, err := app.DoLogin(w, r, user, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err.Translate(c.T)
|
||||||
c.Err = err
|
c.Err = err
|
||||||
|
if action == model.OAUTH_ACTION_MOBILE {
|
||||||
|
w.Write([]byte(err.ToJson()))
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
12
app/oauth.go
12
app/oauth.go
@@ -624,25 +624,25 @@ func AuthorizeOAuthUser(w http.ResponseWriter, r *http.Request, service, code, s
|
|||||||
|
|
||||||
expectedToken, err := GetOAuthStateToken(stateProps["token"])
|
expectedToken, err := GetOAuthStateToken(stateProps["token"])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", nil, err
|
return nil, "", stateProps, err
|
||||||
}
|
}
|
||||||
|
|
||||||
stateEmail := stateProps["email"]
|
stateEmail := stateProps["email"]
|
||||||
stateAction := stateProps["action"]
|
stateAction := stateProps["action"]
|
||||||
if stateAction == model.OAUTH_ACTION_EMAIL_TO_SSO && stateEmail == "" {
|
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 := ""
|
cookieValue := ""
|
||||||
if cookie, err := r.Cookie(COOKIE_OAUTH); err != nil {
|
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 {
|
} else {
|
||||||
cookieValue = cookie.Value
|
cookieValue = cookie.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedTokenExtra := generateOAuthStateTokenExtra(stateEmail, stateAction, cookieValue)
|
expectedTokenExtra := generateOAuthStateTokenExtra(stateEmail, stateAction, cookieValue)
|
||||||
if expectedTokenExtra != expectedToken.Extra {
|
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)
|
DeleteToken(expectedToken)
|
||||||
@@ -674,7 +674,7 @@ func AuthorizeOAuthUser(w http.ResponseWriter, r *http.Request, service, code, s
|
|||||||
var ar *model.AccessResponse
|
var ar *model.AccessResponse
|
||||||
var bodyBytes []byte
|
var bodyBytes []byte
|
||||||
if resp, err := utils.HttpClient().Do(req); err != nil {
|
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 {
|
} else {
|
||||||
bodyBytes, _ = ioutil.ReadAll(resp.Body)
|
bodyBytes, _ = ioutil.ReadAll(resp.Body)
|
||||||
resp.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
|
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)
|
req.Header.Set("Authorization", "Bearer "+ar.AccessToken)
|
||||||
|
|
||||||
if resp, err := utils.HttpClient().Do(req); err != nil {
|
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())
|
map[string]interface{}{"Service": service}, err.Error())
|
||||||
} else {
|
} else {
|
||||||
return resp.Body, teamId, stateProps, nil
|
return resp.Body, teamId, stateProps, nil
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user