Files
2026-03-12 20:09:16 +01:00

77 lines
2.1 KiB
Go

package main
import (
"context"
"encoding/base64"
"log"
"net/http"
"os"
"time"
appcrypto "netisjwt/internal/crypto"
"netisjwt/internal/httpapi"
"netisjwt/internal/storage"
)
// main zazene HTTP API streznik in inicializira odvisnosti.
func main() {
cfg := naloziNastavitve()
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
store, err := storage.PoveziInMigriraj(ctx, cfg.databaseURL, cfg.aesKeyBase64)
if err != nil {
log.Fatalf("failed to connect store: %v", err)
}
defer store.Zapri()
privatePEM, err := naloziAliUstvariZasebniKljucPEM(cfg.privateKeyPath)
if err != nil {
log.Fatalf("failed to load signing key: %v", err)
}
handler := httpapi.NewObravnalnik(store, privatePEM)
router := httpapi.NewUsmerjevalnik(handler)
log.Printf("server listening on %s", cfg.listenAddr)
if err := http.ListenAndServe(cfg.listenAddr, router); err != nil {
log.Fatalf("server stopped: %v", err)
}
}
type config struct {
listenAddr string
databaseURL string
aesKeyBase64 string
privateKeyPath string
}
// naloziNastavitve prebere konfiguracijo iz okolja z default vrednostmi.
func naloziNastavitve() config {
return config{
listenAddr: preberiOkoljeAliPrivzeto("APP_ADDR", ":8001"),
databaseURL: preberiOkoljeAliPrivzeto("DATABASE_URL", "postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable"),
aesKeyBase64: preberiOkoljeAliPrivzeto("STATUS_AES_KEY_B64", base64.StdEncoding.EncodeToString([]byte("01234567890123456789012345678901"))),
privateKeyPath: os.Getenv("SIGNING_KEY_PATH"),
}
}
// naloziAliUstvariZasebniKljucPEM prebere kljuc iz datoteke ali ga ustvari.
func naloziAliUstvariZasebniKljucPEM(path string) ([]byte, error) {
if path == "" {
// Če pot ni podana, ustvarimo ključ ob zagonu za enostaven lokalni test.
return appcrypto.UstvariZasebniKljucECDSAP256PEM()
}
return os.ReadFile(path)
}
// preberiOkoljeAliPrivzeto vrne env vrednost ali podan fallback.
func preberiOkoljeAliPrivzeto(name, fallback string) string {
value := os.Getenv(name)
if value == "" {
return fallback
}
return value
}