gokeepas

module
v0.0.0-...-dffdc56 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 29, 2023 License: MIT

README

Менеджер паролей GophKeeper

Выпускной проект курса Яндекс Практикум "Продвинутый Go-разработчик".

Общие требования

GophKeeper представляет собой клиент-серверную систему, позволяющую пользователю надёжно и безопасно хранить логины, пароли, бинарные данные и прочую приватную информацию.

Типы хранимой информации
  • пары логин/пароль
  • произвольные текстовые данные
  • произвольные бинарные данные
  • данные банковских карт

Реализация

Использованные технологии
  • Redis - хранение шифрованных секретов и метаданных сервера
  • jwt - аутентификация пользователей во время работы с сервером
  • grpc - протокол взаимодействия клиент-сервер
  • cobra - библиотека для cli интерфейса клиента
Сервер

Сервер реализован на базе сгенерированного шаблона унарного grpc сервера. Для хранения технической информации и данных пользователей использована база Redis.

Регистрация новых пользователей и дальнейшая их аутентификация происходит через пару логин/пароль.

После аутентификации пользователю отправляется jwt токен с ограниченным временем жизни. Этот токен сохраняется клиентом в файл и используется в дальнейшем для запросов данных.

Так как система должна хранить и передавать данные безопасно для коммуникации используется шифрование tls протоколом. Сертификат tls генерится автоматически при каждом запуске сервера.

Данные пользователя храняться в зашифрованном виде индивидуальным ключом пользователя. Этот ключ также храниться в базе в зашифрованном виде мастер ключом сервера. Мастер ключ сервера передается при запуске сервера через флаг. Если при первом запуске сервера на пустой базе данных ключ не был предоставлен, то сервер сгенерирует его автоматически и отобразит в консольном выводе. При дальнейших запусках/перезапусках сервера на этой же базе необходимо предоставлять этот же ключ. В случае утери мастер ключа, база данных будет в зашифрованном виде и расшифровать ее будет не возможно.

Скачать сервер для linux можно здесь.

Быстрый старт
docker run --rm --name gokeepas-stor -d -p 6379:6379 redis:6-alpine redis-server

./keeppas-server -a 0.0.0.0:5000
	!!!! Not found server key, generate new: 

		'YXjGEdqZWeTZ255dLanqFV8s'	

	Please remember and provide it in the next run with this db !!!
{"level":"info","timestamp":"2023-05-19T07:27:11Z","caller":"server/main.go:89","msg":"server started"}

После чего можно подключаться к серверу на порт 5000/tcp.

Клиент

Клиент реализован на базе библиотеки cobra.

Для получения справки достаточно запустить клиент без параметров.

Скачать клиента для своей платформы можно здесь.

Подключение к серверу

Для успешного подключения к серверу необходимо использовать DNS имя или алиас из hosts файла, по ip адресу подключение не пройдет из-за ошибки сертификата.

echo "SERVER_IP    keeppas" >> /etc/hosts
./keeppas -s keeppas:5000 signup -u USER_LOGIN -p USER_PASSWORD
login success
Сборка
mkdir -p bin/linux
mkdir -p bin/win
mkdir -p bin/mac
# build linux
go build -ldflags "-X 'github.com/hrapovd1/gokeepas/internal/cli.BuildTime=$(date +'%Y-%m-%d %H:%M')'" -o bin/linux/keeppas cmd/client/main.go
go build -o bin/linux/keeppas-server cmd/server/main.go
# build windows
GOOS=windows GOARCH=amd64 go build -ldflags "-X 'github.com/hrapovd1/gokeepas/internal/cli.BuildTime=$(date +'%Y-%m-%d %H:%M')'" -o bin/win/keeppas.exe cmd/client/main.go
# build mac amd64
GOOS=darwin GOARCH=amd64 go build -ldflags "-X 'github.com/hrapovd1/gokeepas/internal/cli.BuildTime=$(date +'%Y-%m-%d %H:%M')'" -o bin/mac/keeppas cmd/client/main.go

Directories

Path Synopsis
cmd
internal
cli
Package cli contents methods and types for KeepPas cli client.
Package cli contents methods and types for KeepPas cli client.
config
Package config contents type and methods for server and client configuration
Package config contents type and methods for server and client configuration
crypto
Package crypto contents type and methods for encryption/decryption
Package crypto contents type and methods for encryption/decryption
server
server package contents type and methods of KeepPas server
server package contents type and methods of KeepPas server
storage
Package storage contents types and methods for KeepPas server storage
Package storage contents types and methods for KeepPas server storage
types
Package types contents types for server and client.
Package types contents types for server and client.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL