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  }