package cmd import ( "context" "fmt" "os" "github.com/frenocorp/pop/internal/auth" "github.com/frenocorp/pop/internal/config" "github.com/spf13/cobra" ) func loginCmd() *cobra.Command { cmd := &cobra.Command{ Use: "login", Short: "Log in to ProtonMail", Long: `Authenticate with ProtonMail API and store session credentials.`, RunE: func(cmd *cobra.Command, args []string) error { cfgMgr := config.NewConfigManager() cfg, err := cfgMgr.Load() if err != nil { return fmt.Errorf("failed to load config: %w", err) } manager, err := auth.NewSessionManager() if err != nil { return fmt.Errorf("failed to create session manager: %w", err) } return manager.LoginInteractive(context.Background(), cfg.APIBaseURL) }, } return cmd } func logoutCmd() *cobra.Command { cmd := &cobra.Command{ Use: "logout", Short: "Log out from ProtonMail", Long: `Clear stored session credentials.`, RunE: func(cmd *cobra.Command, args []string) error { manager, err := auth.NewSessionManager() if err != nil { return fmt.Errorf("failed to create session manager: %w", err) } return manager.Logout() }, } return cmd } func sessionCmd() *cobra.Command { cmd := &cobra.Command{ Use: "session", Short: "Show current session info", Long: `Display current authentication session details.`, RunE: func(cmd *cobra.Command, args []string) error { manager, err := auth.NewSessionManager() if err != nil { return fmt.Errorf("failed to create session manager: %w", err) } session, err := manager.GetSession() if err != nil { return fmt.Errorf("no active session: %w", err) } fmt.Fprintf(os.Stdout, "Session: %s\n", session.UID) return nil }, } return cmd }