terraform-provider-gitea/gitea/config.go

76 lines
1.7 KiB
Go
Raw Permalink Normal View History

2022-03-31 21:24:00 +00:00
package gitea
import (
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
"net/http"
"code.gitea.io/sdk/gitea"
"github.com/hashicorp/terraform-plugin-sdk/helper/logging"
)
// Config is per-provider, specifies where to connect to gitea
type Config struct {
Token string
Username string
Password string
BaseURL string
Insecure bool
CACertFile string
}
// Client returns a *gitea.Client to interact with the configured gitea instance
func (c *Config) Client() (interface{}, error) {
if c.Token == "" && c.Username == "" {
return nil, fmt.Errorf("either a token or a username needs to be used")
}
// Configure TLS/SSL
tlsConfig := &tls.Config{}
// If a CACertFile has been specified, use that for cert validation
if c.CACertFile != "" {
caCert, err := ioutil.ReadFile(c.CACertFile)
if err != nil {
return nil, err
}
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
tlsConfig.RootCAs = caCertPool
}
// If configured as insecure, turn off SSL verification
if c.Insecure {
tlsConfig.InsecureSkipVerify = true
}
t := http.DefaultTransport.(*http.Transport).Clone()
t.TLSClientConfig = tlsConfig
t.MaxIdleConnsPerHost = 100
httpClient := &http.Client{
Transport: logging.NewTransport("Gitea", t),
}
if c.BaseURL == "" {
c.BaseURL = "https://gitea.com"
}
2022-03-31 23:19:14 +00:00
var client *gitea.Client
if c.Token != "" {
2022-06-08 19:29:01 +00:00
client, _ = gitea.NewClient(c.BaseURL, gitea.SetToken(c.Token), gitea.SetHTTPClient(httpClient))
2022-03-31 23:19:14 +00:00
}
2022-03-31 21:24:00 +00:00
if c.Username != "" {
2022-06-08 19:29:01 +00:00
client, _ = gitea.NewClient(c.BaseURL, gitea.SetBasicAuth(c.Username, c.Password), gitea.SetHTTPClient(httpClient))
2022-03-31 21:24:00 +00:00
}
// Test the credentials by checking we can get information about the authenticated user.
2022-03-31 23:19:14 +00:00
_, _, err := client.GetMyUserInfo()
2022-03-31 21:24:00 +00:00
return client, err
}