github.com/adacta-ru/mattermost-server/v6@v6.0.0/model/gitlab/gitlab.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package oauthgitlab 5 6 import ( 7 "encoding/json" 8 "errors" 9 "io" 10 "strconv" 11 "strings" 12 13 "github.com/adacta-ru/mattermost-server/v6/einterfaces" 14 "github.com/adacta-ru/mattermost-server/v6/model" 15 ) 16 17 type GitLabProvider struct { 18 } 19 20 type GitLabUser struct { 21 Id int64 `json:"id"` 22 Username string `json:"username"` 23 Login string `json:"login"` 24 Email string `json:"email"` 25 Name string `json:"name"` 26 } 27 28 func init() { 29 provider := &GitLabProvider{} 30 einterfaces.RegisterOauthProvider(model.USER_AUTH_SERVICE_GITLAB, provider) 31 } 32 33 func userFromGitLabUser(glu *GitLabUser) *model.User { 34 user := &model.User{} 35 username := glu.Username 36 if username == "" { 37 username = glu.Login 38 } 39 user.Username = model.CleanUsername(username) 40 splitName := strings.Split(glu.Name, " ") 41 if len(splitName) == 2 { 42 user.FirstName = splitName[0] 43 user.LastName = splitName[1] 44 } else if len(splitName) >= 2 { 45 user.FirstName = splitName[0] 46 user.LastName = strings.Join(splitName[1:], " ") 47 } else { 48 user.FirstName = glu.Name 49 } 50 user.Email = glu.Email 51 user.Email = strings.ToLower(user.Email) 52 userId := glu.getAuthData() 53 user.AuthData = &userId 54 user.AuthService = model.USER_AUTH_SERVICE_GITLAB 55 56 return user 57 } 58 59 func gitLabUserFromJson(data io.Reader) (*GitLabUser, error) { 60 decoder := json.NewDecoder(data) 61 var glu GitLabUser 62 err := decoder.Decode(&glu) 63 if err != nil { 64 return nil, err 65 } 66 return &glu, nil 67 } 68 69 func (glu *GitLabUser) ToJson() string { 70 b, err := json.Marshal(glu) 71 if err != nil { 72 return "" 73 } 74 return string(b) 75 } 76 77 func (glu *GitLabUser) IsValid() error { 78 if glu.Id == 0 { 79 return errors.New("user id can't be 0") 80 } 81 82 if glu.Email == "" { 83 return errors.New("user e-mail should not be empty") 84 } 85 86 return nil 87 } 88 89 func (glu *GitLabUser) getAuthData() string { 90 return strconv.FormatInt(glu.Id, 10) 91 } 92 93 func (m *GitLabProvider) GetUserFromJson(data io.Reader, tokenUser *model.User) (*model.User, error) { 94 glu, err := gitLabUserFromJson(data) 95 if err != nil { 96 return nil, err 97 } 98 if err = glu.IsValid(); err != nil { 99 return nil, err 100 } 101 102 return userFromGitLabUser(glu), nil 103 } 104 105 func (m *GitLabProvider) GetSSOSettings(config *model.Config, service string) (*model.SSOSettings, error) { 106 return &config.GitLabSettings, nil 107 } 108 109 func (m *GitLabProvider) GetUserFromIdToken(idToken string) (*model.User, error) { 110 return nil, nil 111 }