Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ ENV FAVICON_PATH=/app/data/favicon.ico
ENV CONFIG_PATH=/config/config.yml
ENV TOKENS_DIR=/config/tokens

ENV DB_PATH=/db/db.sqlite3

ENV CGO_ENABLED=1

ARG TARGETOS
ARG TARGETARCH

Expand Down
3 changes: 3 additions & 0 deletions dev-env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ export DEFAULTS_PATH=$DIR/data/defaults.yml
export FAVICON_PATH=$DIR/data/favicon.ico
export CONFIG_PATH=$DIR/.dev/config.yml
export TOKENS_DIR=$DIR/.dev/tokens
export DB_PATH=$DIR/.dev/db/db.sqlite3

export CGO_ENABLED=1

export API_URL=http://127.0.0.1:8881

Expand Down
26 changes: 13 additions & 13 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,27 @@ module github.com/codeshelldev/secured-signal-api
go 1.25.6

require (
github.com/codeshelldev/gotl/pkg/configutils v0.0.15-16
github.com/codeshelldev/gotl/pkg/configutils v0.0.16
github.com/codeshelldev/gotl/pkg/docker v0.0.2
github.com/codeshelldev/gotl/pkg/ioutils v0.0.2
github.com/codeshelldev/gotl/pkg/jsonutils v0.0.2
github.com/codeshelldev/gotl/pkg/logger v0.0.6
github.com/codeshelldev/gotl/pkg/pretty v0.0.9
github.com/codeshelldev/gotl/pkg/query v0.0.3
github.com/codeshelldev/gotl/pkg/request v0.0.6
github.com/codeshelldev/gotl/pkg/scheduler v0.0.2
github.com/codeshelldev/gotl/pkg/server/http v0.0.2
github.com/codeshelldev/gotl/pkg/stringutils v0.0.3
github.com/codeshelldev/gotl/pkg/templating v0.0.3
github.com/codeshelldev/gotl/pkg/logger v0.0.8
github.com/codeshelldev/gotl/pkg/pretty v0.0.10
github.com/codeshelldev/gotl/pkg/query v0.0.4
github.com/codeshelldev/gotl/pkg/request v0.0.8
github.com/codeshelldev/gotl/pkg/scheduler v0.0.7
github.com/codeshelldev/gotl/pkg/server/http v0.0.3
github.com/codeshelldev/gotl/pkg/stringutils v0.0.8
github.com/codeshelldev/gotl/pkg/templating v0.0.4
)

require (
github.com/codeshelldev/gotl/pkg/ioutils v0.0.2
github.com/knadh/koanf/parsers/yaml v1.1.0
golang.org/x/time v0.14.0
)

require (
github.com/clipperhouse/stringish v0.1.1 // indirect
github.com/clipperhouse/uax29/v2 v2.4.0 // indirect
github.com/clipperhouse/uax29/v2 v2.6.0 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
github.com/google/uuid v1.6.0
Expand All @@ -34,10 +33,11 @@ require (
github.com/knadh/koanf/providers/file v1.2.1 // indirect
github.com/knadh/koanf/v2 v2.3.2 // indirect
github.com/mattn/go-runewidth v0.0.19 // indirect
github.com/mattn/go-sqlite3 v1.14.34
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.1 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/sys v0.40.0 // indirect
golang.org/x/sys v0.41.0 // indirect
)
48 changes: 24 additions & 24 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,31 +1,29 @@
github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs=
github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA=
github.com/clipperhouse/uax29/v2 v2.4.0 h1:RXqE/l5EiAbA4u97giimKNlmpvkmz+GrBVTelsoXy9g=
github.com/clipperhouse/uax29/v2 v2.4.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g=
github.com/codeshelldev/gotl/pkg/configutils v0.0.15-16 h1:cKJFxNj1k0QpQrFhfbKR32oL0Wgsai4eLMeCtLhHekY=
github.com/codeshelldev/gotl/pkg/configutils v0.0.15-16/go.mod h1:X7wY6s44k0Cxx2oMmJChogB1n1+oR+RqbzmQCCqnN5I=
github.com/clipperhouse/uax29/v2 v2.6.0 h1:z0cDbUV+aPASdFb2/ndFnS9ts/WNXgTNNGFoKXuhpos=
github.com/clipperhouse/uax29/v2 v2.6.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g=
github.com/codeshelldev/gotl/pkg/configutils v0.0.16 h1:iS/Yw2ruYnRGf2zZphI+JFIGkQCECh+AFbJAi0uyXLA=
github.com/codeshelldev/gotl/pkg/configutils v0.0.16/go.mod h1:Tiu27XQ7D08fcwCHp5tZsDIQwIo6q626+l77k2dse7k=
github.com/codeshelldev/gotl/pkg/docker v0.0.2 h1:kpseReocEBoSzWe/tOhUrIrOYeAR/inw3EF2/d+N078=
github.com/codeshelldev/gotl/pkg/docker v0.0.2/go.mod h1:odNnlRw4aO1n2hSkDZIaiuSXIoFoVeatmXtF64Yd33U=
github.com/codeshelldev/gotl/pkg/ioutils v0.0.2 h1:IRcN2M6H4v59iodw1k7gFX9lirhbVy6RZ4yRtKNcFYg=
github.com/codeshelldev/gotl/pkg/ioutils v0.0.2/go.mod h1:WPQYglNqThBatoGaQK0OGx2bwzto1oi0zb1fB9gsaUU=
github.com/codeshelldev/gotl/pkg/jsonutils v0.0.2 h1:ERsjkaWVrsyUZoEunCEeNYDXhuaIvoSetB8e/zI4Tqo=
github.com/codeshelldev/gotl/pkg/jsonutils v0.0.2/go.mod h1:oxgKaAoMu6iYVHfgR7AhkK22xbYx4K0KCkyVEfYVoWs=
github.com/codeshelldev/gotl/pkg/logger v0.0.6 h1:heo6z6yZm5PpX78vxud9HJNfVU9J46HVlW8T4EOy9nQ=
github.com/codeshelldev/gotl/pkg/logger v0.0.6/go.mod h1:pL/I7KYxbGHhyedallZlCkBvoalv9gAWNEYVXbF9BoM=
github.com/codeshelldev/gotl/pkg/pretty v0.0.9 h1:YgAZ0QpV+cUCKeLz5T0XFVByM8BXrJuz5KKLE0a6o1Y=
github.com/codeshelldev/gotl/pkg/pretty v0.0.9/go.mod h1:2Gk6UBrtkIME2RCSNytS/RJ5lHXYL/MDx0rYRpknobM=
github.com/codeshelldev/gotl/pkg/query v0.0.3 h1:Zy8k0R5HcJS00OMPRHybgFEiwMg7ceLyv6bA0G7NOfs=
github.com/codeshelldev/gotl/pkg/query v0.0.3/go.mod h1:kKaPOKXluIid3qeS7xzrmfq3NxIa8/PhKYHM6GRbwJw=
github.com/codeshelldev/gotl/pkg/request v0.0.6 h1:NySoIrdWv/5RUUufyXTodGmT6mc71VbjlQ+Wcthixp8=
github.com/codeshelldev/gotl/pkg/request v0.0.6/go.mod h1:vCXIZ2n/XxvEVInBQv9eIh0kQ2353V+WymL8kZ9yrOU=
github.com/codeshelldev/gotl/pkg/scheduler v0.0.2 h1:qofwNcdfiPz+5tscodsHpWSyY9QVc9TUAnchvACe7xI=
github.com/codeshelldev/gotl/pkg/scheduler v0.0.2/go.mod h1:sXEpRxbDc/JAN8WDxxq5+UxJf2dOQpKJIZyvORjIJGM=
github.com/codeshelldev/gotl/pkg/server/http v0.0.2 h1:Vo8PZYHEvw1lfQtS/Mc5gU7Jx5VyHjbXOwfSFyFcjss=
github.com/codeshelldev/gotl/pkg/server/http v0.0.2/go.mod h1:/asx7ViJtwlBvLgObjI/tejm6lNDN1/B+/6BPImqDfc=
github.com/codeshelldev/gotl/pkg/stringutils v0.0.3 h1:7k/HMnX7me8Kchm41I/M6dp3wXI0XORI3oyS87O0Viw=
github.com/codeshelldev/gotl/pkg/stringutils v0.0.3/go.mod h1:/dWlzYoTj23LmpFs+Bpal4tfUDbOVeApIgkLv9gTgUE=
github.com/codeshelldev/gotl/pkg/templating v0.0.3 h1:PAz6VN8yGBuZIdR/sDM+TmW1OFykl+I7/Zwa07uMgYA=
github.com/codeshelldev/gotl/pkg/templating v0.0.3/go.mod h1:D+wxgsPSiq9HShEzv1mhYAjGJyasWgPoIu+nRk4TPqY=
github.com/codeshelldev/gotl/pkg/logger v0.0.8 h1:mt8dLt3aEgzCTOLbJ+KuAghwnP6Iv7/VR8tHXxsXuTA=
github.com/codeshelldev/gotl/pkg/logger v0.0.8/go.mod h1:AFO/snEIfF8YB3+TH6XtFMlhRCAJxItSfyc4ndbwc8E=
github.com/codeshelldev/gotl/pkg/pretty v0.0.10 h1:efoRJfkrk26c5j26qiwCXWPzeG/TfFK9V55Q6Rn+1CM=
github.com/codeshelldev/gotl/pkg/pretty v0.0.10/go.mod h1:SkyfcVnQp37jV3SMTtnIFc1fyVvorvSskJxOmYvfIHU=
github.com/codeshelldev/gotl/pkg/query v0.0.4 h1:o2Oagx/s1wfNMqkh6GfR6wpsIVOFSDPIbxe8ABRIXDw=
github.com/codeshelldev/gotl/pkg/query v0.0.4/go.mod h1:Bg3tFzFq9xButTw0BSfGQhSmfAnFDrJamOcnX6Io4m4=
github.com/codeshelldev/gotl/pkg/request v0.0.8 h1:sVVt2ADOTgZrna7RsqThwMKxYCuxlBE80s7kV90rARg=
github.com/codeshelldev/gotl/pkg/request v0.0.8/go.mod h1:ngE6/OksRIclheFGfqJ6/2lBpzCm9sPe4p5JfGIg5kg=
github.com/codeshelldev/gotl/pkg/scheduler v0.0.7 h1:6D16m1/DndhkIvoYMc26ebc9SySy1UQMc7W4QifdvvM=
github.com/codeshelldev/gotl/pkg/scheduler v0.0.7/go.mod h1:sXEpRxbDc/JAN8WDxxq5+UxJf2dOQpKJIZyvORjIJGM=
github.com/codeshelldev/gotl/pkg/server/http v0.0.3 h1:3232uPB2CljzUJadyrME7p0DaOCGz+vPVfPjnS788SE=
github.com/codeshelldev/gotl/pkg/server/http v0.0.3/go.mod h1:/asx7ViJtwlBvLgObjI/tejm6lNDN1/B+/6BPImqDfc=
github.com/codeshelldev/gotl/pkg/stringutils v0.0.8 h1:VKIuEYLJARDmHyhAbcMy1TsdxPdzsKlbQvgr1G4QE7s=
github.com/codeshelldev/gotl/pkg/stringutils v0.0.8/go.mod h1:892bcYDpOf0sTpXtABQ3m+9MACpWHCVpN3f/mcPr7qo=
github.com/codeshelldev/gotl/pkg/templating v0.0.4 h1:qIWiqRtkSt/784lOlL7yi29lXx1eGXdacWDIV6euLKI=
github.com/codeshelldev/gotl/pkg/templating v0.0.4/go.mod h1:J1MfmzI5Smhqtz3+lkMM+vrF1sXiypKRUmFE77JSifU=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
Expand All @@ -52,6 +50,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
github.com/mattn/go-sqlite3 v1.14.34 h1:3NtcvcUnFBPsuRcno8pUtupspG/GM+9nZ88zgJcp6Zk=
github.com/mattn/go-sqlite3 v1.14.34/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
Expand All @@ -68,8 +68,8 @@ go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=
go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
1 change: 1 addition & 0 deletions internals/config/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ var ENV *structure.ENV = &structure.ENV{
DEFAULTS_PATH: os.Getenv("DEFAULTS_PATH"),
TOKENS_DIR: os.Getenv("TOKENS_DIR"),
FAVICON_PATH: os.Getenv("FAVICON_PATH"),
DB_PATH: os.Getenv("DB_PATH"),
INSECURE: false,

CONFIGS: map[string]*structure.CONFIG{},
Expand Down
24 changes: 12 additions & 12 deletions internals/config/structure/structure.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package structure

import (
. "github.com/codeshelldev/gotl/pkg/configutils/types"
t "github.com/codeshelldev/gotl/pkg/configutils/types"
)

type ENV struct {
Expand Down Expand Up @@ -37,7 +37,7 @@ const (
)

type SERVICE struct {
HOSTNAMES Opt[[]string] `koanf:"hostnames" env>aliases:".hostnames"`
HOSTNAMES t.Opt[[]string] `koanf:"hostnames" env>aliases:".hostnames"`
PORT string `koanf:"port" env>aliases:".port"`
LOG_LEVEL string `koanf:"loglevel" env>aliases:".loglevel"`
}
Expand All @@ -51,7 +51,7 @@ type API struct {
}

type AUTH struct {
METHODS Opt[[]string] `koanf:"methods" env>aliases:".authmethods"`
METHODS t.Opt[[]string] `koanf:"methods" env>aliases:".authmethods"`
// DEPRECATION auth.token => auth.tokens
TOKENS []Token `koanf:"tokens" aliases:"token" onuse:"token>>deprecated" deprecation:"{b,fg=yellow}\x60{s}api.auth.token{/}\x60{/} will be removed\nUse {b,fg=green}\x60api.auth.tokens\x60{/} instead"`
}
Expand All @@ -67,9 +67,9 @@ type SETTINGS struct {
}

type MESSAGE struct {
VARIABLES Opt[map[string]any] `koanf:"variables" childtransform:"upper"`
FIELD_MAPPINGS Opt[map[string][]FieldMapping]`koanf:"fieldmappings" childtransform:"default"`
TEMPLATE Opt[string] `koanf:"template"`
VARIABLES t.Opt[map[string]any] `koanf:"variables" childtransform:"upper"`
FIELD_MAPPINGS t.Opt[map[string][]FieldMapping]`koanf:"fieldmappings" childtransform:"default"`
TEMPLATE t.Opt[string] `koanf:"template"`
}

type FieldMapping struct {
Expand All @@ -78,12 +78,12 @@ type FieldMapping struct {
}

type ACCESS struct {
ENDPOINTS Opt[AllowBlockSlice] `koanf:"endpoints"`
FIELD_POLICIES Opt[map[string]FieldPolicies]`koanf:"fieldpolicies" childtransform:"default"`
RATE_LIMITING Opt[RateLimiting] `koanf:"ratelimiting"`
IP_FILTER Opt[AllowBlockSlice] `koanf:"ipfilter"`
TRUSTED_IPS Opt[[]IPOrNet] `koanf:"trustedips"`
TRUSTED_PROXIES Opt[[]IPOrNet] `koanf:"trustedproxies"`
ENDPOINTS t.Opt[AllowBlockSlice] `koanf:"endpoints"`
FIELD_POLICIES t.Opt[map[string]FieldPolicies]`koanf:"fieldpolicies" childtransform:"default"`
RATE_LIMITING t.Opt[RateLimiting] `koanf:"ratelimiting"`
IP_FILTER t.Opt[AllowBlockSlice] `koanf:"ipfilter"`
TRUSTED_IPS t.Opt[[]IPOrNet] `koanf:"trustedips"`
TRUSTED_PROXIES t.Opt[[]IPOrNet] `koanf:"trustedproxies"`
}

type FieldPolicy struct {
Expand Down
73 changes: 73 additions & 0 deletions internals/db/db.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package db

import (
"bytes"
"database/sql"
"encoding/gob"

_ "embed"

"github.com/codeshelldev/gotl/pkg/logger"
"github.com/codeshelldev/secured-signal-api/internals/config"
_ "github.com/mattn/go-sqlite3"
)

var db *sql.DB

//go:embed schema.sql
var schema string

func Init() {
var err error

db, err = sql.Open("sqlite3", config.ENV.DB_PATH)

if err != nil {
logger.Fatal("Error opening database: ", err.Error())
return
}

db.SetMaxOpenConns(1)

err = db.Ping()

if err != nil {
logger.Fatal("Error opening database connection: ", err.Error())
return
}

_, err = db.Exec(schema)

if err != nil {
logger.Fatal("Could not apply database schema: ", err.Error())
return
}

logger.Debug("Successfully opened database")
}

func Close() {
ShutdownRequestDB()

db.Close()
}

func Serialize(value any) []byte {
var valueBytes bytes.Buffer

enc := gob.NewEncoder(&valueBytes)
enc.Encode(value)

return valueBytes.Bytes()
}

func Deserialize[T any](valueBytes []byte) T {
var out T

buf := bytes.NewBuffer(valueBytes)
dec := gob.NewDecoder(buf)

dec.Decode(&out)

return out
}
Loading