mirror of
https://github.com/StarFleetCPTN/GoMFT.git
synced 2026-09-08 15:41:20 +02:00
- 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.
201 lines
8.5 KiB
Go
201 lines
8.5 KiB
Go
package db
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// TransferConfig holds the configuration for a data transfer operation
|
|
type TransferConfig struct {
|
|
ID uint `gorm:"primarykey"`
|
|
Name string `gorm:"not null" form:"name"`
|
|
SourceType string `gorm:"not null" form:"source_type"`
|
|
SourcePath string `gorm:"not null" form:"source_path"`
|
|
SourceHost string `form:"source_host"`
|
|
SourcePort int `gorm:"default:22" form:"source_port"`
|
|
SourceUser string `form:"source_user"`
|
|
SourcePassword string `form:"source_password" gorm:"-"` // Not stored in DB, only used for form
|
|
SourceKeyFile string `form:"source_key_file"`
|
|
// S3 source fields
|
|
SourceBucket string `form:"source_bucket"`
|
|
SourceRegion string `form:"source_region"`
|
|
SourceAccessKey string `form:"source_access_key"`
|
|
SourceSecretKey string `form:"source_secret_key" gorm:"-"` // Not stored in DB, only used for form
|
|
SourceEndpoint string `form:"source_endpoint"`
|
|
// SMB source fields
|
|
SourceShare string `form:"source_share"`
|
|
SourceDomain string `form:"source_domain"`
|
|
// FTP source fields
|
|
SourcePassiveMode *bool `gorm:"default:true" form:"source_passive_mode"` // Already a pointer, no change needed here
|
|
// OneDrive and Google Drive source fields
|
|
SourceClientID string `form:"source_client_id"`
|
|
SourceClientSecret string `form:"source_client_secret" gorm:"-"` // Not stored in DB, only used for form
|
|
SourceDriveID string `form:"source_drive_id"` // For OneDrive
|
|
SourceTeamDrive string `form:"source_team_drive"` // For Google Drive
|
|
// Google Photos source fields
|
|
SourceReadOnly *bool `form:"source_read_only"` // For Google Photos
|
|
SourceStartYear int `form:"source_start_year"` // For Google Photos
|
|
SourceIncludeArchived *bool `form:"source_include_archived"` // For Google Photos
|
|
// General fields
|
|
FilePattern string `gorm:"default:'*'" form:"file_pattern"`
|
|
OutputPattern string `form:"output_pattern"` // Pattern for output filenames with date variables
|
|
DestinationType string `gorm:"not null" form:"destination_type"`
|
|
DestinationPath string `gorm:"not null" form:"destination_path"`
|
|
DestHost string `form:"dest_host"`
|
|
DestPort int `gorm:"default:22" form:"dest_port"`
|
|
DestUser string `form:"dest_user"`
|
|
DestPassword string `form:"dest_password" gorm:"-"` // Not stored in DB, only used for form
|
|
DestKeyFile string `form:"dest_key_file"`
|
|
// S3 destination fields
|
|
DestBucket string `form:"dest_bucket"`
|
|
DestRegion string `form:"dest_region"`
|
|
DestAccessKey string `form:"dest_access_key"`
|
|
DestSecretKey string `form:"dest_secret_key" gorm:"-"` // Not stored in DB, only used for form
|
|
DestEndpoint string `form:"dest_endpoint"`
|
|
// SMB destination fields
|
|
DestShare string `form:"dest_share"`
|
|
DestDomain string `form:"dest_domain"`
|
|
// FTP destination fields
|
|
DestPassiveMode *bool `gorm:"default:true" form:"dest_passive_mode"`
|
|
// OneDrive and Google Drive destination fields
|
|
DestClientID string `form:"dest_client_id"`
|
|
DestClientSecret string `form:"dest_client_secret" gorm:"-"` // Not stored in DB, only used for form
|
|
DestDriveID string `form:"dest_drive_id"` // For OneDrive
|
|
DestTeamDrive string `form:"dest_team_drive"` // For Google Drive
|
|
// Google Photos destination fields
|
|
DestReadOnly *bool `form:"dest_read_only"` // For Google Photos
|
|
DestStartYear int `form:"dest_start_year"` // For Google Photos
|
|
DestIncludeArchived *bool `form:"dest_include_archived"` // For Google Photos
|
|
// Security fields
|
|
UseBuiltinAuthSource *bool `form:"use_builtin_auth_source"` // For Google and other OAuth services
|
|
UseBuiltinAuthDest *bool `form:"use_builtin_auth_dest"` // For Google and other OAuth services
|
|
GoogleDriveAuthenticated *bool // Whether Google Drive auth is completed
|
|
// General fields
|
|
ArchivePath string `form:"archive_path"`
|
|
ArchiveEnabled *bool `gorm:"default:false" form:"archive_enabled"`
|
|
RcloneFlags string `form:"rclone_flags"`
|
|
// Rclone command fields
|
|
CommandID uint `gorm:"default:1" form:"command_id"` // Default to 'copy' command ID (1)
|
|
CommandFlags string `form:"command_flags"` // JSON string of selected flags
|
|
CommandFlagValues string `form:"command_flag_values"` // JSON string of flag values by ID
|
|
DeleteAfterTransfer *bool `gorm:"default:false" form:"delete_after_transfer"`
|
|
SkipProcessedFiles *bool `gorm:"default:true" form:"skip_processed_files"`
|
|
MaxConcurrentTransfers int `gorm:"default:4" form:"max_concurrent_transfers"` // Number of concurrent file transfers
|
|
CreatedBy uint
|
|
User User `gorm:"foreignkey:CreatedBy"`
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
// --- TransferConfig Helper Methods ---
|
|
|
|
// GetSourcePassiveMode returns the value of SourcePassiveMode with a default if nil
|
|
func (tc *TransferConfig) GetSourcePassiveMode() bool {
|
|
if tc.SourcePassiveMode == nil {
|
|
return true // Default to true if not set
|
|
}
|
|
return *tc.SourcePassiveMode
|
|
}
|
|
|
|
// SetSourcePassiveMode sets the SourcePassiveMode field
|
|
func (tc *TransferConfig) SetSourcePassiveMode(value bool) {
|
|
tc.SourcePassiveMode = &value
|
|
}
|
|
|
|
// GetDestPassiveMode returns the value of DestPassiveMode with a default if nil
|
|
func (tc *TransferConfig) GetDestPassiveMode() bool {
|
|
if tc.DestPassiveMode == nil {
|
|
return true // Default to true if not set
|
|
}
|
|
return *tc.DestPassiveMode
|
|
}
|
|
|
|
// SetDestPassiveMode sets the DestPassiveMode field
|
|
func (tc *TransferConfig) SetDestPassiveMode(value bool) {
|
|
tc.DestPassiveMode = &value
|
|
}
|
|
|
|
// GetGoogleDriveAuthenticated returns whether the transfer config has been authenticated with Google Drive
|
|
func (tc *TransferConfig) GetGoogleDriveAuthenticated() bool {
|
|
return tc.GoogleDriveAuthenticated != nil && *tc.GoogleDriveAuthenticated
|
|
}
|
|
|
|
// SetGoogleDriveAuthenticated sets the Google Drive authentication status
|
|
func (tc *TransferConfig) SetGoogleDriveAuthenticated(value bool) {
|
|
tc.GoogleDriveAuthenticated = &value
|
|
}
|
|
|
|
// GetGoogleAuthenticated is an alias for GetGoogleDriveAuthenticated for better semantics when working with Google Photos
|
|
func (tc *TransferConfig) GetGoogleAuthenticated() bool {
|
|
return tc.GetGoogleDriveAuthenticated()
|
|
}
|
|
|
|
// SetGoogleAuthenticated is an alias for SetGoogleDriveAuthenticated for better semantics when working with Google Photos
|
|
func (tc *TransferConfig) SetGoogleAuthenticated(value bool) {
|
|
tc.SetGoogleDriveAuthenticated(value)
|
|
}
|
|
|
|
// GetArchiveEnabled returns the value of ArchiveEnabled with a default if nil
|
|
func (tc *TransferConfig) GetArchiveEnabled() bool {
|
|
if tc.ArchiveEnabled == nil {
|
|
return false // Default to false if not set
|
|
}
|
|
return *tc.ArchiveEnabled
|
|
}
|
|
|
|
// SetArchiveEnabled sets the ArchiveEnabled field
|
|
func (tc *TransferConfig) SetArchiveEnabled(value bool) {
|
|
tc.ArchiveEnabled = &value
|
|
}
|
|
|
|
// GetDeleteAfterTransfer returns the value of DeleteAfterTransfer with a default if nil
|
|
func (tc *TransferConfig) GetDeleteAfterTransfer() bool {
|
|
if tc.DeleteAfterTransfer == nil {
|
|
return false // Default to false if not set
|
|
}
|
|
return *tc.DeleteAfterTransfer
|
|
}
|
|
|
|
// SetDeleteAfterTransfer sets the DeleteAfterTransfer field
|
|
func (tc *TransferConfig) SetDeleteAfterTransfer(value bool) {
|
|
tc.DeleteAfterTransfer = &value
|
|
}
|
|
|
|
// GetSkipProcessedFiles returns the value of SkipProcessedFiles with a default if nil
|
|
func (tc *TransferConfig) GetSkipProcessedFiles() bool {
|
|
if tc.SkipProcessedFiles == nil {
|
|
return true // Default to true if not set
|
|
}
|
|
return *tc.SkipProcessedFiles
|
|
}
|
|
|
|
// SetSkipProcessedFiles sets the SkipProcessedFiles field
|
|
func (tc *TransferConfig) SetSkipProcessedFiles(value bool) {
|
|
tc.SkipProcessedFiles = &value
|
|
}
|
|
|
|
// GetUseBuiltinAuthSource returns the value of UseBuiltinAuthSource with a default if nil
|
|
func (tc *TransferConfig) GetUseBuiltinAuthSource() bool {
|
|
if tc.UseBuiltinAuthSource == nil {
|
|
return true // Default to true if not set
|
|
}
|
|
return *tc.UseBuiltinAuthSource
|
|
}
|
|
|
|
// SetUseBuiltinAuthSource sets the UseBuiltinAuthSource field
|
|
func (tc *TransferConfig) SetUseBuiltinAuthSource(value bool) {
|
|
tc.UseBuiltinAuthSource = &value
|
|
}
|
|
|
|
// GetUseBuiltinAuthDest returns the value of UseBuiltinAuthDest with a default if nil
|
|
func (tc *TransferConfig) GetUseBuiltinAuthDest() bool {
|
|
if tc.UseBuiltinAuthDest == nil {
|
|
return true // Default to true if not set
|
|
}
|
|
return *tc.UseBuiltinAuthDest
|
|
}
|
|
|
|
// SetUseBuiltinAuthDest sets the UseBuiltinAuthDest field
|
|
func (tc *TransferConfig) SetUseBuiltinAuthDest(value bool) {
|
|
tc.UseBuiltinAuthDest = &value
|
|
}
|