Add configurable timeouts and cache validity to ESI and SSO components

This commit is contained in:
2025-10-10 22:38:09 +02:00
parent fe47d3f8dd
commit 0f0adac82a
5 changed files with 78 additions and 50 deletions

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"os"
"reflect"
"strconv"
"strings"
logger "git.site.quack-lab.dev/dave/cylogger"
@@ -29,7 +30,12 @@ type Options struct {
ClientID string `env:"ESI_CLIENT_ID" description:"EVE SSO client ID"`
RedirectURI string `env:"ESI_REDIRECT_URI" default:"http://localhost:3000/callback" description:"EVE SSO redirect URI"`
Scopes []string `env:"ESI_SCOPES" default:"esi-planets.manage_planets.v1" description:"EVE SSO scopes (space-separated)"`
CacheValidity string `env:"ESI_CACHE_VALIDITY" default:"PT20M" description:"ESI cache validity in duration (e.g. PT20M for 20 minutes)"`
CacheValidity string `env:"ESI_CACHE_VALIDITY" default:"PT20M" description:"ESI cache validity in ISO8601 duration (e.g. PT20M for 20 minutes)"`
// HTTP timeouts
HTTPTimeout string `env:"HTTP_TIMEOUT" default:"PT30S" description:"HTTP client timeout in ISO8601 duration (e.g. PT30S for 30 seconds)"`
SSOCallbackTimeout string `env:"SSO_CALLBACK_TIMEOUT" default:"PT30S" description:"SSO callback timeout in ISO8601 duration (e.g. PT30S for 30 seconds)"`
TokenExpiryBuffer int `env:"TOKEN_EXPIRY_BUFFER" default:"30" description:"Token expiry buffer in seconds"`
WebhookURL string `env:"WEBHOOK_URL" description:"Webhook URL for notifications"`
WebhookEmail string `env:"WEBHOOK_EMAIL" description:"Webhook authentication email"`
@@ -80,6 +86,12 @@ func setFieldValue(field reflect.Value, value string, fieldType reflect.Type) er
switch fieldType.Kind() {
case reflect.String:
field.SetString(value)
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
intValue, err := strconv.ParseInt(value, 10, 64)
if err != nil {
return fmt.Errorf("invalid integer value: %w", err)
}
field.SetInt(intValue)
case reflect.Slice:
if fieldType.Elem().Kind() == reflect.String {
// Handle []string by splitting on spaces