- Pass nil refresher to NewProtonMailClient at all 5 call sites - Change TestListMessages_APIError from 401 to 403 (avoids refresh interception) - Add error content assertion to TestGetMessage_NotFound
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
# Build from source
git clone https://github.com/frenocorp/pop.git
cd pop
make build
# Install
make install
Usage
# 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:
{
"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:
{
"uid": "user-uid",
"access_token": "token",
"refresh_token": "refresh",
"expires_at": 0,
"two_factor_enabled": false
}
Development
# Build
make build
# Run tests
make test
# Format code
make fmt
# Lint
make lint
# Clean build artifacts
make clean
Dependencies
- github.com/spf13/cobra - CLI framework
- github.com/ProtonMail/gopenpgp/v2 - PGP crypto
License
MIT
Description
Languages
Go
99.8%
Makefile
0.2%