@ -0,0 +1,70 @@ |
|||
package config |
|||
|
|||
import ( |
|||
"errors" |
|||
"os" |
|||
) |
|||
|
|||
const MirrorModePublic = "PUBLIC" |
|||
const MirrorModePrivateAndPublic = "PRIVATE_AND_PUBLIC" |
|||
|
|||
type Config struct { |
|||
MirrorMode string |
|||
Gitea GiteaConfig |
|||
} |
|||
|
|||
type GiteaConfig struct { |
|||
GiteaUrl string |
|||
GiteaToken string |
|||
} |
|||
|
|||
func Read() (*Config, error) { |
|||
mirrorMode, err := readMirrorMode() |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
gitea, err := readGiteaConfig() |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
|
|||
return &Config{ |
|||
MirrorMode: mirrorMode, |
|||
Gitea: gitea, |
|||
}, nil |
|||
} |
|||
|
|||
func readGiteaConfig() (GiteaConfig, error) { |
|||
url, a := os.LookupEnv("GITEA_URL") |
|||
if !a { |
|||
return GiteaConfig{}, errors.New("") |
|||
} |
|||
|
|||
token, a := os.LookupEnv("GITEA_TOKEN") |
|||
if !a { |
|||
return GiteaConfig{}, errors.New("") |
|||
} |
|||
|
|||
return GiteaConfig{ |
|||
GiteaUrl: url, |
|||
GiteaToken: token, |
|||
}, nil |
|||
|
|||
} |
|||
|
|||
func readMirrorMode() (string, error) { |
|||
input, present := os.LookupEnv("MIRROR_MODE") |
|||
|
|||
if !present { |
|||
return MirrorModePublic, nil |
|||
} |
|||
|
|||
switch input { |
|||
case MirrorModePublic, MirrorModePrivateAndPublic: |
|||
return input, nil |
|||
default: |
|||
return "", errors.New("") |
|||
} |
|||
|
|||
} |
@ -0,0 +1,115 @@ |
|||
package config_test |
|||
|
|||
import ( |
|||
"github.com/jaedle/mirror-to-gitea/internal/config" |
|||
. "github.com/onsi/ginkgo" |
|||
. "github.com/onsi/gomega" |
|||
"os" |
|||
) |
|||
|
|||
const mirrorMode = "MIRROR_MODE" |
|||
const giteaUrl = "GITEA_URL" |
|||
const giteaToken = "GITEA_TOKEN" |
|||
|
|||
const publicMirrorMode = "PUBLIC" |
|||
const privateAndPublicMirrorMode = "PRIVATE_AND_PUBLIC" |
|||
const unknownMirrorMode = "UNKNOWN" |
|||
|
|||
var _ = Describe("Read", func() { |
|||
BeforeEach(func() { |
|||
os.Clearenv() |
|||
}) |
|||
|
|||
Context("Gitea", func() { |
|||
It("parses configuration", func() { |
|||
aValidEnv() |
|||
setEnv(giteaUrl, "https://gitea.url/api") |
|||
setEnv(giteaToken, "a-gitea-token") |
|||
|
|||
c, err := config.Read() |
|||
|
|||
Expect(err).NotTo(HaveOccurred()) |
|||
Expect(c.Gitea.GiteaUrl).To(Equal("https://gitea.url/api")) |
|||
Expect(c.Gitea.GiteaToken).To(Equal("a-gitea-token")) |
|||
}) |
|||
|
|||
It("fails on missing gitea url", func() { |
|||
aValidEnv() |
|||
unsetEnv(giteaUrl) |
|||
|
|||
c, err := config.Read() |
|||
|
|||
Expect(err).To(HaveOccurred()) |
|||
Expect(c).To(BeNil()) |
|||
}) |
|||
|
|||
It("fails on missing gitea token", func() { |
|||
aValidEnv() |
|||
unsetEnv(giteaToken) |
|||
|
|||
c, err := config.Read() |
|||
|
|||
Expect(err).To(HaveOccurred()) |
|||
Expect(c).To(BeNil()) |
|||
}) |
|||
}) |
|||
|
|||
Context("mirror mode", func() { |
|||
It("sets default mirror mode", func() { |
|||
aValidEnv() |
|||
unsetEnv(mirrorMode) |
|||
|
|||
c, err := config.Read() |
|||
|
|||
Expect(err).NotTo(HaveOccurred()) |
|||
Expect(c.MirrorMode).To(Equal(config.MirrorModePublic)) |
|||
}) |
|||
|
|||
It("allows public mirror mode PUBLIC", func() { |
|||
aValidEnv() |
|||
setEnv(mirrorMode, publicMirrorMode) |
|||
|
|||
c, err := config.Read() |
|||
|
|||
Expect(err).NotTo(HaveOccurred()) |
|||
Expect(c.MirrorMode).To(Equal(config.MirrorModePublic)) |
|||
}) |
|||
|
|||
It("allows mirror mode PRIVATE_AND_PUBLIC", func() { |
|||
aValidEnv() |
|||
setEnv(mirrorMode, privateAndPublicMirrorMode) |
|||
|
|||
c, err := config.Read() |
|||
|
|||
Expect(err).NotTo(HaveOccurred()) |
|||
Expect(c.MirrorMode).To(Equal(config.MirrorModePrivateAndPublic)) |
|||
}) |
|||
|
|||
It("fails on unknown mirror mode", func() { |
|||
aValidEnv() |
|||
setEnv(mirrorMode, unknownMirrorMode) |
|||
|
|||
c, err := config.Read() |
|||
|
|||
Expect(err).To(HaveOccurred()) |
|||
Expect(c).To(BeNil()) |
|||
}) |
|||
|
|||
}) |
|||
}) |
|||
|
|||
func setEnv(k string, v string) { |
|||
err := os.Setenv(k, v) |
|||
Expect(err).NotTo(HaveOccurred()) |
|||
} |
|||
|
|||
func unsetEnv(k string) { |
|||
err := os.Unsetenv(k) |
|||
Expect(err).NotTo(HaveOccurred()) |
|||
} |
|||
|
|||
func aValidEnv() { |
|||
setEnv(mirrorMode, "PUBLIC") |
|||
setEnv(giteaUrl, "https://gitea.url") |
|||
setEnv(giteaToken, "valid") |
|||
} |