gophkeeper

module
v0.0.0-...-e0ea65e Latest Latest
Warning

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

Go to latest
Published: Sep 25, 2024 License: Apache-2.0

README

gophkeeper

План:

  1. Transport GRPC with TLS
  2. Embed tls cert to client
  3. Storage - PgSQL

Генерация самоподписанных сертификатов

openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=Acme Root CA" -out ca.crt
openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=localhost" -out server.csr
openssl x509 -req -extfile <(printf "subjectAltName=DNS:localhost") -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

Рабочая схема

client_cli <-> client_as_local_daemon_with_state_db <-> server ?

Заметки

связка такая: клиент(человек/скрипт) <-> client(+in-memory bd) <-> server <-> postgresql

Регистрация пользователя
curl -X POST http://localhost:8080/register/user1/mypass
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY4OTEzNjYsIlVzZXJJRCI6Nn0.82TtCsDh9rjkEh8V_x6m8kQcOHiAKZywIRKU29n9AW4

В процессе регистрации происходить добавление пользователя в BD и генерация jwt токена для дальнейшей работы. user1 - пользователь, mypass - пароль

Авторизация пользователя
curl -X POST http://localhost:8080/auth/user1/mypass
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY4OTE0OTIsIlVzZXJJRCI6Nn0.jArE2TGBa-mTpuryKDFRLZQweNUsWGcqtKRh6QtrAxc

После авторизации пользователя происходит выдача jwt токена и sync его записей с сервера в client: user1 - пользователь, mypass - пароль

2024/09/20 19:00:29 Starting http server: localhost:8080
2024/09/20 19:04:52 Synced records from server: 3
Добавление данных на сервер
curl -X POST -H'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY4OTE0OTIsIlVzZXJJRCI6Nn0.jArE2TGBa-mTpuryKDFRLZQweNUsWGcqtKRh6QtrAxc' --data-binary 'testok' http://localhost:8080/add/text/test/description
STORED

Добавление текстовых данных в систему, по аналогии добавляется credentials - логин пароль, binary - произвольные бинарные данные, card - номер кредитки. Валидация типов происходит в специально модуле dataparser. add - добавление, text - тип данных, test - имя айтема, description описание(метадата). --data-binary - передача даты.

Получение айтема по ключу
curl -X GET http://localhost:8080/get/test 
testok

Получение даты по ключу уже из локального стораджа (при add запись прошла на сервер и осела в локальном сторадже клиента). get - получение, test - имя даты.

Получение списка всех айтемов клиента (из локального стораджа)
curl -X GET http://localhost:8080/listall  
Name | Type | Description
--------------------------
test | TEXT | description
test2 | TEXT | description2
Удаление айтемов по ключу
curl -X DELETE -H'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY4OTE0OTIsIlVzZXJJRCI6Nn0.jArE2TGBa-mTpuryKDFRLZQweNUsWGcqtKRh6QtrAxc' http://localhost:8080/del/test             
REMOVED

del - удаление, test - имя ключа.

TODO

  1. Еще пишу тесты
  2. TUI прикопал шаблон, но не успеваю, надо разбираться, как делать переход между моделями.
  3. Постараюсь доделать retry, где это нужно.
  4. Если получится с TUI, по возможно получится использовать json для локальной передачи в client.
  5. Все упирается во время, сейчас отчетные ревью периоды. ...

Directories

Path Synopsis
cmd
client command
Package main for client
Package main for client
server command
Package main for server
Package main for server
tui command
internal
auth
Package auth for authorization support
Package auth for authorization support
client
Package client for cache and send items
Package client for cache and send items
dataparser
Package dataparser manage data types
Package dataparser manage data types
fixed_errors
Package fixederrors with custom errors
Package fixederrors with custom errors
options
Package options for client and server
Package options for client and server
server
Package server with grpc transport for client
Package server with grpc transport for client
storage
Package storage with interfaces and implementations
Package storage with interfaces and implementations

Jump to

Keyboard shortcuts

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