feat: Implement storage provider management functionality

- Added new routes and handlers for managing storage providers, including creation, editing, and deletion.
- Introduced a new StorageProvider form component for user input.
- Enhanced the database schema to support storage provider references in transfer configurations.
- Implemented encryption for sensitive fields in storage provider data.
- Added tests for storage provider API endpoints and integration with the database.
- Updated frontend components to support storage provider selection and testing.
This commit is contained in:
StarFleetCPTN committed 2025-04-16 17:18:53 -07:00
1 parent 88d0ac815a
commit 31871bd16e
59 files changed
+15842 -594

No files matched your search

@@ -0,0 +1,66 @@
package migrations
import (
"github.com/go-gormigrate/gormigrate/v2"
"gorm.io/gorm"
)
// AddStorageProviders adds the storage_providers table
func AddStorageProviders() *gormigrate.Migration {
return &gormigrate.Migration{
ID: "014_add_storage_providers",
Migrate: func(tx *gorm.DB) error {
// Create the storage_providers table
if err := tx.Exec(`CREATE TABLE IF NOT EXISTS storage_providers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(255) NOT NULL,
type VARCHAR(50) NOT NULL,
host VARCHAR(255),
port INTEGER DEFAULT 22,
username VARCHAR(255),
encrypted_password TEXT,
key_file TEXT,
bucket VARCHAR(255),
region VARCHAR(255),
access_key VARCHAR(255),
encrypted_secret_key TEXT,
endpoint VARCHAR(255),
share VARCHAR(255),
domain VARCHAR(255),
passive_mode BOOLEAN DEFAULT TRUE,
client_id VARCHAR(255),
encrypted_client_secret TEXT,
encrypted_refresh_token TEXT,
drive_id VARCHAR(255),
team_drive VARCHAR(255),
read_only BOOLEAN DEFAULT FALSE,
start_year INTEGER,
include_archived BOOLEAN DEFAULT FALSE,
use_builtin_auth BOOLEAN DEFAULT TRUE,
authenticated BOOLEAN DEFAULT FALSE,
created_by INTEGER NOT NULL,
created_at DATETIME,
updated_at DATETIME,
FOREIGN KEY (created_by) REFERENCES users(id),
UNIQUE(name, created_by)
)`).Error; err != nil {
return err
}
// Create index on type for faster filtering
if err := tx.Exec(`CREATE INDEX idx_storage_providers_type ON storage_providers(type)`).Error; err != nil {
return err
}
return nil
},
Rollback: func(tx *gorm.DB) error {
// Drop the storage_providers table
if err := tx.Exec(`DROP TABLE IF EXISTS storage_providers`).Error; err != nil {
return err
}
return nil
},
}
}
@@ -0,0 +1,55 @@
package migrations
import (
"github.com/go-gormigrate/gormigrate/v2"
"gorm.io/gorm"
)
// AddProviderRefsToTransferConfig adds the storage provider reference fields to the transfer_configs table
func AddProviderRefsToTransferConfig() *gormigrate.Migration {
return &gormigrate.Migration{
ID: "015_add_provider_refs_to_transfer_config",
Migrate: func(tx *gorm.DB) error {
// Add source_provider_id and destination_provider_id columns to transfer_configs table
if err := tx.Exec(`ALTER TABLE transfer_configs ADD COLUMN source_provider_id INTEGER REFERENCES storage_providers(id)`).Error; err != nil {
return err
}
if err := tx.Exec(`ALTER TABLE transfer_configs ADD COLUMN destination_provider_id INTEGER REFERENCES storage_providers(id)`).Error; err != nil {
return err
}
// Create indexes for better performance when joining with the storage_providers table
if err := tx.Exec(`CREATE INDEX idx_transfer_configs_source_provider_id ON transfer_configs(source_provider_id)`).Error; err != nil {
return err
}
if err := tx.Exec(`CREATE INDEX idx_transfer_configs_destination_provider_id ON transfer_configs(destination_provider_id)`).Error; err != nil {
return err
}
return nil
},
Rollback: func(tx *gorm.DB) error {
// Drop indexes first
if err := tx.Exec(`DROP INDEX IF EXISTS idx_transfer_configs_source_provider_id`).Error; err != nil {
return err
}
if err := tx.Exec(`DROP INDEX IF EXISTS idx_transfer_configs_destination_provider_id`).Error; err != nil {
return err
}
// Remove columns
if err := tx.Exec(`ALTER TABLE transfer_configs DROP COLUMN source_provider_id`).Error; err != nil {
return err
}
if err := tx.Exec(`ALTER TABLE transfer_configs DROP COLUMN destination_provider_id`).Error; err != nil {
return err
}
return nil
},
}
}
+2
View File
@@ -27,6 +27,8 @@ func GetMigrations(db *gorm.DB) *gormigrate.Gormigrate {
RecoverNotificationServicesRename(), // 012b
RecoverAuthProvidersRename(), // 012c
CleanupInvalidBooleans(), // 013
AddStorageProviders(), // 014
AddProviderRefsToTransferConfig(), // 015
)
return gormigrate.New(db, gormigrate.DefaultOptions, migrations)