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 GiteaConfig
15 Github GithubConfig
16}
17
18type GiteaConfig struct {
19 GiteaUrl string
20 GiteaToken string
21}
22
23type GithubConfig struct {
24 Username string
25 Token *string
26}
27
28func Read() (*Config, error) {
29 mirrorMode, err := readMirrorMode()
30 if err != nil {
31 return nil, err
32 }
33
34 gitea, err := readGiteaConfig()
35 if err != nil {
36 return nil, err
37 }
38
39 github, err := readGithubConfig()
40 if err != nil {
41 return nil, err
42 }
43
44 return &Config{
45 MirrorMode: mirrorMode,
46 Gitea: gitea,
47 Github: github,
48 }, nil
49}
50
51func readGiteaConfig() (GiteaConfig, error) {
52 url, a := os.LookupEnv("GITEA_URL")
53 if !a {
54 return GiteaConfig{}, errors.New("missing mandatory parameter GITEA_URL, please specify your target gitea instance")
55 }
56
57 token, a := os.LookupEnv("GITEA_TOKEN")
58 if !a {
59 return GiteaConfig{}, errors.New("missing mandatory parameter GITEA_TOKEN, please specify your gitea application token")
60 }
61
62 return GiteaConfig{
63 GiteaUrl: url,
64 GiteaToken: token,
65 }, nil
66
67}
68
69func readGithubConfig() (GithubConfig, error) {
70 username, present := os.LookupEnv("GITHUB_USERNAME")
71
72 if !present {
73 return GithubConfig{}, errors.New("")
74 }
75
76 var token *string = nil
77 if val, hasToken := os.LookupEnv("GITHUB_TOKEN"); hasToken {
78 token = &val
79 }
80
81 return GithubConfig{
82 Username: username,
83 Token: token,
84 }, nil
85}
86
87func readMirrorMode() (string, error) {
88 input, present := os.LookupEnv("MIRROR_MODE")
89
90 if !present {
91 return MirrorModePublic, nil
92 }
93
94 switch input {
95 case MirrorModePublic, MirrorModePrivateAndPublic:
96 return input, nil
97 default:
98 return "", fmt.Errorf("unknown mirror mode %s, please specify a valid mirror mode: PUBLIC, PRIVATE_AND_PUBLIC", input)
99 }
100
101}