package api import ( "fmt" "net/http" "strings" "gardomatic.kleiax.de/internal/platform/validate" "gardomatic.kleiax.de/internal/storage" ) type environmentVariable struct { Component string `json:"component"` Name string `json:"name"` Value string `json:"value"` } func (app *application) showAdminEnvironmentHandler(w http.ResponseWriter, r *http.Request) { variables := []environmentVariable{ {Component: "API", Name: "GARDOMATIC_ENV", Value: app.config.Env}, {Component: "API", Name: "GARDOMATIC_DB_DSN", Value: maskedValue(app.config.DB.Dsn)}, {Component: "API", Name: "GARDOMATIC_DB_MAX_OPEN_CONNS", Value: fmt.Sprint(app.config.DB.MaxOpenConns)}, {Component: "API", Name: "GARDOMATIC_DB_MAX_IDLE_CONNS", Value: fmt.Sprint(app.config.DB.MaxIdleConns)}, {Component: "API", Name: "GARDOMATIC_DB_MAX_IDLE_TIME", Value: app.config.DB.MaxIdleTime.String()}, {Component: "API", Name: "GARDOMATIC_API_HOST", Value: app.config.Host}, {Component: "API", Name: "GARDOMATIC_API_PORT", Value: fmt.Sprint(app.config.Port)}, {Component: "API", Name: "GARDOMATIC_WEB_BASE_URL", Value: app.config.WebBaseURL}, {Component: "API", Name: "GARDOMATIC_SESSION_COOKIE_NAME", Value: app.config.Session.CookieName}, {Component: "API", Name: "GARDOMATIC_SESSION_LIFETIME", Value: app.config.Session.Lifetime.String()}, {Component: "API", Name: "GARDOMATIC_SESSION_IDLE_TIMEOUT", Value: app.config.Session.IdleTimeout.String()}, {Component: "API", Name: "GARDOMATIC_COOKIE_SECURE", Value: fmt.Sprint(app.config.Session.CookieSecure)}, {Component: "API", Name: "GARDOMATIC_RATE_LIMIT_ENABLED", Value: fmt.Sprint(app.config.Limiter.Enabled)}, {Component: "API", Name: "GARDOMATIC_RATE_LIMIT_RPS", Value: fmt.Sprint(app.config.Limiter.Rps)}, {Component: "API", Name: "GARDOMATIC_RATE_LIMIT_BURST", Value: fmt.Sprint(app.config.Limiter.Burst)}, {Component: "API", Name: "GARDOMATIC_CORS_TRUSTED_ORIGINS", Value: strings.Join(app.config.Cors.TrustedOrigins, ",")}, {Component: "API", Name: "GARDOMATIC_SMTP_MODE", Value: string(app.config.Mail.Mode)}, {Component: "API", Name: "GARDOMATIC_SMTP_HOST", Value: app.config.Mail.Host}, {Component: "API", Name: "GARDOMATIC_SMTP_PORT", Value: fmt.Sprint(app.config.Mail.Port)}, {Component: "API", Name: "GARDOMATIC_SMTP_USERNAME", Value: app.config.Mail.Username}, {Component: "API", Name: "GARDOMATIC_SMTP_PASSWORD", Value: maskedValue(app.config.Mail.Password)}, {Component: "API", Name: "GARDOMATIC_SMTP_SENDER", Value: app.config.Mail.Sender}, {Component: "API", Name: "GARDOMATIC_SMTP_FILE_PATH", Value: app.config.Mail.FilePath}, } if err := app.writeJSON(w, http.StatusOK, envelope{"variables": variables}, nil); err != nil { app.serverErrorResponse(w, r, err) } } func maskedValue(value string) string { if value == "" { return "(nicht gesetzt)" } return "•••••••• (gesetzt)" } func (app *application) sendAdminTestMailHandler(w http.ResponseWriter, r *http.Request) { var input struct { Email string `json:"email"` } if err := app.readJSON(w, r, &input); err != nil { app.badRequestResponse(w, r, err) return } input.Email = strings.ToLower(strings.TrimSpace(input.Email)) v := validate.New() storage.ValidateEmail(v, input.Email) if !v.Valid() { app.failedValidationResponse(w, r, v.Errors) return } if err := app.mailer.Send(input.Email, "test_mail.tmpl", nil); err != nil { app.serverErrorResponse(w, r, err) return } if err := app.writeJSON(w, http.StatusAccepted, envelope{"message": "test mail sent"}, nil); err != nil { app.serverErrorResponse(w, r, err) } }