mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Store service credentials securely in the stores supported by docker: - https://github.com/docker/docker-credential-helpers#available-programs Introduces a top-level config property, "secretStore" and additional command line arguments to manage the stored secrets. The value of secretStore is used to find a helper command, `docker-credential-<secretStore>`. The docker project currently provides 4 store helpers: - "osxkeychain" (OS X only) - "secretservice" (Linux only) - "wincred" (Windows only) - "pass" (any OS supporting pass, which uses gpg2) Docker-for-desktop installs the credential helpers above, as well as "desktop" (docker-credential-desktop). Generic installation instructions for the helpers: - https://github.com/docker/docker-credential-helpers#installation Users could provide additional helpers, the only requirement is that the helper implements the credential store protocol: - https://github.com/docker/docker-credential-helpers#development The credential protocol is open, and new credential stores can be implemented by any CLI satisfying the protocol: - https://github.com/docker/docker-credential-helpers#development The modifications to existing modules is not tested due to lack of API keys, but demonstrates the unobtrusive changes required to use the secret store.
82 lines
2.6 KiB
Go
82 lines
2.6 KiB
Go
package jira
|
||
|
||
import (
|
||
"os"
|
||
|
||
"github.com/olebedev/config"
|
||
"github.com/wtfutil/wtf/cfg"
|
||
)
|
||
|
||
const (
|
||
defaultFocusable = true
|
||
defaultTitle = "Jira"
|
||
)
|
||
|
||
type colors struct {
|
||
rows struct {
|
||
even string
|
||
odd string
|
||
}
|
||
}
|
||
|
||
type Settings struct {
|
||
colors
|
||
common *cfg.Common
|
||
|
||
apiKey string `help:"Your Jira API key (or password for basic auth)."`
|
||
domain string `help:"Your Jira corporate domain."`
|
||
email string `help:"The email address associated with your Jira account (or username for basic auth)."`
|
||
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"`
|
||
projects []string `help:"An array of projects to get data from"`
|
||
username string `help:"Your Jira username."`
|
||
verifyServerCertificate bool `help:"Determines whether or not the server’s certificate chain and host name are verified." values:"true or false" optional:"true"`
|
||
}
|
||
|
||
func NewSettingsFromYAML(name string, ymlConfig *config.Config, globalConfig *config.Config) *Settings {
|
||
|
||
settings := Settings{
|
||
common: cfg.NewCommonSettingsFromModule(name, defaultTitle, defaultFocusable, ymlConfig, globalConfig),
|
||
|
||
apiKey: ymlConfig.UString("apiKey", ymlConfig.UString("apikey", os.Getenv("WTF_JIRA_API_KEY"))),
|
||
domain: ymlConfig.UString("domain"),
|
||
email: ymlConfig.UString("email"),
|
||
jql: ymlConfig.UString("jql"),
|
||
username: ymlConfig.UString("username"),
|
||
verifyServerCertificate: ymlConfig.UBool("verifyServerCertificate", true),
|
||
}
|
||
|
||
cfg.ModuleSecret(name, globalConfig, &settings.apiKey).
|
||
Service(settings.domain).Load()
|
||
|
||
settings.colors.rows.even = ymlConfig.UString("colors.even", "lightblue")
|
||
settings.colors.rows.odd = ymlConfig.UString("colors.odd", "white")
|
||
|
||
settings.projects = settings.arrayifyProjects(ymlConfig, globalConfig)
|
||
|
||
return &settings
|
||
}
|
||
|
||
/* -------------------- Unexported functions -------------------- */
|
||
|
||
// arrayifyProjects figures out if we're dealing with a single project or an array of projects
|
||
func (settings *Settings) arrayifyProjects(ymlConfig *config.Config, globalConfig *config.Config) []string {
|
||
projects := []string{}
|
||
|
||
// Single project
|
||
project, err := ymlConfig.String("project")
|
||
if err == nil {
|
||
projects = append(projects, project)
|
||
return projects
|
||
}
|
||
|
||
// Array of projects
|
||
projectList := ymlConfig.UList("project")
|
||
for _, projectName := range projectList {
|
||
if project, ok := projectName.(string); ok {
|
||
projects = append(projects, project)
|
||
}
|
||
}
|
||
|
||
return projects
|
||
}
|