github.com/vnforks/kid/v5@v5.22.1-0.20200408055009-b89d99c65676/model/access.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package model 5 6 import ( 7 "encoding/json" 8 "io" 9 "net/http" 10 ) 11 12 const ( 13 ACCESS_TOKEN_GRANT_TYPE = "authorization_code" 14 ACCESS_TOKEN_TYPE = "bearer" 15 REFRESH_TOKEN_GRANT_TYPE = "refresh_token" 16 ) 17 18 type AccessData struct { 19 ClientId string `json:"client_id"` 20 UserId string `json:"user_id"` 21 Token string `json:"token"` 22 RefreshToken string `json:"refresh_token"` 23 RedirectUri string `json:"redirect_uri"` 24 ExpiresAt int64 `json:"expires_at"` 25 Scope string `json:"scope"` 26 } 27 28 type AccessResponse struct { 29 AccessToken string `json:"access_token"` 30 TokenType string `json:"token_type"` 31 ExpiresIn int32 `json:"expires_in"` 32 Scope string `json:"scope"` 33 RefreshToken string `json:"refresh_token"` 34 } 35 36 // IsValid validates the AccessData and returns an error if it isn't configured 37 // correctly. 38 func (ad *AccessData) IsValid() *AppError { 39 40 if len(ad.ClientId) == 0 || len(ad.ClientId) > 26 { 41 return NewAppError("AccessData.IsValid", "model.access.is_valid.client_id.app_error", nil, "", http.StatusBadRequest) 42 } 43 44 if len(ad.UserId) == 0 || len(ad.UserId) > 26 { 45 return NewAppError("AccessData.IsValid", "model.access.is_valid.user_id.app_error", nil, "", http.StatusBadRequest) 46 } 47 48 if len(ad.Token) != 26 { 49 return NewAppError("AccessData.IsValid", "model.access.is_valid.access_token.app_error", nil, "", http.StatusBadRequest) 50 } 51 52 if len(ad.RefreshToken) > 26 { 53 return NewAppError("AccessData.IsValid", "model.access.is_valid.refresh_token.app_error", nil, "", http.StatusBadRequest) 54 } 55 56 if len(ad.RedirectUri) == 0 || len(ad.RedirectUri) > 256 || !IsValidHttpUrl(ad.RedirectUri) { 57 return NewAppError("AccessData.IsValid", "model.access.is_valid.redirect_uri.app_error", nil, "", http.StatusBadRequest) 58 } 59 60 return nil 61 } 62 63 func (ad *AccessData) IsExpired() bool { 64 65 if ad.ExpiresAt <= 0 { 66 return false 67 } 68 69 if GetMillis() > ad.ExpiresAt { 70 return true 71 } 72 73 return false 74 } 75 76 func (ad *AccessData) ToJson() string { 77 b, _ := json.Marshal(ad) 78 return string(b) 79 } 80 81 func AccessDataFromJson(data io.Reader) *AccessData { 82 var ad *AccessData 83 json.NewDecoder(data).Decode(&ad) 84 return ad 85 } 86 87 func (ar *AccessResponse) ToJson() string { 88 b, _ := json.Marshal(ar) 89 return string(b) 90 } 91 92 func AccessResponseFromJson(data io.Reader) *AccessResponse { 93 var ar *AccessResponse 94 json.NewDecoder(data).Decode(&ar) 95 return ar 96 }