arnaucube
arnaucube/mirror-to-giteaPublic Self-hosted repository
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}