A secure and reliable client-server system for storing sensitive information, written in Go. GophKeeper provides encrypted storage for various types of data including credentials, binary files, text notes, and more.
- π Secure user authentication
- π Binary file storage and retrieval
- π Cross-platform support (Linux, macOS, Windows)
- π End-to-end encryption
- π High-performance gRPC communication
- πΎ Reliable PostgreSQL storage backend
- βοΈ S3-compatible object storage support
- Go 1.23 or higher
- PostgreSQL
- Docker
- Clone the repository:
git clone https://github.com/itallix/gophkeeper.git
cd gophkeeper- Build the client and server:
make all # Build CLI for all platforms
# or
make linux # Build CLI for linux platformmake up # Start Docker containers
make down # Stop Docker containers- Start the server:
make server
./bin/server- Setup the client:
# For Linux AMD64
make linux
mv ./bin/cli-linux-amd64 ./bin/cli
# For other platforms, use appropriate binary- Register and authenticate:
./bin/cli user register -l <username>
./bin/cli user auth -l <username>All commands follow the pattern:
./bin/cli <category> <action> [options]Most commands require the -p (path) parameter as a reference to the secret. Binary retrieval operation use -f (filepath) for the source file path.
# Register a new user
./bin/cli user register -l adam
# Authenticate user
./bin/cli user auth -l adam# Upload a binary file
./bin/cli binary create -f path/to/file.mp4
# List all stored binaries
./bin/cli binary list
# Retrieve a binary file
./bin/cli binary get -p original_name.mp4 -o output_name.mp4
# Delete a binary file
./bin/cli binary delete -p filename.mp4| Flag | Description | Used With |
|---|---|---|
-p |
Path/reference to the secret | Most commands |
-f |
Source file path | Binary creation |
-o |
Output file path | Binary retrieval |
-l |
Username | User operations |
.
βββ cmd/
β βββ client/ # Client application
β βββ server/ # Server application
βββ internal/
β βββ client/ # Client logic
β βββ server/ # Server logic
β βββ common/ # Shared code
βββ pkg/
β βββ generated/ # Generated protobuf code
βββ api/
β βββ proto/ # Protocol buffer definitions
βββ db/
βββ migrations/ # Database migrations
make testmake migrate-up # Apply migrations
make migrate-down # Rollback migrationsmake proto- All data is encrypted before storage
- Communication is secured via gRPC with TLS
- Passwords are hashed using modern algorithms
This project is licensed under the MIT License - see the LICENSE file for details.
- MinIO for object storage
- gRPC for the communication framework
- PostgreSQL for reliable data storage
- The Yandex.Practicum and it's rock-star team for inspiration and support