A starkingdoms-api/.gitignore => starkingdoms-api/.gitignore +1 -0
@@ 0,0 1,1 @@
+config.yml<
\ No newline at end of file
A starkingdoms-api/cmd/starkingdoms-api/main.go => starkingdoms-api/cmd/starkingdoms-api/main.go +52 -0
@@ 0,0 1,52 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "github.com/sirupsen/logrus"
+ starkingdoms_api "gitlab.com/starkingdoms.tk/starkingdoms.tk/starkingdoms-api"
+ "net/http"
+ "os"
+)
+
+func main() {
+ configPath := flag.String("config", "config.yml", "File to load configuration file from")
+ printUsage := flag.Bool("help", false, "Show command line usage")
+
+ flag.Parse()
+
+ if *printUsage {
+ flag.Usage()
+ os.Exit(0)
+ }
+
+ c, err := starkingdoms_api.LoadConfig(*configPath)
+
+ if err != nil {
+ fmt.Printf("failed to load config: %s", err)
+ os.Exit(1)
+ }
+
+ if c.Logging.Format == "json" {
+ logrus.SetFormatter(&logrus.JSONFormatter{})
+ }
+ logrus.SetLevel(c.Logging.Level)
+
+ logrus.WithFields(logrus.Fields{
+ "host": c.Server.Host,
+ "port": c.Server.Port,
+ }).Info("starting http listener")
+
+ http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {
+ logrus.WithFields(logrus.Fields{
+ "remote": r.RemoteAddr,
+ }).Info("GET /ping")
+
+ _, err := fmt.Fprintf(w, "pong")
+ if err != nil {
+ logrus.Error(err)
+ }
+ })
+
+ logrus.Error(http.ListenAndServe(c.Server.Host+":"+c.Server.Port, nil))
+}
A starkingdoms-api/config.go => starkingdoms-api/config.go +40 -0
@@ 0,0 1,40 @@
+package starkingdoms_api
+
+import (
+ "github.com/sirupsen/logrus"
+ "gopkg.in/yaml.v3"
+ "os"
+)
+
+type Config struct {
+ Server struct {
+ Host string `yaml:"host"`
+ Port string `yaml:"port"`
+ } `yaml:"server"`
+ Logging struct {
+ Format string `yaml:"format"`
+ Level logrus.Level `yaml:"level"`
+ } `yaml:"logging"`
+}
+
+func LoadConfig(path string) (*Config, error) {
+ f, err := os.Open(path)
+ if err != nil {
+ return nil, err
+ }
+
+ var cfg Config
+ decoder := yaml.NewDecoder(f)
+
+ err = decoder.Decode(&cfg)
+ if err != nil {
+ return nil, err
+ }
+
+ err = f.Close()
+ if err != nil {
+ return nil, err
+ }
+
+ return &cfg, nil
+}
A starkingdoms-api/go.mod => starkingdoms-api/go.mod +9 -0
@@ 0,0 1,9 @@
+module gitlab.com/starkingdoms.tk/starkingdoms.tk/starkingdoms-api
+
+go 1.21.3
+
+require (
+ github.com/sirupsen/logrus v1.9.3 // indirect
+ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
A starkingdoms-api/go.sum => starkingdoms-api/go.sum +13 -0
@@ 0,0 1,13 @@
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=