feat: Enhance notification service configuration and refactor related components

- Updated notification service models to use pointers for boolean fields, allowing for better handling of enabled states.
- Introduced helper methods for getting and setting enabled states in notification and auth provider models.
- Refactored notification form templates to consolidate event trigger handling, improving code maintainability.
- Added SSL verification configuration to the application settings, allowing users to skip SSL verification for outgoing notifications.
- Enhanced the notification sending logic to respect the SSL verification setting.
- Introduced new migration to alter boolean defaults in the database schema for better compatibility with the updated models.
- Added unit tests for email and Rclone service functionalities to ensure reliability.
This commit is contained in:
StarFleetCPTN
2025-03-30 09:56:55 -07:00
parent b35174f857
commit 608da9ce1c
34 changed files with 1230 additions and 896 deletions
+12
View File
@@ -16,6 +16,7 @@ type Config struct {
Email EmailConfig `json:"email"`
BaseURL string `json:"base_url"` // Base URL for generating links in emails
TOTPEncryptKey string `json:"totp_encrypt_key"` // Encryption key for TOTP secrets
SkipSSLVerify bool `json:"skip_ssl_verify"` // Skip SSL verification for outgoing webhooks/notifications
}
type EmailConfig struct {
@@ -40,6 +41,7 @@ func Load() (*Config, error) {
JWTSecret: "change_this_to_a_secure_random_string",
BaseURL: "http://localhost:8080",
TOTPEncryptKey: "this-is-a-dev-key-not-for-production!", // Default development key
SkipSSLVerify: false, // Default to verifying SSL
Email: EmailConfig{
Enabled: false,
Host: "smtp.example.com",
@@ -119,6 +121,12 @@ func Load() (*Config, error) {
if emailRequireAuth := os.Getenv("EMAIL_REQUIRE_AUTH"); emailRequireAuth != "" {
cfg.Email.RequireAuth = strings.ToLower(emailRequireAuth) == "true"
}
// SSL Verification configuration
if sslVerify := os.Getenv("SSL_VERIFY"); sslVerify != "" {
// Default is true (verify), only set SkipSSLVerify to true if env var is explicitly "false"
cfg.SkipSSLVerify = strings.ToLower(sslVerify) == "false"
}
} else if !os.IsNotExist(err) {
return nil, err
} else {
@@ -148,6 +156,10 @@ func Load() (*Config, error) {
"EMAIL_REQUIRE_AUTH=" + strconv.FormatBool(cfg.Email.RequireAuth),
"EMAIL_USERNAME=" + cfg.Email.Username,
"EMAIL_PASSWORD=" + cfg.Email.Password,
"",
"# SSL Verification for outgoing notifications (webhooks, etc.)",
"# Set to false to disable SSL certificate verification (USE WITH CAUTION)",
"SSL_VERIFY=" + strconv.FormatBool(!cfg.SkipSSLVerify), // Default is true (verify)
}
if err := os.WriteFile(envPath, []byte(strings.Join(envContent, "\n")), 0644); err != nil {