matterbridge/vendor/github.com/mattermost/platform/model/authorize.go

160 lines
4.3 KiB
Go
Raw Normal View History

2017-08-16 23:37:37 +02:00
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
2016-04-10 23:39:38 +02:00
// See License.txt for license information.
package model
import (
"encoding/json"
"io"
2017-08-16 23:37:37 +02:00
"net/http"
2016-04-10 23:39:38 +02:00
)
const (
AUTHCODE_EXPIRE_TIME = 60 * 10 // 10 minutes
AUTHCODE_RESPONSE_TYPE = "code"
2016-08-15 18:47:31 +02:00
DEFAULT_SCOPE = "user"
2016-04-10 23:39:38 +02:00
)
type AuthData struct {
ClientId string `json:"client_id"`
UserId string `json:"user_id"`
Code string `json:"code"`
ExpiresIn int32 `json:"expires_in"`
CreateAt int64 `json:"create_at"`
RedirectUri string `json:"redirect_uri"`
State string `json:"state"`
Scope string `json:"scope"`
}
2017-08-16 23:37:37 +02:00
type AuthorizeRequest struct {
ResponseType string `json:"response_type"`
ClientId string `json:"client_id"`
RedirectUri string `json:"redirect_uri"`
Scope string `json:"scope"`
State string `json:"state"`
}
2016-04-10 23:39:38 +02:00
// IsValid validates the AuthData and returns an error if it isn't configured
// correctly.
func (ad *AuthData) IsValid() *AppError {
if len(ad.ClientId) != 26 {
2018-02-09 00:11:04 +01:00
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.client_id.app_error", nil, "", http.StatusBadRequest)
2016-04-10 23:39:38 +02:00
}
if len(ad.UserId) != 26 {
2018-02-09 00:11:04 +01:00
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.user_id.app_error", nil, "", http.StatusBadRequest)
2016-04-10 23:39:38 +02:00
}
if len(ad.Code) == 0 || len(ad.Code) > 128 {
2018-02-09 00:11:04 +01:00
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.auth_code.app_error", nil, "client_id="+ad.ClientId, http.StatusBadRequest)
2016-04-10 23:39:38 +02:00
}
if ad.ExpiresIn == 0 {
2018-02-09 00:11:04 +01:00
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.expires.app_error", nil, "", http.StatusBadRequest)
2016-04-10 23:39:38 +02:00
}
if ad.CreateAt <= 0 {
2018-02-09 00:11:04 +01:00
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.create_at.app_error", nil, "client_id="+ad.ClientId, http.StatusBadRequest)
2016-04-10 23:39:38 +02:00
}
2017-08-16 23:37:37 +02:00
if len(ad.RedirectUri) == 0 || len(ad.RedirectUri) > 256 || !IsValidHttpUrl(ad.RedirectUri) {
2018-02-09 00:11:04 +01:00
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.redirect_uri.app_error", nil, "client_id="+ad.ClientId, http.StatusBadRequest)
2016-04-10 23:39:38 +02:00
}
if len(ad.State) > 128 {
2018-02-09 00:11:04 +01:00
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.state.app_error", nil, "client_id="+ad.ClientId, http.StatusBadRequest)
2016-04-10 23:39:38 +02:00
}
if len(ad.Scope) > 128 {
2018-02-09 00:11:04 +01:00
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.scope.app_error", nil, "client_id="+ad.ClientId, http.StatusBadRequest)
2016-04-10 23:39:38 +02:00
}
return nil
}
2017-08-16 23:37:37 +02:00
// IsValid validates the AuthorizeRequest and returns an error if it isn't configured
// correctly.
func (ar *AuthorizeRequest) IsValid() *AppError {
if len(ar.ClientId) != 26 {
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.client_id.app_error", nil, "", http.StatusBadRequest)
}
if len(ar.ResponseType) == 0 {
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.response_type.app_error", nil, "", http.StatusBadRequest)
}
if len(ar.RedirectUri) == 0 || len(ar.RedirectUri) > 256 || !IsValidHttpUrl(ar.RedirectUri) {
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.redirect_uri.app_error", nil, "client_id="+ar.ClientId, http.StatusBadRequest)
}
if len(ar.State) > 128 {
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.state.app_error", nil, "client_id="+ar.ClientId, http.StatusBadRequest)
}
if len(ar.Scope) > 128 {
return NewAppError("AuthData.IsValid", "model.authorize.is_valid.scope.app_error", nil, "client_id="+ar.ClientId, http.StatusBadRequest)
}
return nil
}
2016-04-10 23:39:38 +02:00
func (ad *AuthData) PreSave() {
if ad.ExpiresIn == 0 {
ad.ExpiresIn = AUTHCODE_EXPIRE_TIME
}
if ad.CreateAt == 0 {
ad.CreateAt = GetMillis()
}
2016-08-15 18:47:31 +02:00
if len(ad.Scope) == 0 {
ad.Scope = DEFAULT_SCOPE
}
2016-04-10 23:39:38 +02:00
}
func (ad *AuthData) ToJson() string {
b, err := json.Marshal(ad)
if err != nil {
return ""
} else {
return string(b)
}
}
func AuthDataFromJson(data io.Reader) *AuthData {
decoder := json.NewDecoder(data)
var ad AuthData
err := decoder.Decode(&ad)
if err == nil {
return &ad
} else {
return nil
}
}
2017-08-16 23:37:37 +02:00
func (ar *AuthorizeRequest) ToJson() string {
b, err := json.Marshal(ar)
if err != nil {
return ""
} else {
return string(b)
}
}
func AuthorizeRequestFromJson(data io.Reader) *AuthorizeRequest {
decoder := json.NewDecoder(data)
var ar AuthorizeRequest
err := decoder.Decode(&ar)
if err == nil {
return &ar
} else {
return nil
}
}
2016-04-10 23:39:38 +02:00
func (ad *AuthData) IsExpired() bool {
2018-02-09 00:11:04 +01:00
return GetMillis() > ad.CreateAt+int64(ad.ExpiresIn*1000)
2016-04-10 23:39:38 +02:00
}