mirror of
https://github.com/remnawave/migrate.git
synced 2026-05-13 12:16:40 +00:00
* Add internal squad assignment for migrated users Introduces the --internal-squad flag and config option to assign all migrated users to a specified internal squad. Updates user creation logic to include the squad UUID if provided, and documents the new feature in the README. * Delete remnawave-migrate * Add support for assigning users to multiple squads Extended configuration and migration logic to allow assigning migrated users to multiple internal squads (comma-separated) and a single external squad. Updated documentation, config, migrator, and user creation request to support these new options.
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"strings"
|
|
|
|
"remnawave-migrate/config"
|
|
"remnawave-migrate/migrator"
|
|
"remnawave-migrate/remnawave"
|
|
"remnawave-migrate/source"
|
|
"remnawave-migrate/util"
|
|
)
|
|
|
|
var version = "unknown"
|
|
|
|
func main() {
|
|
cfg := config.Parse(version)
|
|
|
|
cfg.SourceHeaders = util.ParseHeaderMap(cfg.SourceHeadersRaw)
|
|
cfg.DestHeaders = util.ParseHeaderMap(cfg.DestHeadersRaw)
|
|
|
|
if cfg.RemnawaveToken != "" {
|
|
if _, exists := cfg.DestHeaders["Authorization"]; !exists {
|
|
cfg.DestHeaders["Authorization"] = "Bearer " + cfg.RemnawaveToken
|
|
}
|
|
}
|
|
|
|
if cfg.PanelPassword == "" {
|
|
log.Fatal("Panel password is required")
|
|
}
|
|
if cfg.RemnawaveToken == "" {
|
|
log.Fatal("Remnawave token is required")
|
|
}
|
|
|
|
if cfg.PreferredStrategy != "" {
|
|
validStrategies := map[string]bool{
|
|
"NO_RESET": true,
|
|
"DAY": true,
|
|
"WEEK": true,
|
|
"MONTH": true,
|
|
}
|
|
|
|
strategy := strings.ToUpper(cfg.PreferredStrategy)
|
|
if !validStrategies[strategy] {
|
|
log.Fatalf("Invalid preferred-strategy value: %s. Must be one of: NO_RESET, DAY, WEEK, MONTH", cfg.PreferredStrategy)
|
|
}
|
|
cfg.PreferredStrategy = strategy
|
|
}
|
|
|
|
log.Printf("Starting migration from %s panel...", cfg.PanelType)
|
|
|
|
sourcePanel, err := source.Factory(cfg.PanelType, cfg.PanelURL, cfg.SourceHeaders)
|
|
if err != nil {
|
|
log.Fatalf("Failed to create source panel: %v", err)
|
|
}
|
|
|
|
if err := sourcePanel.Login(cfg.PanelUsername, cfg.PanelPassword); err != nil {
|
|
log.Fatalf("Login failed: %v", err)
|
|
}
|
|
|
|
remnaPanel := remnawave.NewPanel(cfg.RemnawaveURL, cfg.RemnawaveToken, cfg.DestHeaders)
|
|
|
|
m := migrator.New(sourcePanel, remnaPanel, cfg.PreferredStrategy, cfg.PreserveStatus, cfg.PreserveSubHash, cfg.InternalSquad, cfg.ExternalSquad)
|
|
if err := m.MigrateUsers(cfg.BatchSize, cfg.LastUsers); err != nil {
|
|
log.Fatalf("Migration failed: %v", err)
|
|
}
|
|
|
|
log.Println("Migration completed successfully!")
|
|
}
|