1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package shared

import (
	"fmt"
	"net/http"
	"os"
	"strings"
)

const (
	versionFileName   = "www/version.txt"
	userAgentTemplate = "rss-kakapo/%s (+https://%s)"
)

type IUserAgent interface {
	AddUserAgent(req *http.Request)
}

type userAgent struct {
	userAgentValue string
}

func NewUserAgent(cfg *Config) IUserAgent {
	return &userAgent{
		userAgentValue: buildUserAgentString(cfg.Host),
	}
}

func buildUserAgentString(host string) string {
	versionBytes, _ := os.ReadFile(versionFileName)
	versionStr := string(versionBytes)
	versionStr = strings.TrimSpace(versionStr)
	versionStr = strings.TrimPrefix(versionStr, "v")
	return fmt.Sprintf(userAgentTemplate, versionStr, host)
}

func (ua *userAgent) AddUserAgent(req *http.Request) {
	req.Header.Add("User-Agent", ua.userAgentValue)
}