# pop A ProtonMail CLI tool written in Go, similar to gog. ## Features - **Authentication**: Interactive login/logout with 2FA support and masked password prompts - **Session Management**: Secure token storage in `~/.config/pop/` - **ProtonMail API Client**: REST client with rate limiting and error handling - **PGP Encryption**: Full support for ProtonMail's PGP encryption via gopenpgp v2 ## Installation ```bash # Build from source git clone https://github.com/frenocorp/pop.git cd pop make build # Install make install ``` ## Usage ```bash # Initialize login (interactive mode with masked password prompt) pop login # Check current session pop session # Logout pop logout ``` ## Project Structure ``` pop/ ├── cmd/ │ ├── root.go # CLI root command │ └── auth.go # Authentication commands ├── internal/ │ ├── auth/ # Session management │ │ └── session.go │ ├── config/ # Configuration handling │ │ └── config.go │ └── api/ # ProtonMail API client │ └── client.go ├── .github/ │ └── workflows/ │ └── ci.yml # CI/CD pipeline ├── go.mod ├── go.sum ├── main.go ├── Makefile └── README.md ``` ## Configuration Configuration is stored in `~/.config/pop/config.json`: ```json { "api_base_url": "https://api.protonmail.ch", "timeout_sec": 30, "rate_limit_requests": 100, "rate_limit_window_sec": 60 } ``` Session data is stored in `~/.config/pop/session.json`: ```json { "uid": "user-uid", "access_token": "token", "refresh_token": "refresh", "expires_at": 0, "two_factor_enabled": false } ``` ## Development ```bash # Build make build # Run tests make test # Format code make fmt # Lint make lint # Clean build artifacts make clean ``` ## Dependencies - [github.com/spf13/cobra](https://github.com/spf13/cobra) - CLI framework - [github.com/ProtonMail/gopenpgp/v2](https://github.com/ProtonMail/gopenpgp) - PGP crypto ## License MIT