Files
Olares/cli/cmd/ctl/user/activate.go
Eliott van Nuffel df38148149
Some checks failed
Native Verification / Build Docs (pull_request) Successful in 1m12s
Native Verification / Build App-Service Native (pull_request) Successful in 1m27s
Native Verification / Build Daemon Native (pull_request) Successful in 42s
Lint and Test Charts / lint-test (pull_request_target) Failing after 19s
Lint and Test Charts / test-version (pull_request_target) Successful in 0s
Lint and Test Charts / push-image (pull_request_target) Failing after 15s
Lint and Test Charts / upload-cli (pull_request_target) Failing after 1m15s
Lint and Test Charts / upload-daemon (pull_request_target) Failing after 1m12s
Lint and Test Charts / push-deps (pull_request_target) Has been skipped
Lint and Test Charts / push-deps-arm64 (pull_request_target) Has been skipped
Lint and Test Charts / push-image-arm64 (pull_request_target) Has been cancelled
Lint and Test Charts / upload-package (pull_request_target) Has been cancelled
Lint and Test Charts / install-test (pull_request_target) Has been cancelled
continue beOS rebrand and add native verification
2026-03-10 13:48:45 +01:00

123 lines
3.9 KiB
Go

package user
import (
"fmt"
"log"
"strings"
"github.com/beclab/beos/cli/pkg/wizard"
"github.com/spf13/cobra"
)
type activateUserOptions struct {
Mnemonic string
BflUrl string
VaultUrl string
Password string
BeOSId string
ResetPassword string
Location string
Language string
EnableTunnel bool
Host string
Jws string
}
func NewCmdActivateUser() *cobra.Command {
o := &activateUserOptions{}
cmd := &cobra.Command{
Use: "activate {beOS ID (e.g., user@example.com)}",
Short: "activate a new user",
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
o.BeOSId = args[0]
if err := o.Validate(); err != nil {
log.Fatal(err)
}
if err := o.Run(); err != nil {
log.Fatal(err)
}
},
}
o.AddFlags(cmd)
return cmd
}
func (o *activateUserOptions) AddFlags(cmd *cobra.Command) {
cmd.Flags().StringVar(&o.Mnemonic, "mnemonic", "", "12-word mnemonic phrase, required for activation")
cmd.Flags().StringVar(&o.BflUrl, "bfl", "http://127.0.0.1:30180", "Bfl URL (e.g., https://example.com, default: http://127.0.0.1:30180)")
cmd.Flags().StringVar(&o.VaultUrl, "vault", "http://127.0.0.1:30180", "Vault URL (e.g., https://example.com, default: http://127.0.0.1:30181)")
cmd.Flags().StringVarP(&o.Password, "password", "p", "", "OS password for authentication, required for activation")
cmd.Flags().StringVar(&o.Location, "location", "Asia/Shanghai", "Timezone location (default: Asia/Shanghai)")
cmd.Flags().StringVar(&o.Language, "language", "en-US", "System language (default: en-US)")
cmd.Flags().BoolVar(&o.EnableTunnel, "enable-tunnel", false, "Enable tunnel mode (default: false)")
cmd.Flags().StringVar(&o.Host, "host", "", "FRP host (only used when tunnel is enabled)")
cmd.Flags().StringVar(&o.Jws, "jws", "", "FRP JWS token (only used when tunnel is enabled)")
cmd.Flags().StringVar(&o.ResetPassword, "reset-password", "", "New password for resetting (required for password reset)")
}
func (o *activateUserOptions) Validate() error {
if o.BeOSId == "" {
return fmt.Errorf("beOS ID is required")
}
if o.Password == "" {
return fmt.Errorf("Password is required")
}
if o.Mnemonic == "" {
return fmt.Errorf("Mnemonic is required")
}
if o.ResetPassword == "" {
return fmt.Errorf("Reset password is required")
}
return nil
}
func (c *activateUserOptions) Run() error {
log.Println("=== TermiPass CLI - User Bind Terminus ===")
localName := c.BeOSId
if strings.Contains(c.BeOSId, "@") {
localName = strings.Split(c.BeOSId, "@")[0]
}
log.Printf("Parameters:")
log.Printf(" BflUrl: %s", c.BflUrl)
log.Printf(" VaultUrl: %s", c.VaultUrl)
log.Printf(" Terminus Name: %s", c.BeOSId)
log.Printf(" Local Name: %s", localName)
log.Printf("Initializing global stores with mnemonic...")
err := wizard.InitializeGlobalStores(c.Mnemonic, c.BeOSId)
if err != nil {
return fmt.Errorf("failed to initialize global stores: %v", err)
}
accessToken, err := wizard.UserBindTerminus(c.Mnemonic, c.BflUrl, c.VaultUrl, c.Password, c.BeOSId, localName)
if err != nil {
return fmt.Errorf("user bind failed: %v", err)
}
log.Printf("✅ Vault activation completed successfully!")
log.Printf("🚀 Starting system activation wizard...")
wizardConfig := wizard.CustomWizardConfig(c.Location, c.Language, c.EnableTunnel, c.Host, c.Jws, c.Password, c.ResetPassword)
log.Printf("Wizard configuration:")
log.Printf(" Location: %s", wizardConfig.System.Location)
log.Printf(" Language: %s", wizardConfig.System.Language)
log.Printf(" Enable Tunnel: %t", c.EnableTunnel)
if c.EnableTunnel && wizardConfig.System.FRP != nil {
log.Printf(" FRP Host: %s", wizardConfig.System.FRP.Host)
log.Printf(" FRP JWS: %s", wizardConfig.System.FRP.Jws)
}
err = wizard.RunActivationWizard(c.BflUrl, accessToken, wizardConfig)
if err != nil {
return fmt.Errorf("activation wizard failed: %v", err)
}
log.Printf("🎉 Complete Terminus activation finished successfully!")
return nil
}