Skip to content

northmule/gophkeeper

Repository files navigation

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

coverage

Клиент

Alt Text

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

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

Сервер должен реализовывать следующую бизнес-логику:

  • регистрация, аутентификация и авторизация пользователей;
  • хранение приватных данных;
  • синхронизация данных между несколькими авторизованными клиентами одного владельца;
  • передача приватных данных владельцу по запросу.

Клиент должен реализовывать следующую бизнес-логику:

  • аутентификация и авторизация пользователей на удалённом сервере;
  • доступ к приватным данным по запросу.

Функции, реализация которых остаётся на усмотрение исполнителя:

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

Дополнительные требования:

  • клиент должен распространяться в виде CLI-приложения с возможностью запуска на платформах Windows, Linux и Mac OS;
  • клиент должен давать пользователю возможность получить информацию о версии и дате сборки бинарного файла клиента.

Типы хранимой информации

  • пары логин/пароль;
  • произвольные текстовые данные;
  • произвольные бинарные данные;
  • данные банковских карт. Для любых данных должна быть возможность хранения произвольной текстовой метаинформации (принадлежность данных к веб-сайту, личности или банку, списки одноразовых кодов активации и прочее).

Абстрактная схема взаимодействия с системой

Ниже описаны базовые сценарии взаимодействия пользователя с системой.

Для нового пользователя:

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

Для существующего пользователя:

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

Необязательные функции

  • поддержка данных типа OTP (one time password);
  • поддержка терминального интерфейса (TUI — terminal user interface);
  • использование бинарного протокола;
  • наличие функциональных и/или интеграционных тестов;
  • описание протокола взаимодействия клиента и сервера в формате Swagger.

Общий принцип взаимодействия между сервером и клиентом

  • Пользователь регистрируется и затем авторизуется используя клиент для своей ОС
  • При авторизации происходит обмен публичными rsa ключами
  • Клиент передает серверу свой aes ключ зашифрованный публичным ключом сервера
  • Сервер расшифровывает aes ключ клиента своим приватным rsa ключом и сохраняет его в бд
  • Дальнейший обмен происходит в зашифрованном aes клюбчом виде, путём передачи сообщений от клиента к серверу и от сервера к клиенту

Настройка сервера

Конфигурирование сервера начинается с файла .server.env

Параметры конфигурации

# Адресс и порт на котором сервер принимает подключения
ADDRESS = ":9097"
# Подключение к БД
DSN = "postgres://postgres:123@localhost:5456/gophkeeper?sslmode=disable"
# Уроверь логирования
LOG_LEVEL = "debug"
# Уровень сжатия gzip для http
HTTP_COMPRESS_LEVEL = 5
# Алгоритм хэширования пароля
PASSWORD_ALGO_HASHING = "sha512"
# Путь к папке для сохранения файлов пользователей
PATH_FILE_STORAGE = "/home/user/load_project"
# Путь для сохранения публичного и приватного ключей
PATH_KEYS = "/home/user/load_project"
# Перезаписывать ключи при старте сервера
OVERWRITE_KEYS = false

Настройка и запуск клиента

Клиент работает в консольном режиме и выполнен на базе charmbracelet/bubbletea. Конфигурация клиента начинается с файла client.yaml. Файл конфигурации должен находится рядом с клиентом.

# Адрес сервера
ServerAddress: "http://localhost:9097"
# Уровень логирования клиента
LogLever: "info"
# Папка для сохранения файлов с сервера
FilePath: "/tmp"
# Путь с расположением публичного и приватного ключей клиента
PathKeys: "/home/djo/Загрузки/load_project/client"
# Путь к папке с публичным ключем сервера
PathPublicKeyServer: "/home/djo/Загрузки/load_project/public_server"
# Перезаписывать клиентские ключи при старте клиента
OverwriteKeys: false

При запуске клиента будут сгенерированы необходимые ключи и сохранены в PathKeys

API сервера

Доступно после авторизации

  • /api/v1/save_public_key "приём от клиента публичного ключа"
  • /api/v1/save_client_private_key "приём от клиента приватного ключа(aes используется для шифрования данных)"
  • /api/v1/download_server_public_key "клиент забирает публичный ключ сервера"
  • /api/v1/items_list "список сохранённых данных"
  • /api/v1/item_get/{uuid} "получить данные по uuid"
  • /api/v1/save_card_data "добавить/изменить данные банковской карты"
  • /api/v1/save_text_data "добавить/изменить текстовые данные"
  • /api/v1/file_data/init "инициализация приёма файла, базовые данные о файле"
  • /api/v1/file_data/load/{file_uuid}/{part} "приём данных файла"
  • /api/v1/file_data/get/{file_uuid}/{part} "отдача файла клиенту"

Публичное

  • /api/v1/health "состояние сервера"
  • /api/v1/register "регистрация пользователя"
  • /api/v1/login "авторизация"

Возможности клиента

  • Регистрация / авторизация пользователя
  • Доступ к данным только после авторизации
  • Добавление / изменение данных
  • Ввод данных банковских карт, текстовых данных, бинарных данных (отправка и получение файлов)
  • Табличный просмотр введённых данных

Библиотеки использованные в проекте

Запуск тестов

go test ./...

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages