58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"net/http"
|
|
"text/template"
|
|
"time"
|
|
|
|
"gitea.dwysokinski.me/twhelp/core/internal/adapter"
|
|
"gitea.dwysokinski.me/twhelp/core/internal/tw"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
var (
|
|
twSvcFlagUserAgent = &cli.StringFlag{
|
|
Name: "tw.userAgent",
|
|
Value: "tribalwarshelp/{{ .AppVersion }}",
|
|
EnvVars: []string{"TW_USER_AGENT"},
|
|
}
|
|
twSvcFlagTimeout = &cli.DurationFlag{
|
|
Name: "tw.timeout",
|
|
Value: 10 * time.Second, //nolint:gomnd
|
|
EnvVars: []string{"TW_TIMEOUT"},
|
|
Usage: "https://pkg.go.dev/net/http#Client.Timeout",
|
|
}
|
|
twSvcFlags = []cli.Flag{
|
|
twSvcFlagUserAgent,
|
|
twSvcFlagTimeout,
|
|
}
|
|
)
|
|
|
|
func newTWServiceFromFlags(c *cli.Context) (*adapter.TWHTTP, error) {
|
|
return newTWService(c.App.Version, c.String(twSvcFlagUserAgent.Name), c.Duration(twSvcFlagTimeout.Name))
|
|
}
|
|
|
|
func newTWService(appVersion, userAgent string, timeout time.Duration) (*adapter.TWHTTP, error) {
|
|
t, err := template.New("").Parse(userAgent)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("something went wron while parsing user agent template: %w", err)
|
|
}
|
|
|
|
buf := bytes.NewBuffer(nil)
|
|
|
|
if err = t.Execute(buf, map[string]any{
|
|
"AppVersion": appVersion,
|
|
}); err != nil {
|
|
return nil, fmt.Errorf("couldn't exec user agent template: %w", err)
|
|
}
|
|
|
|
return adapter.NewTWHTTP(tw.NewClient(
|
|
tw.WithHTTPClient(&http.Client{
|
|
Timeout: timeout,
|
|
}),
|
|
tw.WithUserAgent(buf.String()),
|
|
)), nil
|
|
}
|