github.com/chenbh/concourse/v6@v6.4.2/skymarshal/skycmd/github_flags.go (about)

     1  package skycmd
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  
     7  	"github.com/concourse/dex/connector/github"
     8  	"github.com/concourse/flag"
     9  	multierror "github.com/hashicorp/go-multierror"
    10  )
    11  
    12  func init() {
    13  	RegisterConnector(&Connector{
    14  		id:         "github",
    15  		config:     &GithubFlags{},
    16  		teamConfig: &GithubTeamFlags{},
    17  	})
    18  }
    19  
    20  type GithubFlags struct {
    21  	ClientID     string    `long:"client-id" description:"(Required) Client id"`
    22  	ClientSecret string    `long:"client-secret" description:"(Required) Client secret"`
    23  	Host         string    `long:"host" description:"Hostname of GitHub Enterprise deployment (No scheme, No trailing slash)"`
    24  	CACert       flag.File `long:"ca-cert" description:"CA certificate of GitHub Enterprise deployment"`
    25  }
    26  
    27  func (flag *GithubFlags) Name() string {
    28  	return "GitHub"
    29  }
    30  
    31  func (flag *GithubFlags) Validate() error {
    32  	var errs *multierror.Error
    33  
    34  	if flag.ClientID == "" {
    35  		errs = multierror.Append(errs, errors.New("Missing client-id"))
    36  	}
    37  
    38  	if flag.ClientSecret == "" {
    39  		errs = multierror.Append(errs, errors.New("Missing client-secret"))
    40  	}
    41  
    42  	return errs.ErrorOrNil()
    43  }
    44  
    45  func (flag *GithubFlags) Serialize(redirectURI string) ([]byte, error) {
    46  	if err := flag.Validate(); err != nil {
    47  		return nil, err
    48  	}
    49  
    50  	return json.Marshal(github.Config{
    51  		ClientID:      flag.ClientID,
    52  		ClientSecret:  flag.ClientSecret,
    53  		RedirectURI:   redirectURI,
    54  		HostName:      flag.Host,
    55  		RootCA:        flag.CACert.Path(),
    56  		TeamNameField: "both",
    57  		LoadAllGroups: true,
    58  	})
    59  }
    60  
    61  type GithubTeamFlags struct {
    62  	Users []string `long:"user" description:"A whitelisted GitHub user" value-name:"USERNAME"`
    63  	Orgs  []string `long:"org" description:"A whitelisted GitHub org" value-name:"ORG_NAME"`
    64  	Teams []string `long:"team" description:"A whitelisted GitHub team" value-name:"ORG_NAME:TEAM_NAME"`
    65  }
    66  
    67  func (flag *GithubTeamFlags) GetUsers() []string {
    68  	return flag.Users
    69  }
    70  
    71  func (flag *GithubTeamFlags) GetGroups() []string {
    72  	return append(flag.Orgs, flag.Teams...)
    73  }