Senior Engineer 5dc4a1b742
Some checks are pending
CI / build (1.21.x) (push) Waiting to run
CI / build (1.22.x) (push) Waiting to run
CI / security-scan (push) Waiting to run
Fix FRE-4693 code review findings: 2-arg constructor, 403 error test, error content check
- 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
2026-05-10 09:38:21 -04:00
2026-04-29 16:30:29 -04:00
2026-04-27 19:13:03 -04:00
2026-04-27 19:13:03 -04:00
2026-04-29 16:30:29 -04:00

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

License

MIT

Description
No description provided
Readme 171 KiB
Languages
Go 99.8%
Makefile 0.2%