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      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}