Skip to content

Commit

Permalink
viper -> koanf
Browse files Browse the repository at this point in the history
  • Loading branch information
kdudkov committed Sep 4, 2024
1 parent 7db2cbf commit b49600d
Show file tree
Hide file tree
Showing 13 changed files with 296 additions and 462 deletions.
15 changes: 8 additions & 7 deletions cmd/goatak_server/cert_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (

"github.com/gofiber/fiber/v2"
"github.com/google/uuid"

"github.com/kdudkov/goatak/pkg/log"

"github.com/kdudkov/goatak/cmd/goatak_server/mp"
Expand Down Expand Up @@ -58,7 +59,7 @@ func getTLSConfigHandler(app *App) fiber.Handler {
names := map[string]string{"C": "RU", "O": "goatak", "OU": "goatak"}
buf := strings.Builder{}
buf.WriteString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
buf.WriteString(fmt.Sprintf("<certificateConfig validityDays=\"%d\"><nameEntries>", app.config.certTTLDays))
buf.WriteString(fmt.Sprintf("<certificateConfig validityDays=\"%d\"><nameEntries>", app.config.CertTTLDays()))

for k, v := range names {
buf.WriteString(fmt.Sprintf("<nameEntry name=\"%s\" value=\"%s\"/>", k, v))
Expand Down Expand Up @@ -122,7 +123,7 @@ func (app *App) processSignRequest(ctx *fiber.Ctx) (*x509.Certificate, error) {
}

signedCert, err := signClientCert(uid, clientCSR,
app.config.serverCert, app.config.tlsCert.PrivateKey, app.config.certTTLDays)
app.config.serverCert, app.config.tlsCert.PrivateKey, app.config.CertTTLDays())
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -215,18 +216,18 @@ func getProfileEnrollmentHandler(app *App) fiber.Handler {
return ctx.SendStatus(fiber.StatusNoContent)
}

mp := mp.NewMissionPackage("ProfileMissionPackage-"+uuid.NewString(), "Enrollment")
mp.Param("onReceiveImport", "true")
mp.Param("onReceiveDelete", "true")
pkg := mp.NewMissionPackage("ProfileMissionPackage-"+uuid.NewString(), "Enrollment")
pkg.Param("onReceiveImport", "true")
pkg.Param("onReceiveDelete", "true")

for _, f := range files {
mp.AddFile(f)
pkg.AddFile(f)
}

ctx.Set(fiber.HeaderContentType, "application/zip")
ctx.Set(fiber.HeaderContentDisposition, "attachment; filename=profile.zip")

dat, err := mp.Create()
dat, err := pkg.Create()
if err != nil {
return err
}
Expand Down
127 changes: 127 additions & 0 deletions cmd/goatak_server/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package main

import (
"crypto/tls"
"crypto/x509"
"fmt"
"os"

"github.com/knadh/koanf/v2"

"github.com/kdudkov/goatak/pkg/tlsutil"
)

type AppConfig struct {
k *koanf.Koanf

tlsCert *tls.Certificate
certPool *x509.CertPool
serverCert *x509.Certificate
ca []*x509.Certificate
}

func (c *AppConfig) DataDir() string {
return c.k.String("data_dir")
}

func (c *AppConfig) UsersFile() string {
return c.k.String("users_file")
}

func (c *AppConfig) WelcomeMsg() string {
return c.k.String("welcome_msg")
}

func (c *AppConfig) LogAll() bool {
return c.k.Bool("log")
}
func (c *AppConfig) DataSync() bool {
return c.k.Bool("datasync")
}
func (c *AppConfig) UseSSL() bool {
return c.k.Bool("ssl.use_ssl")
}

func (c *AppConfig) CertTTLDays() int {
return c.k.Int("ssl.cert_ttl_days")
}

func (c *AppConfig) Connections() []string {
return nil
}

func (c *AppConfig) LogExclude() []string {
return c.k.Strings("log_exclude")
}

func (c *AppConfig) processCerts() error {
for _, name := range []string{"ssl.ca", "ssl.cert", "ssl.key"} {
if c.k.String(name) == "" {
return nil
}
}

roots := x509.NewCertPool()
c.certPool = roots

ca, err := loadPem(c.k.String("ssl.ca"))
if err != nil {
return err
}

for _, c := range ca {
roots.AddCert(c)
}

c.ca = ca

cert, err := loadPem(c.k.String("ssl.cert"))
if err != nil {
return err
}

if len(cert) > 0 {
c.serverCert = cert[0]
}

for _, c := range cert {
roots.AddCert(c)
}

tlsCert, err := tls.LoadX509KeyPair(c.k.String("ssl.cert"), c.k.String("ssl.key"))
if err != nil {
return err
}

c.tlsCert = &tlsCert

return nil
}

func loadPem(name string) ([]*x509.Certificate, error) {
if name == "" {
return nil, nil
}

pemBytes, err := os.ReadFile(name)
if err != nil {
return nil, fmt.Errorf("error loading %s: %s", name, err.Error())
}

return tlsutil.DecodeAllCerts(pemBytes)
}

func SetDefaults(k *koanf.Koanf) {
k.Set("udp_addr", ":8999")
k.Set("tcp_addr", ":8999")
k.Set("ssl_addr", ":8089")
k.Set("api_addr", ":8080")
k.Set("data_dir", "data")

k.Set("me.lat", 59.8396)
k.Set("me.lon", 31.0213)
k.Set("users_file", "users.yml")

k.Set("me.zoom", 10)
k.Set("ssl.cert_ttl_days", 365)
}
10 changes: 5 additions & 5 deletions cmd/goatak_server/http_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ func NewHttp(app *App) *HttpServer {
listeners: make(map[string]Listener),
}

if app.config.adminAddr != "" {
srv.listeners["admin api calls"] = NewAdminAPI(app, app.config.adminAddr, app.config.webtakRoot)
if addr := app.config.k.String("admin_addr"); addr != "" {
srv.listeners["admin api calls"] = NewAdminAPI(app, addr, app.config.k.String("webtak_root"))
}

if app.config.certAddr != "" {
srv.listeners["cert api calls"] = NewCertAPI(app, app.config.certAddr)
if addr := app.config.k.String("cert_addr"); addr != "" {
srv.listeners["cert api calls"] = NewCertAPI(app, addr)
}

srv.listeners["marti api calls"] = NewMartiApi(app, app.config.apiAddr)
srv.listeners["marti api calls"] = NewMartiApi(app, app.config.k.String("api_addr"))

return srv
}
Expand Down
Loading

0 comments on commit b49600d

Please sign in to comment.