github.com/wtfutil/wtf@v0.43.0/modules/jira/settings.go (about)

     1  package jira
     2  
     3  import (
     4  	"os"
     5  
     6  	"github.com/olebedev/config"
     7  	"github.com/wtfutil/wtf/cfg"
     8  )
     9  
    10  const (
    11  	defaultFocusable = true
    12  	defaultTitle     = "Jira"
    13  )
    14  
    15  type colors struct {
    16  	rows struct {
    17  		even string
    18  		odd  string
    19  	}
    20  }
    21  
    22  type Settings struct {
    23  	colors
    24  	*cfg.Common
    25  
    26  	apiKey                  string   `help:"Your Jira API key (or password for basic auth)."`
    27  	personalAccessToken     string   `help:"Access Token to use instead of username / password auth"`
    28  	domain                  string   `help:"Your Jira corporate domain."`
    29  	email                   string   `help:"The email address associated with your Jira account (or username for basic auth)."`
    30  	jql                     string   `help:"Custom JQL to be appended to the search query." values:"See Search Jira like a boss with JQL for details." optional:"true"`
    31  	projects                []string `help:"An array of projects to get data from"`
    32  	username                string   `help:"Your Jira username."`
    33  	verifyServerCertificate bool     `help:"Determines whether or not the server’s certificate chain and host name are verified." values:"true or false" optional:"true"`
    34  }
    35  
    36  func NewSettingsFromYAML(name string, ymlConfig *config.Config, globalConfig *config.Config) *Settings {
    37  
    38  	settings := Settings{
    39  		Common: cfg.NewCommonSettingsFromModule(name, defaultTitle, defaultFocusable, ymlConfig, globalConfig),
    40  
    41  		apiKey:                  ymlConfig.UString("apiKey", ymlConfig.UString("apikey", os.Getenv("WTF_JIRA_API_KEY"))),
    42  		personalAccessToken:     ymlConfig.UString("personalAccessToken"),
    43  		domain:                  ymlConfig.UString("domain"),
    44  		email:                   ymlConfig.UString("email"),
    45  		jql:                     ymlConfig.UString("jql"),
    46  		username:                ymlConfig.UString("username"),
    47  		verifyServerCertificate: ymlConfig.UBool("verifyServerCertificate", true),
    48  	}
    49  
    50  	cfg.ModuleSecret(name, globalConfig, &settings.apiKey).
    51  		Service(settings.domain).Load()
    52  
    53  	settings.colors.rows.even = ymlConfig.UString("colors.even", "lightblue")
    54  	settings.colors.rows.odd = ymlConfig.UString("colors.odd", "white")
    55  
    56  	settings.projects = settings.arrayifyProjects(ymlConfig)
    57  
    58  	return &settings
    59  }
    60  
    61  /* -------------------- Unexported functions -------------------- */
    62  
    63  // arrayifyProjects figures out if we're dealing with a single project or an array of projects
    64  func (settings *Settings) arrayifyProjects(ymlConfig *config.Config) []string {
    65  	projects := []string{}
    66  
    67  	// Single project
    68  	project, err := ymlConfig.String("project")
    69  	if err == nil {
    70  		projects = append(projects, project)
    71  		return projects
    72  	}
    73  
    74  	// Array of projects
    75  	projectList := ymlConfig.UList("project")
    76  	for _, projectName := range projectList {
    77  		if project, ok := projectName.(string); ok {
    78  			projects = append(projects, project)
    79  		}
    80  	}
    81  
    82  	return projects
    83  }