mirror-to-gitea/internal/config/read.go
internal/config/read.goRaw
1package config
2
3import (
4 "errors"
5 "fmt"
6 "os"
7)
8
9const MirrorModePublic = "PUBLIC"
10const MirrorModePrivateAndPublic = "PRIVATE_AND_PUBLIC"
11
12type Config struct {
13 MirrorMode string
14 Gitea Gitea
15 Github Github
16}
17
18type Gitea struct {
19 Url string
20 Token string
21}
22
23type Github struct {
24 Username string
25 Token *string
26}
27
28func readGiteaConfig() (Gitea, error) {
29 url, a := os.LookupEnv("GITEA_URL")
30 if !a {
31 return Gitea{}, errors.New("missing mandatory parameter GITEA_URL, please specify your target gitea instance")
32 }
33
34 token, a := os.LookupEnv("GITEA_TOKEN")
35 if !a {
36 return Gitea{}, errors.New("missing mandatory parameter GITEA_TOKEN, please specify your gitea application token")
37 }
38
39 return Gitea{
40 Url: url,
41 Token: token,
42 }, nil
43
44}
45
46func readGithubConfig() (Github, error) {
47 username, present := os.LookupEnv("GITHUB_USERNAME")
48
49 if !present {
50 return Github{}, errors.New("")
51 }
52
53 var token *string = nil
54 if val, hasToken := os.LookupEnv("GITHUB_TOKEN"); hasToken {
55 token = &val
56 }
57
58 return Github{
59 Username: username,
60 Token: token,
61 }, nil
62}
63
64func readMirrorMode() (string, error) {
65 input, present := os.LookupEnv("MIRROR_MODE")
66
67 if !present {
68 return MirrorModePublic, nil
69 }
70
71 switch input {
72 case MirrorModePublic, MirrorModePrivateAndPublic:
73 return input, nil
74 default:
75 return "", fmt.Errorf("unknown mirror mode %s, please specify a valid mirror mode: PUBLIC, PRIVATE_AND_PUBLIC", input)
76 }
77
78}
79
80type Reader struct {
81}
82
83func (r Reader) Read() (*Config, error) {
84 mirrorMode, err := readMirrorMode()
85 if err != nil {
86 return nil, err
87 }
88
89 gitea, err := readGiteaConfig()
90 if err != nil {
91 return nil, err
92 }
93
94 github, err := readGithubConfig()
95 if err != nil {
96 return nil, err
97 }
98
99 return &Config{
100 MirrorMode: mirrorMode,
101 Gitea: gitea,
102 Github: github,
103 }, nil
104}
105
106func NewReader() *Reader {
107 return &Reader{}
108}