diff --git a/Makefile b/Makefile index 4cf8c32b..abc8a2e1 100644 --- a/Makefile +++ b/Makefile @@ -4,11 +4,9 @@ N=1 default: clean test clean: - make -C ./cmd/hls clean - make -C ./cmd/hlm clean - make -C ./cmd/hms clean - make -C ./cmd/hmc clean - make -C ./cmd/ubc clean + make -C ./cmd/hidden_lake/service clean + make -C ./cmd/hidden_lake/messenger clean + make -C ./cmd/hidden_lake/traffic clean make -C ./examples/_cmd/anon_messenger clean make -C ./examples/_cmd/echo_service clean diff --git a/README.md b/README.md index 87d434fb..5336988d 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,9 @@ The `go-peer` library contains a large number of functions necessary to ensure t ## TODO 1. Write or close commented tests as 'TODO' -2. Update HMS's, HMC's package structure -3. Try merge HLS with HMS and HLC with HMC -4. Create UBC application +2. Create UBC application +3. Databases to ISettings +4. Write tests for HLT ## Dependencies @@ -36,11 +36,11 @@ The `go-peer` library contains a large number of functions necessary to ensure t 1. [Hidden Lake Service](#1-hidden-lake-service) 2. [Hidden Lake Messenger](#2-hidden-lake-messenger) -3. [Another applications](#3-another-applications) +3. [Hidden Lake Traffic](#3-hidden-lake-traffic) ## 1. Hidden Lake Service -> [github.com/number571/go-peer/tree/master/cmd/hls](https://github.com/number571/go-peer/tree/master/cmd/hls "HLS") +> [github.com/number571/go-peer/tree/master/cmd/hidden_lake/service](https://github.com/number571/go-peer/tree/master/cmd/hidden_lake/service "HLS") hls_logo.png @@ -159,7 +159,7 @@ Decode response ## 2. Hidden Lake Messenger -> [github.com/number571/go-peer/tree/master/cmd/hlm](https://github.com/number571/go-peer/tree/master/cmd/hlm "HLM"); +> [github.com/number571/go-peer/tree/master/cmd/hidden_lake/messenger](https://github.com/number571/go-peer/tree/master/cmd/hidden_lake/messenger "HLM"); hlm_logo.png @@ -204,15 +204,11 @@ Next, you need to login by going to the Sign in page. Enter your `login=user` an To see the success of sending and receiving messages, you need to do all the same operations, but with `localhost:7070` as `node2_hlm`. This node will be Alice. -> More example images about HLM pages in the [github.com/number571/go-peer/cmd/hlm/examples/images](https://github.com/number571/go-peer/tree/master/cmd/hlm/examples/images "Path to HLM images") +> More example images about HLM pages in the [github.com/number571/go-peer/cmd/hidden_lake/messenger/examples/images](https://github.com/number571/go-peer/tree/master/cmd/hlm/examples/images "Path to HLM images") -## 3. Another applications +## 3. Hidden Lake Traffic -* Hidden Message Service: [github.com/number571/go-peer/tree/master/cmd/hms](https://github.com/number571/go-peer/tree/master/cmd/hms "HMS"); -* Hidden Message Client: [github.com/number571/go-peer/tree/master/cmd/hmc](https://github.com/number571/go-peer/tree/master/cmd/hmc "HMC"); -* Asymmetric Keys Generator: [github.com/number571/go-peer/tree/master/cmd/akg](https://github.com/number571/go-peer/tree/master/cmd/akg "AKG"); -* Cryptographic Data Storage: [github.com/number571/go-peer/tree/master/cmd/cds](https://github.com/number571/go-peer/tree/master/cmd/cds "CDS"); -* In developing... Union Block Chain: [github.com/number571/go-peer/tree/master/cmd/ubc](https://github.com/number571/go-peer/tree/master/cmd/ubc "UBC"); +TODO ### Deprecated applications diff --git a/cmd/hlm/.gitignore b/cmd/hidden_lake/messenger/.gitignore similarity index 100% rename from cmd/hlm/.gitignore rename to cmd/hidden_lake/messenger/.gitignore diff --git a/cmd/hlm/Makefile b/cmd/hidden_lake/messenger/Makefile similarity index 85% rename from cmd/hlm/Makefile rename to cmd/hidden_lake/messenger/Makefile index e3e4b72c..38cb1f3d 100644 --- a/cmd/hlm/Makefile +++ b/cmd/hidden_lake/messenger/Makefile @@ -3,8 +3,8 @@ GC=go build .PHONY: default build run test clean default: build run build: - make build -C ../hls - cp ../hls/hls prog_hls + make build -C ../service + cp ../service/hls prog_hls $(GC) -o hlm ./cmd/hlm run: ./prog_hls & diff --git a/cmd/hlm/README.md b/cmd/hidden_lake/messenger/README.md similarity index 96% rename from cmd/hlm/README.md rename to cmd/hidden_lake/messenger/README.md index 72034728..106d552b 100644 --- a/cmd/hlm/README.md +++ b/cmd/hidden_lake/messenger/README.md @@ -45,7 +45,7 @@ Next, you need to login by going to the Sign in page. Enter your `login=user` an To see the success of sending and receiving messages, you need to do all the same operations, but with `localhost:7070` as `node2_hlm`. This node will be Alice. -> More example images about HLM pages in the [github.com/number571/go-peer/cmd/hlm/examples/images](https://github.com/number571/go-peer/tree/master/cmd/hlm/examples/images "Path to HLM images") +> More example images about HLM pages in the [github.com/number571/go-peer/cmd/hidden_lake/messenger/examples/images](https://github.com/number571/go-peer/tree/master/cmd/hlm/examples/images "Path to HLM images") ## Cryptographic algorithms and functions diff --git a/cmd/hlm/cmd/hlm/hlm_test.go b/cmd/hidden_lake/messenger/cmd/hlm/hlm_test.go similarity index 100% rename from cmd/hlm/cmd/hlm/hlm_test.go rename to cmd/hidden_lake/messenger/cmd/hlm/hlm_test.go diff --git a/cmd/hlm/cmd/hlm/init_app.go b/cmd/hidden_lake/messenger/cmd/hlm/init_app.go similarity index 72% rename from cmd/hlm/cmd/hlm/init_app.go rename to cmd/hidden_lake/messenger/cmd/hlm/init_app.go index c6cf8d78..4a3b24e3 100644 --- a/cmd/hlm/cmd/hlm/init_app.go +++ b/cmd/hidden_lake/messenger/cmd/hlm/init_app.go @@ -3,13 +3,13 @@ package main import ( "fmt" - "github.com/number571/go-peer/cmd/hlm/internal/app" - "github.com/number571/go-peer/cmd/hlm/internal/config" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/config" "github.com/number571/go-peer/pkg/filesystem" "github.com/number571/go-peer/pkg/types" - hlm_settings "github.com/number571/go-peer/cmd/hlm/internal/settings" - hls_client "github.com/number571/go-peer/cmd/hls/pkg/client" + hlm_settings "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/settings" + hls_client "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" ) func initApp() (types.IApp, error) { diff --git a/cmd/hlm/cmd/hlm/main.go b/cmd/hidden_lake/messenger/cmd/hlm/main.go similarity index 100% rename from cmd/hlm/cmd/hlm/main.go rename to cmd/hidden_lake/messenger/cmd/hlm/main.go diff --git a/cmd/hlm/examples/images/v1/about.png b/cmd/hidden_lake/messenger/examples/images/v1/about.png similarity index 100% rename from cmd/hlm/examples/images/v1/about.png rename to cmd/hidden_lake/messenger/examples/images/v1/about.png diff --git a/cmd/hlm/examples/images/v1/chat.png b/cmd/hidden_lake/messenger/examples/images/v1/chat.png similarity index 100% rename from cmd/hlm/examples/images/v1/chat.png rename to cmd/hidden_lake/messenger/examples/images/v1/chat.png diff --git a/cmd/hlm/examples/images/v1/friends.png b/cmd/hidden_lake/messenger/examples/images/v1/friends.png similarity index 100% rename from cmd/hlm/examples/images/v1/friends.png rename to cmd/hidden_lake/messenger/examples/images/v1/friends.png diff --git a/cmd/hlm/examples/images/v1/settings.png b/cmd/hidden_lake/messenger/examples/images/v1/settings.png similarity index 100% rename from cmd/hlm/examples/images/v1/settings.png rename to cmd/hidden_lake/messenger/examples/images/v1/settings.png diff --git a/cmd/hlm/examples/images/v2/about.png b/cmd/hidden_lake/messenger/examples/images/v2/about.png similarity index 100% rename from cmd/hlm/examples/images/v2/about.png rename to cmd/hidden_lake/messenger/examples/images/v2/about.png diff --git a/cmd/hlm/examples/images/v2/chat.png b/cmd/hidden_lake/messenger/examples/images/v2/chat.png similarity index 100% rename from cmd/hlm/examples/images/v2/chat.png rename to cmd/hidden_lake/messenger/examples/images/v2/chat.png diff --git a/cmd/hlm/examples/images/v2/friends.png b/cmd/hidden_lake/messenger/examples/images/v2/friends.png similarity index 100% rename from cmd/hlm/examples/images/v2/friends.png rename to cmd/hidden_lake/messenger/examples/images/v2/friends.png diff --git a/cmd/hlm/examples/images/v2/settings.png b/cmd/hidden_lake/messenger/examples/images/v2/settings.png similarity index 100% rename from cmd/hlm/examples/images/v2/settings.png rename to cmd/hidden_lake/messenger/examples/images/v2/settings.png diff --git a/cmd/hlm/examples/images/v2/signin.png b/cmd/hidden_lake/messenger/examples/images/v2/signin.png similarity index 100% rename from cmd/hlm/examples/images/v2/signin.png rename to cmd/hidden_lake/messenger/examples/images/v2/signin.png diff --git a/cmd/hlm/examples/images/v2/signup.png b/cmd/hidden_lake/messenger/examples/images/v2/signup.png similarity index 100% rename from cmd/hlm/examples/images/v2/signup.png rename to cmd/hidden_lake/messenger/examples/images/v2/signup.png diff --git a/cmd/hlm/internal/app/app.go b/cmd/hidden_lake/messenger/internal/app/app.go similarity index 86% rename from cmd/hlm/internal/app/app.go rename to cmd/hidden_lake/messenger/internal/app/app.go index 4761acbe..7122650c 100644 --- a/cmd/hlm/internal/app/app.go +++ b/cmd/hidden_lake/messenger/internal/app/app.go @@ -6,13 +6,13 @@ import ( "os" "time" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" - "github.com/number571/go-peer/cmd/hlm/internal/config" - "github.com/number571/go-peer/cmd/hlm/internal/database" - "github.com/number571/go-peer/cmd/hlm/internal/handler" - hlm_settings "github.com/number571/go-peer/cmd/hlm/internal/settings" - "github.com/number571/go-peer/cmd/hlm/web" - hls_client "github.com/number571/go-peer/cmd/hls/pkg/client" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/config" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/database" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/handler" + hlm_settings "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/settings" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/web" + hls_client "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" "github.com/number571/go-peer/pkg/closer" "github.com/number571/go-peer/pkg/storage" "github.com/number571/go-peer/pkg/types" diff --git a/cmd/hlm/internal/app/app_test.go b/cmd/hidden_lake/messenger/internal/app/app_test.go similarity index 100% rename from cmd/hlm/internal/app/app_test.go rename to cmd/hidden_lake/messenger/internal/app/app_test.go diff --git a/cmd/hlm/internal/app/state/clear.go b/cmd/hidden_lake/messenger/internal/app/state/clear.go similarity index 92% rename from cmd/hlm/internal/app/state/clear.go rename to cmd/hidden_lake/messenger/internal/app/state/clear.go index 706494e4..bca2ff5b 100644 --- a/cmd/hlm/internal/app/state/clear.go +++ b/cmd/hidden_lake/messenger/internal/app/state/clear.go @@ -1,7 +1,7 @@ package state import ( - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" ) diff --git a/cmd/hlm/internal/app/state/state.go b/cmd/hidden_lake/messenger/internal/app/state/state.go similarity index 94% rename from cmd/hlm/internal/app/state/state.go rename to cmd/hidden_lake/messenger/internal/app/state/state.go index 326fb557..a7f8a0ca 100644 --- a/cmd/hlm/internal/app/state/state.go +++ b/cmd/hidden_lake/messenger/internal/app/state/state.go @@ -4,14 +4,14 @@ import ( "fmt" "sync" - "github.com/number571/go-peer/cmd/hlm/internal/database" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/database" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/crypto/entropy" "github.com/number571/go-peer/pkg/encoding" "github.com/number571/go-peer/pkg/storage" - hlm_settings "github.com/number571/go-peer/cmd/hlm/internal/settings" - hls_client "github.com/number571/go-peer/cmd/hls/pkg/client" + hlm_settings "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/settings" + hls_client "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" ) type sState struct { diff --git a/cmd/hlm/internal/app/state/state_test.go b/cmd/hidden_lake/messenger/internal/app/state/state_test.go similarity index 100% rename from cmd/hlm/internal/app/state/state_test.go rename to cmd/hidden_lake/messenger/internal/app/state/state_test.go diff --git a/cmd/hlm/internal/app/state/types.go b/cmd/hidden_lake/messenger/internal/app/state/types.go similarity index 83% rename from cmd/hlm/internal/app/state/types.go rename to cmd/hidden_lake/messenger/internal/app/state/types.go index 8200f570..4a2355f1 100644 --- a/cmd/hlm/internal/app/state/types.go +++ b/cmd/hidden_lake/messenger/internal/app/state/types.go @@ -1,8 +1,8 @@ package state import ( - "github.com/number571/go-peer/cmd/hlm/internal/database" - hls_client "github.com/number571/go-peer/cmd/hls/pkg/client" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/database" + hls_client "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/storage" ) diff --git a/cmd/hlm/internal/app/state/update.go b/cmd/hidden_lake/messenger/internal/app/state/update.go similarity index 100% rename from cmd/hlm/internal/app/state/update.go rename to cmd/hidden_lake/messenger/internal/app/state/update.go diff --git a/cmd/hlm/internal/app/state/updater.go b/cmd/hidden_lake/messenger/internal/app/state/updater.go similarity index 100% rename from cmd/hlm/internal/app/state/updater.go rename to cmd/hidden_lake/messenger/internal/app/state/updater.go diff --git a/cmd/hlm/internal/chat_queue/chat_queue.go b/cmd/hidden_lake/messenger/internal/chat_queue/chat_queue.go similarity index 100% rename from cmd/hlm/internal/chat_queue/chat_queue.go rename to cmd/hidden_lake/messenger/internal/chat_queue/chat_queue.go diff --git a/cmd/hlm/internal/chat_queue/chat_queue_test.go b/cmd/hidden_lake/messenger/internal/chat_queue/chat_queue_test.go similarity index 100% rename from cmd/hlm/internal/chat_queue/chat_queue_test.go rename to cmd/hidden_lake/messenger/internal/chat_queue/chat_queue_test.go diff --git a/cmd/hlm/internal/chat_queue/types.go b/cmd/hidden_lake/messenger/internal/chat_queue/types.go similarity index 100% rename from cmd/hlm/internal/chat_queue/types.go rename to cmd/hidden_lake/messenger/internal/chat_queue/types.go diff --git a/cmd/hlm/internal/config/config.go b/cmd/hidden_lake/messenger/internal/config/config.go similarity index 100% rename from cmd/hlm/internal/config/config.go rename to cmd/hidden_lake/messenger/internal/config/config.go diff --git a/cmd/hlm/internal/config/config_test.go b/cmd/hidden_lake/messenger/internal/config/config_test.go similarity index 100% rename from cmd/hlm/internal/config/config_test.go rename to cmd/hidden_lake/messenger/internal/config/config_test.go diff --git a/cmd/hlm/internal/config/types.go b/cmd/hidden_lake/messenger/internal/config/types.go similarity index 100% rename from cmd/hlm/internal/config/types.go rename to cmd/hidden_lake/messenger/internal/config/types.go diff --git a/cmd/hlm/internal/database/database.go b/cmd/hidden_lake/messenger/internal/database/database.go similarity index 100% rename from cmd/hlm/internal/database/database.go rename to cmd/hidden_lake/messenger/internal/database/database.go diff --git a/cmd/hlm/internal/database/database_test.go b/cmd/hidden_lake/messenger/internal/database/database_test.go similarity index 100% rename from cmd/hlm/internal/database/database_test.go rename to cmd/hidden_lake/messenger/internal/database/database_test.go diff --git a/cmd/hlm/internal/database/keys.go b/cmd/hidden_lake/messenger/internal/database/keys.go similarity index 100% rename from cmd/hlm/internal/database/keys.go rename to cmd/hidden_lake/messenger/internal/database/keys.go diff --git a/cmd/hlm/internal/database/message.go b/cmd/hidden_lake/messenger/internal/database/message.go similarity index 100% rename from cmd/hlm/internal/database/message.go rename to cmd/hidden_lake/messenger/internal/database/message.go diff --git a/cmd/hlm/internal/database/relation.go b/cmd/hidden_lake/messenger/internal/database/relation.go similarity index 100% rename from cmd/hlm/internal/database/relation.go rename to cmd/hidden_lake/messenger/internal/database/relation.go diff --git a/cmd/hlm/internal/database/types.go b/cmd/hidden_lake/messenger/internal/database/types.go similarity index 100% rename from cmd/hlm/internal/database/types.go rename to cmd/hidden_lake/messenger/internal/database/types.go diff --git a/cmd/hlm/internal/database/wrapper.go b/cmd/hidden_lake/messenger/internal/database/wrapper.go similarity index 100% rename from cmd/hlm/internal/database/wrapper.go rename to cmd/hidden_lake/messenger/internal/database/wrapper.go diff --git a/cmd/hlm/internal/handler/about.go b/cmd/hidden_lake/messenger/internal/handler/about.go similarity index 75% rename from cmd/hlm/internal/handler/about.go rename to cmd/hidden_lake/messenger/internal/handler/about.go index 76aa1327..602436fe 100644 --- a/cmd/hlm/internal/handler/about.go +++ b/cmd/hidden_lake/messenger/internal/handler/about.go @@ -4,8 +4,8 @@ import ( "html/template" "net/http" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" - "github.com/number571/go-peer/cmd/hlm/web" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/web" ) func AboutPage(s state.IState) http.HandlerFunc { diff --git a/cmd/hlm/internal/handler/chat.go b/cmd/hidden_lake/messenger/internal/handler/chat.go similarity index 87% rename from cmd/hlm/internal/handler/chat.go rename to cmd/hidden_lake/messenger/internal/handler/chat.go index c81c7616..8d9a3ceb 100644 --- a/cmd/hlm/internal/handler/chat.go +++ b/cmd/hidden_lake/messenger/internal/handler/chat.go @@ -7,12 +7,12 @@ import ( "net/http" "strings" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" - "github.com/number571/go-peer/cmd/hlm/internal/database" - hlm_settings "github.com/number571/go-peer/cmd/hlm/internal/settings" - "github.com/number571/go-peer/cmd/hlm/web" - "github.com/number571/go-peer/cmd/hls/pkg/request" - hls_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/database" + hlm_settings "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/settings" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/web" + "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/request" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" ) const ( diff --git a/cmd/hlm/internal/handler/chat_ws.go b/cmd/hidden_lake/messenger/internal/handler/chat_ws.go similarity index 85% rename from cmd/hlm/internal/handler/chat_ws.go rename to cmd/hidden_lake/messenger/internal/handler/chat_ws.go index 6340bff1..353cfdad 100644 --- a/cmd/hlm/internal/handler/chat_ws.go +++ b/cmd/hidden_lake/messenger/internal/handler/chat_ws.go @@ -1,7 +1,7 @@ package handler import ( - "github.com/number571/go-peer/cmd/hlm/internal/chat_queue" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/chat_queue" "golang.org/x/net/websocket" ) diff --git a/cmd/hlm/internal/handler/favicon.go b/cmd/hidden_lake/messenger/internal/handler/favicon.go similarity index 79% rename from cmd/hlm/internal/handler/favicon.go rename to cmd/hidden_lake/messenger/internal/handler/favicon.go index 66ec33f6..0360f2f0 100644 --- a/cmd/hlm/internal/handler/favicon.go +++ b/cmd/hidden_lake/messenger/internal/handler/favicon.go @@ -3,7 +3,7 @@ package handler import ( "net/http" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" ) func FaviconPage(s state.IState) http.HandlerFunc { diff --git a/cmd/hlm/internal/handler/friends.go b/cmd/hidden_lake/messenger/internal/handler/friends.go similarity index 92% rename from cmd/hlm/internal/handler/friends.go rename to cmd/hidden_lake/messenger/internal/handler/friends.go index 01b854c9..a13fb95d 100644 --- a/cmd/hlm/internal/handler/friends.go +++ b/cmd/hidden_lake/messenger/internal/handler/friends.go @@ -7,8 +7,8 @@ import ( "sort" "strings" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" - "github.com/number571/go-peer/cmd/hlm/web" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/web" "github.com/number571/go-peer/pkg/crypto/asymmetric" ) diff --git a/cmd/hlm/internal/handler/handler_test.go b/cmd/hidden_lake/messenger/internal/handler/handler_test.go similarity index 100% rename from cmd/hlm/internal/handler/handler_test.go rename to cmd/hidden_lake/messenger/internal/handler/handler_test.go diff --git a/cmd/hlm/internal/handler/incoming.go b/cmd/hidden_lake/messenger/internal/handler/incoming.go similarity index 82% rename from cmd/hlm/internal/handler/incoming.go rename to cmd/hidden_lake/messenger/internal/handler/incoming.go index 72eeb88f..60545c82 100644 --- a/cmd/hlm/internal/handler/incoming.go +++ b/cmd/hidden_lake/messenger/internal/handler/incoming.go @@ -6,13 +6,13 @@ import ( "net/http" "strings" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" - "github.com/number571/go-peer/cmd/hlm/internal/chat_queue" - "github.com/number571/go-peer/cmd/hlm/internal/database" - "github.com/number571/go-peer/cmd/hlm/internal/settings" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/chat_queue" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/database" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" - hls_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" ) func HandleIncomigHTTP(s state.IState) http.HandlerFunc { diff --git a/cmd/hlm/internal/handler/index.go b/cmd/hidden_lake/messenger/internal/handler/index.go similarity index 77% rename from cmd/hlm/internal/handler/index.go rename to cmd/hidden_lake/messenger/internal/handler/index.go index d273603e..a27228f2 100644 --- a/cmd/hlm/internal/handler/index.go +++ b/cmd/hidden_lake/messenger/internal/handler/index.go @@ -3,7 +3,7 @@ package handler import ( "net/http" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" ) func IndexPage(s state.IState) http.HandlerFunc { diff --git a/cmd/hlm/internal/handler/page404.go b/cmd/hidden_lake/messenger/internal/handler/page404.go similarity index 73% rename from cmd/hlm/internal/handler/page404.go rename to cmd/hidden_lake/messenger/internal/handler/page404.go index e699e88d..b7bc6c42 100644 --- a/cmd/hlm/internal/handler/page404.go +++ b/cmd/hidden_lake/messenger/internal/handler/page404.go @@ -4,8 +4,8 @@ import ( "html/template" "net/http" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" - "github.com/number571/go-peer/cmd/hlm/web" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/web" ) func NotFoundPage(s state.IState) http.HandlerFunc { diff --git a/cmd/hlm/internal/handler/qr.go b/cmd/hidden_lake/messenger/internal/handler/qr.go similarity index 91% rename from cmd/hlm/internal/handler/qr.go rename to cmd/hidden_lake/messenger/internal/handler/qr.go index 3d4c2cd4..317c641b 100644 --- a/cmd/hlm/internal/handler/qr.go +++ b/cmd/hidden_lake/messenger/internal/handler/qr.go @@ -7,7 +7,7 @@ import ( "github.com/boombuler/barcode" "github.com/boombuler/barcode/qr" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" ) func QRPublicKeyPage(s state.IState) http.HandlerFunc { diff --git a/cmd/hlm/internal/handler/settings.go b/cmd/hidden_lake/messenger/internal/handler/settings.go similarity index 92% rename from cmd/hlm/internal/handler/settings.go rename to cmd/hidden_lake/messenger/internal/handler/settings.go index a29594ca..864f50fc 100644 --- a/cmd/hlm/internal/handler/settings.go +++ b/cmd/hidden_lake/messenger/internal/handler/settings.go @@ -7,8 +7,8 @@ import ( "strconv" "strings" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" - "github.com/number571/go-peer/cmd/hlm/web" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/web" ) type sSettings struct { diff --git a/cmd/hlm/internal/handler/signin.go b/cmd/hidden_lake/messenger/internal/handler/signin.go similarity index 90% rename from cmd/hlm/internal/handler/signin.go rename to cmd/hidden_lake/messenger/internal/handler/signin.go index 1250fa1a..4f2dd971 100644 --- a/cmd/hlm/internal/handler/signin.go +++ b/cmd/hidden_lake/messenger/internal/handler/signin.go @@ -9,8 +9,8 @@ import ( "github.com/number571/go-peer/pkg/crypto/hashing" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" - "github.com/number571/go-peer/cmd/hlm/web" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/web" ) func SignInPage(s state.IState) http.HandlerFunc { diff --git a/cmd/hlm/internal/handler/signout.go b/cmd/hidden_lake/messenger/internal/handler/signout.go similarity index 86% rename from cmd/hlm/internal/handler/signout.go rename to cmd/hidden_lake/messenger/internal/handler/signout.go index ccb5b86a..6d55f648 100644 --- a/cmd/hlm/internal/handler/signout.go +++ b/cmd/hidden_lake/messenger/internal/handler/signout.go @@ -4,7 +4,7 @@ import ( "fmt" "net/http" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" ) func SignOutPage(s state.IState) http.HandlerFunc { diff --git a/cmd/hlm/internal/handler/signup.go b/cmd/hidden_lake/messenger/internal/handler/signup.go similarity index 90% rename from cmd/hlm/internal/handler/signup.go rename to cmd/hidden_lake/messenger/internal/handler/signup.go index 26286354..c49bc5f6 100644 --- a/cmd/hlm/internal/handler/signup.go +++ b/cmd/hidden_lake/messenger/internal/handler/signup.go @@ -7,12 +7,12 @@ import ( "net/http" "strings" - "github.com/number571/go-peer/cmd/hlm/internal/app/state" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/internal/app/state" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/crypto/hashing" - "github.com/number571/go-peer/cmd/hlm/web" - hls_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/messenger/web" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" ) func SignUpPage(s state.IState) http.HandlerFunc { diff --git a/cmd/hlm/internal/settings/settings.go b/cmd/hidden_lake/messenger/internal/settings/settings.go similarity index 100% rename from cmd/hlm/internal/settings/settings.go rename to cmd/hidden_lake/messenger/internal/settings/settings.go diff --git a/cmd/hlm/internal/settings/settings_test.go b/cmd/hidden_lake/messenger/internal/settings/settings_test.go similarity index 100% rename from cmd/hlm/internal/settings/settings_test.go rename to cmd/hidden_lake/messenger/internal/settings/settings_test.go diff --git a/cmd/hlm/web/static/css/bootstrap.css b/cmd/hidden_lake/messenger/web/static/css/bootstrap.css similarity index 100% rename from cmd/hlm/web/static/css/bootstrap.css rename to cmd/hidden_lake/messenger/web/static/css/bootstrap.css diff --git a/cmd/hlm/web/static/css/bootstrap.css.map b/cmd/hidden_lake/messenger/web/static/css/bootstrap.css.map similarity index 100% rename from cmd/hlm/web/static/css/bootstrap.css.map rename to cmd/hidden_lake/messenger/web/static/css/bootstrap.css.map diff --git a/cmd/hlm/web/static/img/favicon.ico b/cmd/hidden_lake/messenger/web/static/img/favicon.ico similarity index 100% rename from cmd/hlm/web/static/img/favicon.ico rename to cmd/hidden_lake/messenger/web/static/img/favicon.ico diff --git a/cmd/hlm/web/static/js/bootstrap.js b/cmd/hidden_lake/messenger/web/static/js/bootstrap.js similarity index 100% rename from cmd/hlm/web/static/js/bootstrap.js rename to cmd/hidden_lake/messenger/web/static/js/bootstrap.js diff --git a/cmd/hlm/web/static/js/bootstrap.js.map b/cmd/hidden_lake/messenger/web/static/js/bootstrap.js.map similarity index 100% rename from cmd/hlm/web/static/js/bootstrap.js.map rename to cmd/hidden_lake/messenger/web/static/js/bootstrap.js.map diff --git a/cmd/hlm/web/static/js/jquery.js b/cmd/hidden_lake/messenger/web/static/js/jquery.js similarity index 100% rename from cmd/hlm/web/static/js/jquery.js rename to cmd/hidden_lake/messenger/web/static/js/jquery.js diff --git a/cmd/hlm/web/template/about.html b/cmd/hidden_lake/messenger/web/template/about.html similarity index 100% rename from cmd/hlm/web/template/about.html rename to cmd/hidden_lake/messenger/web/template/about.html diff --git a/cmd/hlm/web/template/chat.html b/cmd/hidden_lake/messenger/web/template/chat.html similarity index 100% rename from cmd/hlm/web/template/chat.html rename to cmd/hidden_lake/messenger/web/template/chat.html diff --git a/cmd/hlm/web/template/friends.html b/cmd/hidden_lake/messenger/web/template/friends.html similarity index 100% rename from cmd/hlm/web/template/friends.html rename to cmd/hidden_lake/messenger/web/template/friends.html diff --git a/cmd/hlm/web/template/index.html b/cmd/hidden_lake/messenger/web/template/index.html similarity index 100% rename from cmd/hlm/web/template/index.html rename to cmd/hidden_lake/messenger/web/template/index.html diff --git a/cmd/hlm/web/template/page404.html b/cmd/hidden_lake/messenger/web/template/page404.html similarity index 100% rename from cmd/hlm/web/template/page404.html rename to cmd/hidden_lake/messenger/web/template/page404.html diff --git a/cmd/hlm/web/template/settings.html b/cmd/hidden_lake/messenger/web/template/settings.html similarity index 100% rename from cmd/hlm/web/template/settings.html rename to cmd/hidden_lake/messenger/web/template/settings.html diff --git a/cmd/hlm/web/template/signin.html b/cmd/hidden_lake/messenger/web/template/signin.html similarity index 100% rename from cmd/hlm/web/template/signin.html rename to cmd/hidden_lake/messenger/web/template/signin.html diff --git a/cmd/hlm/web/template/signup.html b/cmd/hidden_lake/messenger/web/template/signup.html similarity index 100% rename from cmd/hlm/web/template/signup.html rename to cmd/hidden_lake/messenger/web/template/signup.html diff --git a/cmd/hlm/web/web.go b/cmd/hidden_lake/messenger/web/web.go similarity index 100% rename from cmd/hlm/web/web.go rename to cmd/hidden_lake/messenger/web/web.go diff --git a/cmd/hlm/web/web_test.go b/cmd/hidden_lake/messenger/web/web_test.go similarity index 100% rename from cmd/hlm/web/web_test.go rename to cmd/hidden_lake/messenger/web/web_test.go diff --git a/cmd/hls/.gitignore b/cmd/hidden_lake/service/.gitignore similarity index 80% rename from cmd/hls/.gitignore rename to cmd/hidden_lake/service/.gitignore index 2d67fcc9..5078e091 100644 --- a/cmd/hls/.gitignore +++ b/cmd/hidden_lake/service/.gitignore @@ -1,5 +1,7 @@ hls hls.stg +hls.cfg +hls.db pub.key priv.key *.db_push1 diff --git a/cmd/hls/Makefile b/cmd/hidden_lake/service/Makefile similarity index 100% rename from cmd/hls/Makefile rename to cmd/hidden_lake/service/Makefile diff --git a/cmd/hls/README.md b/cmd/hidden_lake/service/README.md similarity index 100% rename from cmd/hls/README.md rename to cmd/hidden_lake/service/README.md diff --git a/cmd/hls/cmd/hls/hls_test.go b/cmd/hidden_lake/service/cmd/hls/hls_test.go similarity index 100% rename from cmd/hls/cmd/hls/hls_test.go rename to cmd/hidden_lake/service/cmd/hls/hls_test.go diff --git a/cmd/hls/cmd/hls/init_app.go b/cmd/hidden_lake/service/cmd/hls/init_app.go similarity index 84% rename from cmd/hls/cmd/hls/init_app.go rename to cmd/hidden_lake/service/cmd/hls/init_app.go index fe27fb6f..5f76d521 100644 --- a/cmd/hls/cmd/hls/init_app.go +++ b/cmd/hidden_lake/service/cmd/hls/init_app.go @@ -4,12 +4,12 @@ import ( "flag" "fmt" - "github.com/number571/go-peer/cmd/hls/internal/app" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/app" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/filesystem" "github.com/number571/go-peer/pkg/types" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" ) func initApp() (types.IApp, error) { diff --git a/cmd/hls/cmd/hls/init_config.go b/cmd/hidden_lake/service/cmd/hls/init_config.go similarity index 63% rename from cmd/hls/cmd/hls/init_config.go rename to cmd/hidden_lake/service/cmd/hls/init_config.go index 83eb0270..6ff2839e 100644 --- a/cmd/hls/cmd/hls/init_config.go +++ b/cmd/hidden_lake/service/cmd/hls/init_config.go @@ -1,8 +1,8 @@ package main import ( - "github.com/number571/go-peer/cmd/hls/internal/config" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" "github.com/number571/go-peer/pkg/filesystem" ) @@ -11,6 +11,7 @@ func initConfig() (config.IConfig, error) { return config.LoadConfig(hls_settings.CPathCFG) } initCfg := &config.SConfig{ + FLogging: []string{config.CLogInfo, config.CLogWarn, config.CLogErro}, FAddress: &config.SAddress{ FTCP: "localhost:9571", FHTTP: "localhost:9572", diff --git a/cmd/hls/cmd/hls/init_node.go b/cmd/hidden_lake/service/cmd/hls/init_node.go similarity index 50% rename from cmd/hls/cmd/hls/init_node.go rename to cmd/hidden_lake/service/cmd/hls/init_node.go index 004cb060..32286cfa 100644 --- a/cmd/hls/cmd/hls/init_node.go +++ b/cmd/hidden_lake/service/cmd/hls/init_node.go @@ -3,8 +3,11 @@ package main import ( "os" - "github.com/number571/go-peer/cmd/hls/internal/config" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" + hlt_client "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/client" + "github.com/number571/go-peer/pkg/client/message" "github.com/number571/go-peer/pkg/client/queue" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/friends" @@ -20,6 +23,40 @@ func initNode(cfg config.IConfig, privKey asymmetric.IPrivKey) anonymity.INode { anonymity.NewSettings(&anonymity.SSettings{ FRetryEnqueue: hls_settings.CRetryEnqueue, FTimeWait: hls_settings.CWaitTime, + FTraffic: anonymity.NewTraffic( + func() <-chan message.IMessage { + ch := make(chan message.IMessage, 300) + go func() { + defer close(ch) + for _, addr := range cfg.Traffic().Download() { + client := initTrafficClient(addr) + hashes, err := client.Hashes() + if err != nil { + // TODO: log + continue + } + for _, hash := range hashes { + msg, err := client.Load(hash) + if err != nil { + continue + } + ch <- msg + } + } + }() + return ch + }, + func(msg message.IMessage) error { + for _, addr := range cfg.Traffic().Upload() { + client := initTrafficClient(addr) + if err := client.Push(msg); err != nil { + // TODO: log + continue + } + } + return nil + }, + ), }), // Insecure to use logging in real anonymity projects! // Logging should only be used in overview or testing; @@ -36,7 +73,7 @@ func initNode(cfg config.IConfig, privKey asymmetric.IPrivKey) anonymity.INode { FMaxConnects: hls_settings.CNetworkMaxConns, FConnSettings: conn.NewSettings(&conn.SSettings{ FNetworkKey: cfg.Network(), - FMessageSize: hls_settings.CMessageSize, + FMessageSize: pkg_settings.CMessageSize, FTimeWait: hls_settings.CNetworkWaitTime, }), }), @@ -59,13 +96,23 @@ func initNode(cfg config.IConfig, privKey asymmetric.IPrivKey) anonymity.INode { ) } -func loggerSettings(enabled bool) logger.ISettings { - if !enabled { - return logger.NewSettings(&logger.SSettings{}) - } - return logger.NewSettings(&logger.SSettings{ - FInfo: os.Stdout, - FWarn: os.Stderr, - FErro: os.Stderr, - }) +func initTrafficClient(addr string) hlt_client.IClient { + return hlt_client.NewClient( + hlt_client.NewBuilder(), + hlt_client.NewRequester(addr), + ) +} + +func loggerSettings(logging config.ILogging) logger.ISettings { + sett := &logger.SSettings{} + if logging.Info() { + sett.FInfo = os.Stdout + } + if logging.Warn() { + sett.FInfo = os.Stderr + } + if logging.Erro() { + sett.FInfo = os.Stderr + } + return logger.NewSettings(sett) } diff --git a/cmd/hls/cmd/hls/main.go b/cmd/hidden_lake/service/cmd/hls/main.go similarity index 100% rename from cmd/hls/cmd/hls/main.go rename to cmd/hidden_lake/service/cmd/hls/main.go diff --git a/cmd/hls/internal/app/app.go b/cmd/hidden_lake/service/internal/app/app.go similarity index 86% rename from cmd/hls/internal/app/app.go rename to cmd/hidden_lake/service/internal/app/app.go index ff49982b..f2cdff7e 100644 --- a/cmd/hls/internal/app/app.go +++ b/cmd/hidden_lake/service/internal/app/app.go @@ -6,14 +6,14 @@ import ( "net/http" "time" - "github.com/number571/go-peer/cmd/hls/internal/config" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" "github.com/number571/go-peer/pkg/closer" "github.com/number571/go-peer/pkg/network/anonymity" "github.com/number571/go-peer/pkg/network/conn_keeper" "github.com/number571/go-peer/pkg/types" - "github.com/number571/go-peer/cmd/hls/internal/handler" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/handler" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" ) const ( @@ -48,8 +48,7 @@ func (app *sApp) Run() error { res := make(chan error) go func() { - httpAddress := app.fWrapper.Config().Address().HTTP() - if httpAddress == "" { + if app.fWrapper.Config().Address().HTTP() == "" { return } diff --git a/cmd/hls/internal/app/app_test.go b/cmd/hidden_lake/service/internal/app/app_test.go similarity index 84% rename from cmd/hls/internal/app/app_test.go rename to cmd/hidden_lake/service/internal/app/app_test.go index 4e114840..301ea694 100644 --- a/cmd/hls/internal/app/app_test.go +++ b/cmd/hidden_lake/service/internal/app/app_test.go @@ -5,11 +5,11 @@ import ( "os" "testing" - "github.com/number571/go-peer/cmd/hls/internal/config" - "github.com/number571/go-peer/cmd/hls/pkg/client" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" testutils "github.com/number571/go-peer/test/_data" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" anon_testutils "github.com/number571/go-peer/test/_data/anonymity" ) diff --git a/cmd/hls/internal/app/init_keeper.go b/cmd/hidden_lake/service/internal/app/init_keeper.go similarity index 86% rename from cmd/hls/internal/app/init_keeper.go rename to cmd/hidden_lake/service/internal/app/init_keeper.go index c316266b..8422389e 100644 --- a/cmd/hls/internal/app/init_keeper.go +++ b/cmd/hidden_lake/service/internal/app/init_keeper.go @@ -1,7 +1,7 @@ package app import ( - "github.com/number571/go-peer/cmd/hls/internal/config" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" "github.com/number571/go-peer/pkg/network/anonymity" "github.com/number571/go-peer/pkg/network/conn_keeper" ) diff --git a/cmd/hls/internal/app/init_service.go b/cmd/hidden_lake/service/internal/app/init_service.go similarity index 78% rename from cmd/hls/internal/app/init_service.go rename to cmd/hidden_lake/service/internal/app/init_service.go index 30e03ca4..16670d36 100644 --- a/cmd/hls/internal/app/init_service.go +++ b/cmd/hidden_lake/service/internal/app/init_service.go @@ -3,9 +3,9 @@ package app import ( "net/http" - "github.com/number571/go-peer/cmd/hls/internal/config" - "github.com/number571/go-peer/cmd/hls/internal/handler" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/handler" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/network/anonymity" ) diff --git a/cmd/hls/internal/config/config.go b/cmd/hidden_lake/service/internal/config/config.go similarity index 60% rename from cmd/hls/internal/config/config.go rename to cmd/hidden_lake/service/internal/config/config.go index 9b23d725..461e3be4 100644 --- a/cmd/hls/internal/config/config.go +++ b/cmd/hidden_lake/service/internal/config/config.go @@ -4,32 +4,49 @@ import ( "fmt" "sync" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/encoding" "github.com/number571/go-peer/pkg/filesystem" ) +const ( + CLogInfo = "info" + CLogWarn = "warn" + CLogErro = "erro" +) + var ( _ IConfig = &SConfig{} - _ iAddress = &SAddress{} + _ IAddress = &SAddress{} + _ ITraffic = &STraffic{} + _ ILogging = &sLogging{} ) type SConfig struct { - FLogging bool `json:"logging,omitempty"` FNetwork string `json:"network,omitempty"` - FAddress *SAddress `json:"address,omitempty"` - FServices map[string]string `json:"services,omitempty"` + FAddress *SAddress `json:"address,omitempty"` + FTraffic *STraffic `json:"traffic,omitempty"` + FLogging []string `json:"logging,omitempty"` FConnections []string `json:"connections,omitempty"` + FServices map[string]string `json:"services,omitempty"` FFriends map[string]string `json:"friends,omitempty"` fFilepath string fMutex sync.Mutex + fLogging *sLogging fFriends map[string]asymmetric.IPubKey } +type sLogging []bool + +type STraffic struct { + FDownload []string `json:"download,omitempty"` + FUpload []string `json:"upload,omitempty"` +} + type SAddress struct { FTCP string `json:"tcp,omitempty"` FHTTP string `json:"http,omitempty"` @@ -46,11 +63,9 @@ func NewConfig(filepath string, cfg *SConfig) (IConfig, error) { return nil, err } - cfg.fFilepath = filepath - if err := cfg.loadPubKeys(); err != nil { + if err := cfg.initConfig(filepath); err != nil { return nil, err } - return cfg, nil } @@ -71,14 +86,48 @@ func LoadConfig(filepath string) (IConfig, error) { return nil, err } - cfg.fFilepath = filepath - if err := cfg.loadPubKeys(); err != nil { + if err := cfg.initConfig(filepath); err != nil { return nil, err } - return cfg, nil } +func (cfg *SConfig) initConfig(filepath string) error { + cfg.fFilepath = filepath + + if err := cfg.loadPubKeys(); err != nil { + return err + } + + if err := cfg.loadLogging(); err != nil { + return err + } + + return nil +} + +func (cfg *SConfig) loadLogging() error { + // [info, warn, erro] + logging := sLogging(make([]bool, 3)) + + mapping := map[string]int{ + "info": 0, + "warn": 1, + "erro": 2, + } + + for _, v := range cfg.FLogging { + logType, ok := mapping[v] + if !ok { + return fmt.Errorf("undefined log type '%s'", v) + } + logging[logType] = true + } + + cfg.fLogging = &logging + return nil +} + func (cfg *SConfig) loadPubKeys() error { cfg.fFriends = make(map[string]asymmetric.IPubKey) @@ -100,10 +149,6 @@ func (cfg *SConfig) loadPubKeys() error { return nil } -func (cfg *SConfig) Logging() bool { - return cfg.FLogging -} - func (cfg *SConfig) Network() string { return cfg.FNetwork } @@ -119,10 +164,18 @@ func (cfg *SConfig) Friends() map[string]asymmetric.IPubKey { return result } -func (cfg *SConfig) Address() iAddress { +func (cfg *SConfig) Logging() ILogging { + return cfg.fLogging +} + +func (cfg *SConfig) Address() IAddress { return cfg.FAddress } +func (cfg *SConfig) Traffic() ITraffic { + return cfg.FTraffic +} + func (cfg *SConfig) Connections() []string { return cfg.FConnections } @@ -135,6 +188,32 @@ func (cfg *SConfig) Service(name string) (string, bool) { return addr, ok } +func (traffic *STraffic) Download() []string { + if traffic == nil { + return nil + } + return traffic.FDownload +} + +func (traffic *STraffic) Upload() []string { + if traffic == nil { + return nil + } + return traffic.FUpload +} + +func (logging *sLogging) Info() bool { + return (*logging)[0] +} + +func (logging *sLogging) Warn() bool { + return (*logging)[1] +} + +func (logging *sLogging) Erro() bool { + return (*logging)[2] +} + func (address *SAddress) TCP() string { if address == nil { return "" diff --git a/cmd/hls/internal/config/config_test.go b/cmd/hidden_lake/service/internal/config/config_test.go similarity index 81% rename from cmd/hls/internal/config/config_test.go rename to cmd/hidden_lake/service/internal/config/config_test.go index c9643f34..8bffb167 100644 --- a/cmd/hls/internal/config/config_test.go +++ b/cmd/hidden_lake/service/internal/config/config_test.go @@ -16,6 +16,8 @@ const ( const ( tcLogging = true tcNetwork = "test_network_key" + tcDownloader = "test_downloader" + tcUploader = "test_uploader" tcAddressTCP = "test_address_tcp" tcAddressHTTP = "test_address_http" tcPubKeyAlias1 = "test_alias1" @@ -41,12 +43,22 @@ var ( const ( tcConfigTemplate = `{ - "logging": %t, + "logging": ["info", "erro"], "network": "%s", "address": { "tcp": "%s", "http": "%s" }, + "traffic": { + "download": [ + "%s", + "%s" + ], + "upload": [ + "%s", + "%s" + ] + }, "connections": [ "%s", "%s" @@ -65,12 +77,15 @@ const ( func testNewConfigString() string { return fmt.Sprintf( tcConfigTemplate, - tcLogging, tcNetwork, tcAddressTCP, tcAddressHTTP, tgConnects[0], tgConnects[1], + tgConnects[0], + tgConnects[1], + tgConnects[0], + tgConnects[1], tcPubKeyAlias1, tgPubKeys[tcPubKeyAlias1], tcPubKeyAlias2, @@ -93,27 +108,69 @@ func TestConfig(t *testing.T) { cfg, err := LoadConfig(tcConfigFile) if err != nil { t.Error(err) + return } - if cfg.Logging() != tcLogging { - t.Error("logging is invalid") + if cfg.Logging().Info() != tcLogging { + t.Error("logging.info is invalid") + return + } + + if cfg.Logging().Erro() != tcLogging { + t.Error("logging.erro is invalid") + return + } + + if cfg.Logging().Warn() == tcLogging { + t.Error("logging.warn is invalid") + return } if cfg.Network() != tcNetwork { t.Error("network is invalid") + return } if cfg.Address().TCP() != tcAddressTCP { t.Error("address_tcp is invalid") + return } if cfg.Address().HTTP() != tcAddressHTTP { t.Error("address_http is invalid") + return } + if len(cfg.Traffic().Download()) != 2 { + t.Error("len traffic download != 2") + return + } + for i, v := range cfg.Traffic().Download() { + if v != tgConnects[i] { + t.Errorf("traffic download '%d' is invalid", i) + return + } + } + + if len(cfg.Traffic().Upload()) != 2 { + t.Error("len traffic upload != 2") + return + } + for i, v := range cfg.Traffic().Upload() { + if v != tgConnects[i] { + t.Errorf("traffic upload '%d' is invalid", i) + return + } + } + + if len(cfg.Connections()) != 2 { + t.Error("len connections != 2") + return + } for i, v := range cfg.Connections() { if v != tgConnects[i] { t.Errorf("connection '%d' is invalid", i) + return } } @@ -121,9 +178,11 @@ func TestConfig(t *testing.T) { v1, ok := cfg.Service(k) if !ok { t.Errorf("service undefined '%s'", k) + return } if v != v1 { t.Errorf("service address is invalid '%s'", v1) + return } } @@ -132,6 +191,7 @@ func TestConfig(t *testing.T) { pubKey := asymmetric.LoadRSAPubKey(pubStr) if pubKey.Address().String() != v1.Address().String() { t.Errorf("public key is invalid '%s'", v1) + return } } } @@ -143,6 +203,7 @@ func TestWrapper(t *testing.T) { cfg, err := LoadConfig(tcConfigFile) if err != nil { t.Error(err) + return } if len(cfg.Friends()) == 0 { @@ -161,6 +222,7 @@ func TestWrapper(t *testing.T) { cfg, err = LoadConfig(tcConfigFile) if err != nil { t.Error(err) + return } if len(cfg.Friends()) != 0 { diff --git a/cmd/hls/internal/config/editor.go b/cmd/hidden_lake/service/internal/config/editor.go similarity index 96% rename from cmd/hls/internal/config/editor.go rename to cmd/hidden_lake/service/internal/config/editor.go index 315731d1..60054047 100644 --- a/cmd/hls/internal/config/editor.go +++ b/cmd/hidden_lake/service/internal/config/editor.go @@ -4,7 +4,7 @@ import ( "fmt" "sync" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/encoding" "github.com/number571/go-peer/pkg/filesystem" diff --git a/cmd/hls/internal/config/types.go b/cmd/hidden_lake/service/internal/config/types.go similarity index 66% rename from cmd/hls/internal/config/types.go rename to cmd/hidden_lake/service/internal/config/types.go index 25933167..9a5dab7a 100644 --- a/cmd/hls/internal/config/types.go +++ b/cmd/hidden_lake/service/internal/config/types.go @@ -15,15 +15,27 @@ type IEditor interface { } type IConfig interface { - Logging() bool Network() string - Address() iAddress + Logging() ILogging + Address() IAddress + Traffic() ITraffic Connections() []string Friends() map[string]asymmetric.IPubKey Service(string) (string, bool) } -type iAddress interface { +type ITraffic interface { + Download() []string + Upload() []string +} + +type ILogging interface { + Info() bool + Warn() bool + Erro() bool +} + +type IAddress interface { TCP() string HTTP() string } diff --git a/cmd/hls/internal/config/wrapper.go b/cmd/hidden_lake/service/internal/config/wrapper.go similarity index 100% rename from cmd/hls/internal/config/wrapper.go rename to cmd/hidden_lake/service/internal/config/wrapper.go diff --git a/cmd/hls/internal/handler/config_connects.go b/cmd/hidden_lake/service/internal/handler/config_connects.go similarity index 92% rename from cmd/hls/internal/handler/config_connects.go rename to cmd/hidden_lake/service/internal/handler/config_connects.go index e3320ca2..2e6c6751 100644 --- a/cmd/hls/internal/handler/config_connects.go +++ b/cmd/hidden_lake/service/internal/handler/config_connects.go @@ -5,8 +5,8 @@ import ( "net/http" "strings" - "github.com/number571/go-peer/cmd/hls/internal/config" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/network/anonymity" ) diff --git a/cmd/hls/internal/handler/config_connects_test.go b/cmd/hidden_lake/service/internal/handler/config_connects_test.go similarity index 91% rename from cmd/hls/internal/handler/config_connects_test.go rename to cmd/hidden_lake/service/internal/handler/config_connects_test.go index c6721ab1..eeb0e07c 100644 --- a/cmd/hls/internal/handler/config_connects_test.go +++ b/cmd/hidden_lake/service/internal/handler/config_connects_test.go @@ -4,8 +4,8 @@ import ( "fmt" "testing" - "github.com/number571/go-peer/cmd/hls/internal/config" - hls_client "github.com/number571/go-peer/cmd/hls/pkg/client" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + hls_client "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" testutils "github.com/number571/go-peer/test/_data" ) diff --git a/cmd/hls/internal/handler/config_friends.go b/cmd/hidden_lake/service/internal/handler/config_friends.go similarity index 93% rename from cmd/hls/internal/handler/config_friends.go rename to cmd/hidden_lake/service/internal/handler/config_friends.go index 43d211e1..c4eae0c6 100644 --- a/cmd/hls/internal/handler/config_friends.go +++ b/cmd/hidden_lake/service/internal/handler/config_friends.go @@ -6,8 +6,8 @@ import ( "net/http" "strings" - "github.com/number571/go-peer/cmd/hls/internal/config" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/network/anonymity" ) diff --git a/cmd/hls/internal/handler/config_friends_test.go b/cmd/hidden_lake/service/internal/handler/config_friends_test.go similarity index 92% rename from cmd/hls/internal/handler/config_friends_test.go rename to cmd/hidden_lake/service/internal/handler/config_friends_test.go index a8d751ec..940174cf 100644 --- a/cmd/hls/internal/handler/config_friends_test.go +++ b/cmd/hidden_lake/service/internal/handler/config_friends_test.go @@ -4,8 +4,8 @@ import ( "fmt" "testing" - "github.com/number571/go-peer/cmd/hls/internal/config" - hls_client "github.com/number571/go-peer/cmd/hls/pkg/client" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + hls_client "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" "github.com/number571/go-peer/pkg/crypto/asymmetric" testutils "github.com/number571/go-peer/test/_data" ) diff --git a/cmd/hls/internal/handler/handler_test.go b/cmd/hidden_lake/service/internal/handler/handler_test.go similarity index 96% rename from cmd/hls/internal/handler/handler_test.go rename to cmd/hidden_lake/service/internal/handler/handler_test.go index 209602df..31b1dd48 100644 --- a/cmd/hls/internal/handler/handler_test.go +++ b/cmd/hidden_lake/service/internal/handler/handler_test.go @@ -5,9 +5,9 @@ import ( "os" "time" - "github.com/number571/go-peer/cmd/hls/internal/config" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/closer" "github.com/number571/go-peer/pkg/filesystem" "github.com/number571/go-peer/pkg/network/anonymity" diff --git a/cmd/hls/internal/handler/index.go b/cmd/hidden_lake/service/internal/handler/index.go similarity index 55% rename from cmd/hls/internal/handler/index.go rename to cmd/hidden_lake/service/internal/handler/index.go index 20a8b52d..4d682a70 100644 --- a/cmd/hls/internal/handler/index.go +++ b/cmd/hidden_lake/service/internal/handler/index.go @@ -3,8 +3,8 @@ package handler import ( "net/http" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" ) func HandleIndexAPI() http.HandlerFunc { diff --git a/cmd/hls/internal/handler/network_online.go b/cmd/hidden_lake/service/internal/handler/network_online.go similarity index 93% rename from cmd/hls/internal/handler/network_online.go rename to cmd/hidden_lake/service/internal/handler/network_online.go index f58eb992..37b267b4 100644 --- a/cmd/hls/internal/handler/network_online.go +++ b/cmd/hidden_lake/service/internal/handler/network_online.go @@ -6,7 +6,7 @@ import ( "sort" "strings" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/network/anonymity" ) diff --git a/cmd/hls/internal/handler/network_online_test.go b/cmd/hidden_lake/service/internal/handler/network_online_test.go similarity index 91% rename from cmd/hls/internal/handler/network_online_test.go rename to cmd/hidden_lake/service/internal/handler/network_online_test.go index cf8bc89f..3ae87fe5 100644 --- a/cmd/hls/internal/handler/network_online_test.go +++ b/cmd/hidden_lake/service/internal/handler/network_online_test.go @@ -6,9 +6,9 @@ import ( "testing" "time" - "github.com/number571/go-peer/cmd/hls/internal/config" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" - hls_client "github.com/number571/go-peer/cmd/hls/pkg/client" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" + hls_client "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" "github.com/number571/go-peer/pkg/closer" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/network/anonymity" diff --git a/cmd/hls/internal/handler/network_push.go b/cmd/hidden_lake/service/internal/handler/network_push.go similarity index 90% rename from cmd/hls/internal/handler/network_push.go rename to cmd/hidden_lake/service/internal/handler/network_push.go index 81176610..98abada6 100644 --- a/cmd/hls/internal/handler/network_push.go +++ b/cmd/hidden_lake/service/internal/handler/network_push.go @@ -4,8 +4,8 @@ import ( "encoding/json" "net/http" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/encoding" "github.com/number571/go-peer/pkg/network/anonymity" diff --git a/cmd/hls/internal/handler/network_push_test.go b/cmd/hidden_lake/service/internal/handler/network_push_test.go similarity index 90% rename from cmd/hls/internal/handler/network_push_test.go rename to cmd/hidden_lake/service/internal/handler/network_push_test.go index 7b5c04e8..b1a20e0c 100644 --- a/cmd/hls/internal/handler/network_push_test.go +++ b/cmd/hidden_lake/service/internal/handler/network_push_test.go @@ -7,10 +7,10 @@ import ( "testing" "time" - "github.com/number571/go-peer/cmd/hls/internal/config" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" - hls_client "github.com/number571/go-peer/cmd/hls/pkg/client" - "github.com/number571/go-peer/cmd/hls/pkg/request" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" + hls_client "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" + "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/request" "github.com/number571/go-peer/pkg/closer" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/network/anonymity" diff --git a/cmd/hls/internal/handler/node_key.go b/cmd/hidden_lake/service/internal/handler/node_key.go similarity index 85% rename from cmd/hls/internal/handler/node_key.go rename to cmd/hidden_lake/service/internal/handler/node_key.go index 4628fdbd..1360c45d 100644 --- a/cmd/hls/internal/handler/node_key.go +++ b/cmd/hidden_lake/service/internal/handler/node_key.go @@ -4,8 +4,8 @@ import ( "encoding/json" "net/http" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/network/anonymity" ) diff --git a/cmd/hls/internal/handler/node_key_test.go b/cmd/hidden_lake/service/internal/handler/node_key_test.go similarity index 93% rename from cmd/hls/internal/handler/node_key_test.go rename to cmd/hidden_lake/service/internal/handler/node_key_test.go index ca45fb5e..3f55409a 100644 --- a/cmd/hls/internal/handler/node_key_test.go +++ b/cmd/hidden_lake/service/internal/handler/node_key_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/number571/go-peer/cmd/hls/pkg/client" + "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/client" "github.com/number571/go-peer/pkg/crypto/asymmetric" testutils "github.com/number571/go-peer/test/_data" ) diff --git a/cmd/hls/internal/handler/response.go b/cmd/hidden_lake/service/internal/handler/response.go similarity index 76% rename from cmd/hls/internal/handler/response.go rename to cmd/hidden_lake/service/internal/handler/response.go index 9ca3fc30..cf25f483 100644 --- a/cmd/hls/internal/handler/response.go +++ b/cmd/hidden_lake/service/internal/handler/response.go @@ -4,7 +4,7 @@ import ( "encoding/json" "net/http" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" ) func response(w http.ResponseWriter, ret int, res string) { diff --git a/cmd/hls/internal/handler/service_tcp.go b/cmd/hidden_lake/service/internal/handler/service_tcp.go similarity index 85% rename from cmd/hls/internal/handler/service_tcp.go rename to cmd/hidden_lake/service/internal/handler/service_tcp.go index 7ec5d555..9199247b 100644 --- a/cmd/hls/internal/handler/service_tcp.go +++ b/cmd/hidden_lake/service/internal/handler/service_tcp.go @@ -6,9 +6,9 @@ import ( "io" "net/http" - "github.com/number571/go-peer/cmd/hls/internal/config" - "github.com/number571/go-peer/cmd/hls/pkg/request" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/request" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/network/anonymity" ) diff --git a/cmd/hls/internal/handler/service_tcp_test.go b/cmd/hidden_lake/service/internal/handler/service_tcp_test.go similarity index 92% rename from cmd/hls/internal/handler/service_tcp_test.go rename to cmd/hidden_lake/service/internal/handler/service_tcp_test.go index b1feee74..32cd266f 100644 --- a/cmd/hls/internal/handler/service_tcp_test.go +++ b/cmd/hidden_lake/service/internal/handler/service_tcp_test.go @@ -6,9 +6,9 @@ import ( "testing" "time" - "github.com/number571/go-peer/cmd/hls/internal/config" - hls_settings "github.com/number571/go-peer/cmd/hls/internal/settings" - "github.com/number571/go-peer/cmd/hls/pkg/request" + "github.com/number571/go-peer/cmd/hidden_lake/service/internal/config" + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/internal/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/request" testutils "github.com/number571/go-peer/test/_data" "github.com/number571/go-peer/pkg/closer" diff --git a/cmd/hls/internal/settings/init_client.go b/cmd/hidden_lake/service/internal/settings/init_client.go similarity index 62% rename from cmd/hls/internal/settings/init_client.go rename to cmd/hidden_lake/service/internal/settings/init_client.go index 2d3d0e0e..bfaac278 100644 --- a/cmd/hls/internal/settings/init_client.go +++ b/cmd/hidden_lake/service/internal/settings/init_client.go @@ -1,6 +1,7 @@ package settings import ( + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/client" "github.com/number571/go-peer/pkg/crypto/asymmetric" ) @@ -8,8 +9,8 @@ import ( func InitClient(privKey asymmetric.IPrivKey) client.IClient { return client.NewClient( client.NewSettings(&client.SSettings{ - FWorkSize: CWorkSize, - FMessageSize: CMessageSize, + FWorkSize: pkg_settings.CWorkSize, + FMessageSize: pkg_settings.CMessageSize, }), privKey, ) diff --git a/cmd/hls/internal/settings/settings.go b/cmd/hidden_lake/service/internal/settings/settings.go similarity index 87% rename from cmd/hls/internal/settings/settings.go rename to cmd/hidden_lake/service/internal/settings/settings.go index ff3ed7f8..e4d9e648 100644 --- a/cmd/hls/internal/settings/settings.go +++ b/cmd/hidden_lake/service/internal/settings/settings.go @@ -17,8 +17,6 @@ const ( const ( CRetryEnqueue = 2 CWaitTime = time.Minute - CWorkSize = 20 // bits - CMessageSize = (2 << 20) // 2MiB ) const ( diff --git a/cmd/hls/internal/settings/settings_test.go b/cmd/hidden_lake/service/internal/settings/settings_test.go similarity index 100% rename from cmd/hls/internal/settings/settings_test.go rename to cmd/hidden_lake/service/internal/settings/settings_test.go diff --git a/cmd/hls/pkg/client/builder.go b/cmd/hidden_lake/service/pkg/client/builder.go similarity index 87% rename from cmd/hls/pkg/client/builder.go rename to cmd/hidden_lake/service/pkg/client/builder.go index b9380329..26896617 100644 --- a/cmd/hls/pkg/client/builder.go +++ b/cmd/hidden_lake/service/pkg/client/builder.go @@ -1,8 +1,8 @@ package client import ( - "github.com/number571/go-peer/cmd/hls/pkg/request" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/request" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/encoding" ) diff --git a/cmd/hls/pkg/client/client.go b/cmd/hidden_lake/service/pkg/client/client.go similarity index 96% rename from cmd/hls/pkg/client/client.go rename to cmd/hidden_lake/service/pkg/client/client.go index 36163bbf..fa5f2b2d 100644 --- a/cmd/hls/pkg/client/client.go +++ b/cmd/hidden_lake/service/pkg/client/client.go @@ -1,7 +1,7 @@ package client import ( - "github.com/number571/go-peer/cmd/hls/pkg/request" + "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/request" "github.com/number571/go-peer/pkg/crypto/asymmetric" ) diff --git a/cmd/hls/pkg/client/client_test.go b/cmd/hidden_lake/service/pkg/client/client_test.go similarity index 100% rename from cmd/hls/pkg/client/client_test.go rename to cmd/hidden_lake/service/pkg/client/client_test.go diff --git a/cmd/hls/pkg/client/requester.go b/cmd/hidden_lake/service/pkg/client/requester.go similarity index 98% rename from cmd/hls/pkg/client/requester.go rename to cmd/hidden_lake/service/pkg/client/requester.go index a026aeac..2d646d4e 100644 --- a/cmd/hls/pkg/client/requester.go +++ b/cmd/hidden_lake/service/pkg/client/requester.go @@ -8,7 +8,7 @@ import ( "net/http" "strings" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/encoding" ) diff --git a/cmd/hls/pkg/client/types.go b/cmd/hidden_lake/service/pkg/client/types.go similarity index 90% rename from cmd/hls/pkg/client/types.go rename to cmd/hidden_lake/service/pkg/client/types.go index 17df1983..bcd81206 100644 --- a/cmd/hls/pkg/client/types.go +++ b/cmd/hidden_lake/service/pkg/client/types.go @@ -3,8 +3,8 @@ package client import ( "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/cmd/hls/pkg/request" - pkg_settings "github.com/number571/go-peer/cmd/hls/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/request" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" ) type IClient interface { diff --git a/cmd/hls/pkg/request/request.go b/cmd/hidden_lake/service/pkg/request/request.go similarity index 100% rename from cmd/hls/pkg/request/request.go rename to cmd/hidden_lake/service/pkg/request/request.go diff --git a/cmd/hls/pkg/request/request_test.go b/cmd/hidden_lake/service/pkg/request/request_test.go similarity index 100% rename from cmd/hls/pkg/request/request_test.go rename to cmd/hidden_lake/service/pkg/request/request_test.go diff --git a/cmd/hls/pkg/request/types.go b/cmd/hidden_lake/service/pkg/request/types.go similarity index 100% rename from cmd/hls/pkg/request/types.go rename to cmd/hidden_lake/service/pkg/request/types.go diff --git a/cmd/hls/pkg/settings/settings.go b/cmd/hidden_lake/service/pkg/settings/settings.go similarity index 87% rename from cmd/hls/pkg/settings/settings.go rename to cmd/hidden_lake/service/pkg/settings/settings.go index fbdfc2dd..c734fa6f 100644 --- a/cmd/hls/pkg/settings/settings.go +++ b/cmd/hidden_lake/service/pkg/settings/settings.go @@ -6,7 +6,9 @@ const ( ) const ( - CAKeySize = 4096 + CAKeySize = 4096 + CWorkSize = 20 // bits + CMessageSize = (2 << 20) // 2MiB ) const ( diff --git a/cmd/hls/pkg/settings/settings_test.go b/cmd/hidden_lake/service/pkg/settings/settings_test.go similarity index 100% rename from cmd/hls/pkg/settings/settings_test.go rename to cmd/hidden_lake/service/pkg/settings/settings_test.go diff --git a/cmd/hls/pkg/settings/types.go b/cmd/hidden_lake/service/pkg/settings/types.go similarity index 100% rename from cmd/hls/pkg/settings/types.go rename to cmd/hidden_lake/service/pkg/settings/types.go diff --git a/cmd/hidden_lake/traffic/.gitignore b/cmd/hidden_lake/traffic/.gitignore new file mode 100644 index 00000000..924c61cd --- /dev/null +++ b/cmd/hidden_lake/traffic/.gitignore @@ -0,0 +1,4 @@ +hlt +hlt.db +hlt.cfg +!cmd/hlt diff --git a/cmd/hms/Makefile b/cmd/hidden_lake/traffic/Makefile similarity index 74% rename from cmd/hms/Makefile rename to cmd/hidden_lake/traffic/Makefile index 3c7ba281..a9c0adcd 100644 --- a/cmd/hms/Makefile +++ b/cmd/hidden_lake/traffic/Makefile @@ -3,10 +3,10 @@ GC=go build .PHONY: default build run test clean default: build run build: - $(GC) -o hms *.go + $(GC) -o hlt ./cmd/hlt run: - ./hms + ./hlt test: for i in {1..$(N)}; do go clean -testcache; echo $$i; go test ./...; done clean: - rm -rf hms hms.cfg hms.db + rm -rf hlt hlt.cfg hlt.db diff --git a/cmd/hidden_lake/traffic/README.md b/cmd/hidden_lake/traffic/README.md new file mode 100644 index 00000000..17133ab3 --- /dev/null +++ b/cmd/hidden_lake/traffic/README.md @@ -0,0 +1,3 @@ +# HLT + +> Hidden Lake Traffic diff --git a/cmd/hidden_lake/traffic/cmd/hlt/hms_test.go b/cmd/hidden_lake/traffic/cmd/hlt/hms_test.go new file mode 100644 index 00000000..b42968eb --- /dev/null +++ b/cmd/hidden_lake/traffic/cmd/hlt/hms_test.go @@ -0,0 +1,155 @@ +package main + +// const ( +// tcN = 3 +// ) + +// const ( +// tcPathDB = "hms_test.db" +// tcPathConfig = "hms_test.cfg" +// ) + +// var ( +// tgHost = fmt.Sprintf("http://%s", testutils.TgAddrs[16]) +// ) + +// func testHmsDefaultInit(dbPath, configPath string) { +// os.RemoveAll(dbPath) + +// gDB = database.NewKeyValueDB(dbPath) +// gConfig = config.NewConfig(configPath) +// } + +// func TestHMS(t *testing.T) { +// testHmsDefaultInit(tcPathDB, tcPathConfig) +// defer func() { +// gDB.Close() +// os.RemoveAll(tcPathDB) +// os.Remove(tcPathConfig) +// }() + +// // server +// srv := testStartServerHTTP(t) +// defer srv.Close() + +// // client push +// time.Sleep(200 * time.Millisecond) +// err := testClientDoPush() +// if err != nil { +// t.Error(err) +// return +// } + +// // client size +// err = testClientDoSize() +// if err != nil { +// t.Error(err) +// return +// } + +// // client load +// err = testClientDoLoad() +// if err != nil { +// t.Error(err) +// return +// } +// } + +// func testStartServerHTTP(t *testing.T) *http.Server { +// mux := http.NewServeMux() + +// mux.HandleFunc("/", indexPage) +// mux.HandleFunc("/size", sizePage) +// mux.HandleFunc("/load", loadPage) +// mux.HandleFunc("/push", pushPage) + +// srv := &http.Server{ +// Addr: testutils.TgAddrs[16], +// Handler: mux, +// } + +// go func() { +// srv.ListenAndServe() +// }() + +// return srv +// } + +// func testClientDoPush() error { +// client := testNewClient() + +// for i := 0; i < tcN; i++ { +// err := hmc.NewClient( +// hmc.NewBuilder(client), +// hmc.NewRequester(tgHost), +// ).Push( +// client.PubKey(), +// payload.NewPayload( +// 0x01, +// []byte(fmt.Sprintf(testutils.TcBodyTemplate, i)), +// ), +// ) +// if err != nil { +// return err +// } +// } + +// return nil +// } + +// func testClientDoSize() error { +// client := testNewClient() + +// size, err := hmc.NewClient( +// hmc.NewBuilder(client), +// hmc.NewRequester(tgHost), +// ).Size() +// if err != nil { +// return err +// } + +// if size != tcN { +// return fmt.Errorf("num(%d) != tcN(%d)", size, tcN) +// } + +// return nil +// } + +// func testClientDoLoad() error { +// client := testNewClient() + +// for i := 0; i < tcN; i++ { +// msg, err := hmc.NewClient( +// hmc.NewBuilder(client), +// hmc.NewRequester(tgHost), +// ).Load(uint64(i)) +// if err != nil { +// return err +// } + +// pubKey, pld, err := client.Decrypt(msg) +// if err != nil { +// panic(err) +// } + +// if string(pld.Body()) != fmt.Sprintf(testutils.TcBodyTemplate, i) { +// return fmt.Errorf("body is not equal") +// } + +// if pubKey.Address().String() != client.PubKey().Address().String() { +// return fmt.Errorf("public key is not equal") +// } +// } + +// return nil +// } + +// func testNewClient() client.IClient { +// return client.NewClient( +// client.NewSettings(&client.SSettings{ +// FWorkSize: hms_settings.CSizeWork, +// FMessageSize: hms_settings.CSizePack, +// }), +// asymmetric.LoadRSAPrivKey(testutils.TcPrivKey), +// ) +// } diff --git a/cmd/hidden_lake/traffic/cmd/hlt/init_app.go b/cmd/hidden_lake/traffic/cmd/hlt/init_app.go new file mode 100644 index 00000000..21a524a5 --- /dev/null +++ b/cmd/hidden_lake/traffic/cmd/hlt/init_app.go @@ -0,0 +1,15 @@ +package main + +import ( + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/app" + "github.com/number571/go-peer/pkg/types" +) + +func initApp() (types.IApp, error) { + cfg, err := initConfig() + if err != nil { + return nil, err + } + + return app.NewApp(cfg), nil +} diff --git a/cmd/hidden_lake/traffic/cmd/hlt/init_config.go b/cmd/hidden_lake/traffic/cmd/hlt/init_config.go new file mode 100644 index 00000000..d7c33758 --- /dev/null +++ b/cmd/hidden_lake/traffic/cmd/hlt/init_config.go @@ -0,0 +1,17 @@ +package main + +import ( + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/config" + hlt_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/settings" + "github.com/number571/go-peer/pkg/filesystem" +) + +func initConfig() (config.IConfig, error) { + if filesystem.OpenFile(hlt_settings.CPathCFG).IsExist() { + return config.LoadConfig(hlt_settings.CPathCFG) + } + initCfg := &config.SConfig{ + FAddress: "localhost:9573", + } + return config.NewConfig(hlt_settings.CPathCFG, initCfg) +} diff --git a/cmd/hidden_lake/traffic/cmd/hlt/main.go b/cmd/hidden_lake/traffic/cmd/hlt/main.go new file mode 100644 index 00000000..ede66a03 --- /dev/null +++ b/cmd/hidden_lake/traffic/cmd/hlt/main.go @@ -0,0 +1,28 @@ +package main + +import ( + "fmt" + "os" + "os/signal" + "syscall" +) + +func main() { + app, err := initApp() + if err != nil { + panic(err) + } + + shutdown := make(chan os.Signal, 1) + signal.Notify(shutdown, syscall.SIGINT, syscall.SIGTERM) + + if err := app.Run(); err != nil { + panic(err) + } + defer app.Close() + + fmt.Println("Service is running...") + + <-shutdown + fmt.Println("\nShutting down...") +} diff --git a/cmd/hidden_lake/traffic/internal/app/app.go b/cmd/hidden_lake/traffic/internal/app/app.go new file mode 100644 index 00000000..417c1246 --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/app/app.go @@ -0,0 +1,72 @@ +package app + +import ( + "errors" + "net/http" + "time" + + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/config" + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/database" + hlt_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/settings" + "github.com/number571/go-peer/pkg/closer" + "github.com/number571/go-peer/pkg/types" +) + +const ( + initStart = 3 * time.Second +) + +var ( + _ types.IApp = &sApp{} +) + +type sApp struct { + fConfig config.IConfig + fDatabase database.IKeyValueDB + fServiceHTTP *http.Server +} + +func NewApp( + cfg config.IConfig, +) types.IApp { + db := database.NewKeyValueDB( + hlt_settings.CPathDB, + database.NewSettings(&database.SSettings{ + FLimitMessages: hlt_settings.CLimitMessages, + FWorkSize: hls_settings.CWorkSize, + }), + ) + return &sApp{ + fConfig: cfg, + fDatabase: db, + fServiceHTTP: initServiceHTTP(cfg, db), + } +} + +func (app *sApp) Run() error { + res := make(chan error) + + go func() { + err := app.fServiceHTTP.ListenAndServe() + if err != nil && !errors.Is(err, http.ErrServerClosed) { + res <- err + return + } + }() + + select { + case err := <-res: + app.Close() + return err + case <-time.After(initStart): + return nil + } +} + +func (app *sApp) Close() error { + return closer.CloseAll([]types.ICloser{ + app.fServiceHTTP, + app.fDatabase, + }) +} diff --git a/cmd/hmc/hmc_test.go b/cmd/hidden_lake/traffic/internal/app/app_test.go similarity index 82% rename from cmd/hmc/hmc_test.go rename to cmd/hidden_lake/traffic/internal/app/app_test.go index c7d5b103..66f9f34a 100644 --- a/cmd/hmc/hmc_test.go +++ b/cmd/hidden_lake/traffic/internal/app/app_test.go @@ -1,4 +1,4 @@ -package main +package app import "testing" diff --git a/cmd/hidden_lake/traffic/internal/app/init_service.go b/cmd/hidden_lake/traffic/internal/app/init_service.go new file mode 100644 index 00000000..cf4411aa --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/app/init_service.go @@ -0,0 +1,23 @@ +package app + +import ( + "net/http" + + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/config" + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/database" + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/handler" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/settings" +) + +func initServiceHTTP(cfg config.IConfig, db database.IKeyValueDB) *http.Server { + mux := http.NewServeMux() + + mux.HandleFunc(pkg_settings.CHashesPath, handler.HandleIndexAPI()) + mux.HandleFunc(pkg_settings.CLoadPath, handler.HandleLoadAPI(db)) + mux.HandleFunc(pkg_settings.CPushPath, handler.HandlePushAPI(db)) + + return &http.Server{ + Addr: cfg.Address(), + Handler: mux, + } +} diff --git a/cmd/hidden_lake/traffic/internal/config/config.go b/cmd/hidden_lake/traffic/internal/config/config.go new file mode 100644 index 00000000..dea82f2d --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/config/config.go @@ -0,0 +1,54 @@ +package config + +import ( + "fmt" + + "github.com/number571/go-peer/pkg/encoding" + "github.com/number571/go-peer/pkg/filesystem" +) + +var ( + _ IConfig = &SConfig{} +) + +type SConfig struct { + FAddress string `json:"address"` +} + +func NewConfig(filepath string, cfg *SConfig) (IConfig, error) { + configFile := filesystem.OpenFile(filepath) + + if configFile.IsExist() { + return nil, fmt.Errorf("config file '%s' already exist", filepath) + } + + if err := configFile.Write(encoding.Serialize(cfg)); err != nil { + return nil, err + } + + return cfg, nil +} + +func LoadConfig(filepath string) (IConfig, error) { + configFile := filesystem.OpenFile(filepath) + + if !configFile.IsExist() { + return nil, fmt.Errorf("config file '%s' does not exist", filepath) + } + + bytes, err := configFile.Read() + if err != nil { + return nil, err + } + + cfg := new(SConfig) + if err := encoding.Deserialize(bytes, cfg); err != nil { + return nil, err + } + + return cfg, nil +} + +func (cfg *SConfig) Address() string { + return cfg.FAddress +} diff --git a/cmd/hidden_lake/traffic/internal/config/config_test.go b/cmd/hidden_lake/traffic/internal/config/config_test.go new file mode 100644 index 00000000..9df2278f --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/config/config_test.go @@ -0,0 +1,31 @@ +package config + +import ( + "os" + "testing" +) + +const ( + tcConfigFile = "config_test.txt" + tcAddress = "test_address" +) + +func testConfigDefaultInit(configPath string) { + _, _ = NewConfig(configPath, &SConfig{ + FAddress: tcAddress, + }) +} + +func TestConfig(t *testing.T) { + testConfigDefaultInit(tcConfigFile) + defer os.Remove(tcConfigFile) + + cfg, err := LoadConfig(tcConfigFile) + if err != nil { + t.Error(err) + } + + if cfg.Address() != tcAddress { + t.Error("address is invalid") + } +} diff --git a/cmd/hms/config/types.go b/cmd/hidden_lake/traffic/internal/config/types.go similarity index 58% rename from cmd/hms/config/types.go rename to cmd/hidden_lake/traffic/internal/config/types.go index bb6acf6a..b6ed472b 100644 --- a/cmd/hms/config/types.go +++ b/cmd/hidden_lake/traffic/internal/config/types.go @@ -2,6 +2,4 @@ package config type IConfig interface { Address() string - CleanCron() string - Connections() []string } diff --git a/cmd/hidden_lake/traffic/internal/database/database.go b/cmd/hidden_lake/traffic/internal/database/database.go new file mode 100644 index 00000000..290a44b1 --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/database/database.go @@ -0,0 +1,139 @@ +package database + +import ( + "fmt" + "sync" + + "github.com/number571/go-peer/pkg/client/message" + "github.com/number571/go-peer/pkg/crypto/hashing" + "github.com/number571/go-peer/pkg/encoding" + gp_database "github.com/number571/go-peer/pkg/storage/database" +) + +type sKeyValueDB struct { + fMutex sync.Mutex + fPointer uint64 + + fPath string + fSettings ISettings + fDB gp_database.IKeyValueDB +} + +func NewKeyValueDB(path string, sett ISettings) IKeyValueDB { + levelDB := gp_database.NewLevelDB( + gp_database.NewSettings(&gp_database.SSettings{}), + path, + ) + if levelDB == nil { + panic("storage (hashes) is nil") + } + db := &sKeyValueDB{ + fPath: path, + fSettings: sett, + fDB: levelDB, + } + db.fPointer = db.getPointer() + return db +} + +func (db *sKeyValueDB) Settings() ISettings { + return db.fSettings +} + +func (db *sKeyValueDB) Hashes() ([]string, error) { + db.fMutex.Lock() + defer db.fMutex.Unlock() + + msgsLimit := db.Settings().GetLimitMessages() + res := make([]string, 0, msgsLimit) + for i := uint64(0); i < msgsLimit; i++ { + hash, err := db.fDB.Get(getKeyHash(i)) + if err != nil { + break + } + if len(hash) != hashing.CSHA256Size { + return nil, fmt.Errorf("incorrect hash size") + } + res = append(res, encoding.HexEncode(hash)) + } + + return res, nil +} + +func (db *sKeyValueDB) Push(msg message.IMessage) error { + db.fMutex.Lock() + defer db.fMutex.Unlock() + + // delete old message + keyHash := getKeyHash(db.getPointer()) + if hash, err := db.fDB.Get(keyHash); err == nil { + if err := db.fDB.Del(hash); err != nil { + return err + } + } + + // rewrite hash's field + hash := msg.Body().Hash() + if err := db.fDB.Set(keyHash, hash); err != nil { + return err + } + + // write message + keyMsg := getKeyMessage(hash) + if err := db.fDB.Set(keyMsg, msg.Bytes()); err != nil { + return err + } + + // update pointer + if err := db.incPointer(); err != nil { + return err + } + + return nil +} + +func (db *sKeyValueDB) Load(strHash string) (message.IMessage, error) { + db.fMutex.Lock() + defer db.fMutex.Unlock() + + hash := encoding.HexDecode(strHash) + if len(hash) != hashing.CSHA256Size { + return nil, fmt.Errorf("key size invalid") + } + + data, err := db.fDB.Get(getKeyMessage(hash)) + if err != nil { + return nil, fmt.Errorf("message undefined") + } + + msg := message.LoadMessage(data, db.fSettings.GetWorkSize()) + if msg == nil { + panic("message is nil") + } + + return msg, nil +} + +func (db *sKeyValueDB) Close() error { + db.fMutex.Lock() + defer db.fMutex.Unlock() + + return db.fDB.Close() +} + +func (db *sKeyValueDB) getPointer() uint64 { + data, err := db.fDB.Get(getKeyPointer()) + if err != nil { + return 0 + } + + res := [encoding.CSizeUint64]byte{} + copy(res[:], data) + return encoding.BytesToUint64(res) +} + +func (db *sKeyValueDB) incPointer() error { + msgsLimit := db.Settings().GetLimitMessages() + res := encoding.Uint64ToBytes((db.getPointer() + 1) % msgsLimit) + return db.fDB.Set(getKeyPointer(), res[:]) +} diff --git a/cmd/hidden_lake/traffic/internal/database/database_test.go b/cmd/hidden_lake/traffic/internal/database/database_test.go new file mode 100644 index 00000000..badfcb12 --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/database/database_test.go @@ -0,0 +1,119 @@ +package database + +import ( + "bytes" + "os" + "testing" + + "github.com/number571/go-peer/pkg/client" + "github.com/number571/go-peer/pkg/crypto/asymmetric" + "github.com/number571/go-peer/pkg/encoding" + "github.com/number571/go-peer/pkg/payload" + testutils "github.com/number571/go-peer/test/_data" +) + +const ( + tcPathDB = "test.db" +) + +var ( + tgDB IKeyValueDB +) + +func testHmsDefaultInit(dbPath string) { + os.RemoveAll(dbPath) + tgDB = NewKeyValueDB(dbPath, NewSettings(&SSettings{})) +} + +func TestDB(t *testing.T) { + testHmsDefaultInit(tcPathDB) + defer func() { + tgDB.Close() + os.RemoveAll(tcPathDB) + }() + + cl := client.NewClient( + client.NewSettings(&client.SSettings{ + FWorkSize: 10, + FMessageSize: (100 << 10), + }), + asymmetric.LoadRSAPrivKey(testutils.TcPrivKey), + ) + + putHashes := make([]string, 0, 3) + + for i := 0; i < 3; i++ { + msg, err := cl.Encrypt( + cl.PubKey(), + payload.NewPayload(uint64(testutils.TcHead), []byte(testutils.TcBody)), + ) + if err != nil { + t.Error(err) + return + } + + if err := tgDB.Push(msg); err != nil { + t.Error(err) + return + } + putHashes = append(putHashes, encoding.HexEncode(msg.Body().Hash())) + } + + getHashes, err := tgDB.Hashes() + if err != nil { + t.Error(err) + return + } + + if len(getHashes) != 3 { + t.Error("len getHashes != 3") + return + } + + for i := range getHashes { + if getHashes[i] != putHashes[i] { + t.Errorf("getHashes[%d] != putHashes[%d]", i, i) + return + } + } + + for _, getHash := range getHashes { + loadMsg, err := tgDB.Load(getHash) + if err != nil { + t.Error(err) + return + } + + msgHash := encoding.HexEncode(loadMsg.Body().Hash()) + if getHash != msgHash { + t.Errorf("getHash[%s] != msgHash[%s]", getHash, msgHash) + return + } + + pubKey, pl, err := cl.Decrypt(loadMsg) + if err != nil { + t.Error(err) + return + } + + if pubKey.Address().String() != cl.PubKey().Address().String() { + t.Error("load public key != init public key") + return + } + + if pl.Head() != uint64(testutils.TcHead) { + t.Error("load msg head != init head") + return + } + + if !bytes.Equal(pl.Body(), []byte(testutils.TcBody)) { + t.Error("load msg body != init body") + return + } + } + + if err := tgDB.Close(); err != nil { + t.Error(err) + return + } +} diff --git a/cmd/hidden_lake/traffic/internal/database/keys.go b/cmd/hidden_lake/traffic/internal/database/keys.go new file mode 100644 index 00000000..887970f1 --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/database/keys.go @@ -0,0 +1,21 @@ +package database + +import "fmt" + +const ( + cKeyPointer = "database.pointer" + cKeyHashTemplate = "database.hashes[%d]" + cKeyMessageTemplate = "database.messages[%X]" +) + +func getKeyPointer() []byte { + return []byte(cKeyPointer) +} + +func getKeyHash(i uint64) []byte { + return []byte(fmt.Sprintf(cKeyHashTemplate, i)) +} + +func getKeyMessage(hash []byte) []byte { + return []byte(fmt.Sprintf(cKeyMessageTemplate, hash)) +} diff --git a/cmd/hidden_lake/traffic/internal/database/settings.go b/cmd/hidden_lake/traffic/internal/database/settings.go new file mode 100644 index 00000000..874ab2b2 --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/database/settings.go @@ -0,0 +1,41 @@ +package database + +var ( + _ ISettings = &sSettings{} +) + +const ( + cWorkSize = 10 + cLimitMessages = (1 << 10) +) + +type SSettings sSettings +type sSettings struct { + FLimitMessages uint64 + FWorkSize uint64 +} + +func NewSettings(sett *SSettings) ISettings { + return (&sSettings{ + FWorkSize: sett.FWorkSize, + FLimitMessages: sett.FLimitMessages, + }).useDefaultValues() +} + +func (s *sSettings) useDefaultValues() ISettings { + if s.FWorkSize == 0 { + s.FWorkSize = cWorkSize + } + if s.FLimitMessages == 0 { + s.FLimitMessages = cLimitMessages + } + return s +} + +func (s *sSettings) GetLimitMessages() uint64 { + return s.FLimitMessages +} + +func (s *sSettings) GetWorkSize() uint64 { + return s.FWorkSize +} diff --git a/cmd/hidden_lake/traffic/internal/database/types.go b/cmd/hidden_lake/traffic/internal/database/types.go new file mode 100644 index 00000000..89fca384 --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/database/types.go @@ -0,0 +1,20 @@ +package database + +import ( + "github.com/number571/go-peer/pkg/client/message" + "github.com/number571/go-peer/pkg/types" +) + +type IKeyValueDB interface { + Push(message.IMessage) error + Load(string) (message.IMessage, error) + Hashes() ([]string, error) + + Settings() ISettings + types.ICloser +} + +type ISettings interface { + GetLimitMessages() uint64 + GetWorkSize() uint64 +} diff --git a/cmd/hmc/action/action_test.go b/cmd/hidden_lake/traffic/internal/handler/handler_test.go similarity index 79% rename from cmd/hmc/action/action_test.go rename to cmd/hidden_lake/traffic/internal/handler/handler_test.go index c355761b..afe9c77c 100644 --- a/cmd/hmc/action/action_test.go +++ b/cmd/hidden_lake/traffic/internal/handler/handler_test.go @@ -1,4 +1,4 @@ -package action +package handler import "testing" diff --git a/cmd/hidden_lake/traffic/internal/handler/hashes.go b/cmd/hidden_lake/traffic/internal/handler/hashes.go new file mode 100644 index 00000000..3f277d19 --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/handler/hashes.go @@ -0,0 +1,26 @@ +package handler + +import ( + "net/http" + "strings" + + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/database" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/settings" +) + +func HashesPage(db database.IKeyValueDB) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + response(w, pkg_settings.CErrorMethod, "failed: incorrect method") + return + } + + hashes, err := db.Hashes() + if err != nil { + response(w, pkg_settings.CErrorLoad, "failed: load size") + return + } + + response(w, pkg_settings.CErrorNone, strings.Join(hashes, ",")) + } +} diff --git a/cmd/hidden_lake/traffic/internal/handler/index.go b/cmd/hidden_lake/traffic/internal/handler/index.go new file mode 100644 index 00000000..184b46ea --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/handler/index.go @@ -0,0 +1,13 @@ +package handler + +import ( + "net/http" + + hlt_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/settings" +) + +func HandleIndexAPI() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + response(w, hlt_settings.CErrorNone, hlt_settings.CTitlePattern) + } +} diff --git a/cmd/hidden_lake/traffic/internal/handler/load.go b/cmd/hidden_lake/traffic/internal/handler/load.go new file mode 100644 index 00000000..c9aad50b --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/handler/load.go @@ -0,0 +1,35 @@ +package handler + +import ( + "encoding/json" + "net/http" + + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/database" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/settings" + "github.com/number571/go-peer/pkg/encoding" +) + +func HandleLoadAPI(db database.IKeyValueDB) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var vRequest pkg_settings.SLoadRequest + + if r.Method != "POST" { + response(w, pkg_settings.CErrorMethod, "failed: incorrect method") + return + } + + err := json.NewDecoder(r.Body).Decode(&vRequest) + if err != nil { + response(w, pkg_settings.CErrorDecode, "failed: decode request") + return + } + + msg, err := db.Load(vRequest.FHash) + if err != nil { + response(w, pkg_settings.CErrorLoad, "failed: load message") + return + } + + response(w, pkg_settings.CErrorNone, encoding.HexEncode(msg.Bytes())) + } +} diff --git a/cmd/hidden_lake/traffic/internal/handler/push.go b/cmd/hidden_lake/traffic/internal/handler/push.go new file mode 100644 index 00000000..a2bff7d8 --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/handler/push.go @@ -0,0 +1,48 @@ +package handler + +import ( + "encoding/json" + "net/http" + + "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/database" + hlt_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/settings" + "github.com/number571/go-peer/pkg/client/message" + "github.com/number571/go-peer/pkg/encoding" +) + +func HandlePushAPI(db database.IKeyValueDB) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var vRequest pkg_settings.SPushRequest + + if r.Method != "POST" { + response(w, pkg_settings.CErrorMethod, "failed: incorrect method") + return + } + + err := json.NewDecoder(r.Body).Decode(&vRequest) + if err != nil { + response(w, pkg_settings.CErrorDecode, "failed: decode request") + return + } + + if uint64(len(vRequest.FMessage)) > hlt_settings.CMessageSize { + response(w, pkg_settings.CErrorPackSize, "failed: incorrect package size") + return + } + + msg := message.LoadMessage(encoding.HexDecode(vRequest.FMessage), hlt_settings.CWorkSize) + if msg == nil { + response(w, pkg_settings.CErrorMessage, "failed: decode message") + return + } + + err = db.Push(msg) + if err != nil { + response(w, pkg_settings.CErrorPush, "failed: push message") + return + } + + response(w, pkg_settings.CErrorNone, "success") + } +} diff --git a/cmd/hidden_lake/traffic/internal/handler/response.go b/cmd/hidden_lake/traffic/internal/handler/response.go new file mode 100644 index 00000000..b137422e --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/handler/response.go @@ -0,0 +1,16 @@ +package handler + +import ( + "encoding/json" + "net/http" + + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/settings" +) + +func response(w http.ResponseWriter, ret int, res string) { + w.Header().Set("Content-Type", pkg_settings.CContentType) + json.NewEncoder(w).Encode(&pkg_settings.SResponse{ + FResult: res, + FReturn: ret, + }) +} diff --git a/cmd/hidden_lake/traffic/internal/settings/settings.go b/cmd/hidden_lake/traffic/internal/settings/settings.go new file mode 100644 index 00000000..dfe8fa60 --- /dev/null +++ b/cmd/hidden_lake/traffic/internal/settings/settings.go @@ -0,0 +1,16 @@ +package settings + +import ( + hls_settings "github.com/number571/go-peer/cmd/hidden_lake/service/pkg/settings" +) + +const ( + CPathDB = "hlt.db" + CPathCFG = "hlt.cfg" +) + +const ( + CLimitMessages = (1 << 10) + CWorkSize = hls_settings.CWorkSize + CMessageSize = hls_settings.CMessageSize +) diff --git a/cmd/hmc/settings/settings_test.go b/cmd/hidden_lake/traffic/internal/settings/settings_test.go similarity index 100% rename from cmd/hmc/settings/settings_test.go rename to cmd/hidden_lake/traffic/internal/settings/settings_test.go diff --git a/cmd/hidden_lake/traffic/pkg/client/builder.go b/cmd/hidden_lake/traffic/pkg/client/builder.go new file mode 100644 index 00000000..9147ab9a --- /dev/null +++ b/cmd/hidden_lake/traffic/pkg/client/builder.go @@ -0,0 +1,31 @@ +package client + +import ( + "github.com/number571/go-peer/pkg/client/message" + "github.com/number571/go-peer/pkg/encoding" + + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/settings" +) + +var ( + _ IBuilder = &sBuilder{} +) + +type sBuilder struct { +} + +func NewBuilder() IBuilder { + return &sBuilder{} +} + +func (builder *sBuilder) Load(hash string) *pkg_settings.SLoadRequest { + return &pkg_settings.SLoadRequest{ + FHash: hash, + } +} + +func (builder *sBuilder) Push(msg message.IMessage) *pkg_settings.SPushRequest { + return &pkg_settings.SPushRequest{ + FMessage: encoding.HexEncode(msg.Bytes()), + } +} diff --git a/cmd/hidden_lake/traffic/pkg/client/client.go b/cmd/hidden_lake/traffic/pkg/client/client.go new file mode 100644 index 00000000..481062ce --- /dev/null +++ b/cmd/hidden_lake/traffic/pkg/client/client.go @@ -0,0 +1,37 @@ +package client + +import ( + "github.com/number571/go-peer/pkg/client/message" +) + +var ( + _ IClient = &sClient{} +) + +type sClient struct { + fBuilder IBuilder + fRequester IRequester +} + +func NewClient(builder IBuilder, requester IRequester) IClient { + return &sClient{ + fBuilder: builder, + fRequester: requester, + } +} + +func (client *sClient) Hashes() ([]string, error) { + return client.fRequester.Hashes() +} + +func (client *sClient) Load(hash string) (message.IMessage, error) { + msg, err := client.fRequester.Load(client.fBuilder.Load(hash)) + if err != nil { + return nil, err + } + return msg, nil +} + +func (client *sClient) Push(msg message.IMessage) error { + return client.fRequester.Push(client.fBuilder.Push(msg)) +} diff --git a/cmd/hidden_lake/traffic/pkg/client/client_test.go b/cmd/hidden_lake/traffic/pkg/client/client_test.go new file mode 100644 index 00000000..29205f29 --- /dev/null +++ b/cmd/hidden_lake/traffic/pkg/client/client_test.go @@ -0,0 +1,60 @@ +package client + +// func TestBuilder(t *testing.T) { +// client := client.NewClient( +// client.NewSettings(&client.SSettings{ +// FWorkSize: 10, +// FMessageSize: (100 << 10), +// }), +// asymmetric.LoadRSAPrivKey(testutils.TcPrivKey), +// ) + +// hashRecv := client.PubKey().Address().Bytes() +// builder := NewBuilder(client) + +// bSize := builder.Size() +// if !bytes.Equal(bSize.FReceiver, hashRecv) { +// t.Error("builder size error (hash receiver)") +// return +// } + +// bLoad := builder.Load(1) +// if bLoad.FIndex != 1 || !bytes.Equal(bLoad.FReceiver, hashRecv) { +// t.Error("builder load error (index, hash receiver)") +// return +// } + +// pl := payload.NewPayload(uint64(testutils.TcHead), []byte(testutils.TcBody)) +// bPush := builder.Push(client.PubKey(), pl) +// if !bytes.Equal(bPush.FReceiver, hashRecv) { +// t.Error("builder push error (hash receiver)") +// return +// } + +// msg := message.LoadMessage(bPush.FPackage) +// if msg == nil { +// t.Error("builder push error (message is nil [1])") +// return +// } + +// pubKey, pl, err := client.Decrypt(msg) +// if err != nil { +// t.Error("builder push error (message is nil [2])") +// return +// } + +// if pl.Head() != uint64(testutils.TcHead) { +// t.Error("builder push error (head is not equal)") +// return +// } + +// if string(pl.Body()) != testutils.TcBody { +// t.Error("builder push error (body is not equal)") +// return +// } + +// if pubKey.Address().String() != client.PubKey().Address().String() { +// t.Error("builder push error (public key is not equal)") +// return +// } +// } diff --git a/cmd/hidden_lake/traffic/pkg/client/requester.go b/cmd/hidden_lake/traffic/pkg/client/requester.go new file mode 100644 index 00000000..528cb986 --- /dev/null +++ b/cmd/hidden_lake/traffic/pkg/client/requester.go @@ -0,0 +1,94 @@ +package client + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "strings" + + hlt_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/internal/settings" + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/settings" + "github.com/number571/go-peer/pkg/client/message" + "github.com/number571/go-peer/pkg/encoding" +) + +var ( + _ IRequester = &sRequester{} +) + +type sRequester struct { + fHost string +} + +func NewRequester(host string) IRequester { + return &sRequester{ + fHost: host, + } +} + +func (r *sRequester) Hashes() ([]string, error) { + resp, err := http.Get( + fmt.Sprintf(pkg_settings.CHashesTemplate, r.fHost), + ) + if err != nil { + return nil, err + } + + var response pkg_settings.SResponse + json.NewDecoder(resp.Body).Decode(&response) + + if response.FReturn != pkg_settings.CErrorNone { + return nil, fmt.Errorf("%s", string(response.FResult)) + } + + return strings.Split(response.FResult, ","), nil +} + +func (r *sRequester) Load(request *pkg_settings.SLoadRequest) (message.IMessage, error) { + resp, err := http.Post( + fmt.Sprintf(pkg_settings.CLoadTemplate, r.fHost), + pkg_settings.CContentType, + bytes.NewReader(encoding.Serialize(request)), + ) + if err != nil { + return nil, err + } + + var response pkg_settings.SResponse + json.NewDecoder(resp.Body).Decode(&response) + + if response.FReturn != pkg_settings.CErrorNone { + return nil, fmt.Errorf("%s", string(response.FResult)) + } + + msg := message.LoadMessage( + encoding.HexDecode(response.FResult), + hlt_settings.CWorkSize, + ) + if msg == nil { + return nil, fmt.Errorf("message is nil") + } + + return msg, nil +} + +func (r *sRequester) Push(request *pkg_settings.SPushRequest) error { + resp, err := http.Post( + fmt.Sprintf(pkg_settings.CPushTemplate, r.fHost), + pkg_settings.CContentType, + bytes.NewReader(encoding.Serialize(request)), + ) + if err != nil { + return err + } + + var response pkg_settings.SResponse + json.NewDecoder(resp.Body).Decode(&response) + + if response.FReturn != pkg_settings.CErrorNone { + return fmt.Errorf("%s", string(response.FResult)) + } + + return nil +} diff --git a/cmd/hidden_lake/traffic/pkg/client/types.go b/cmd/hidden_lake/traffic/pkg/client/types.go new file mode 100644 index 00000000..df0ddbab --- /dev/null +++ b/cmd/hidden_lake/traffic/pkg/client/types.go @@ -0,0 +1,23 @@ +package client + +import ( + pkg_settings "github.com/number571/go-peer/cmd/hidden_lake/traffic/pkg/settings" + "github.com/number571/go-peer/pkg/client/message" +) + +type IClient interface { + Hashes() ([]string, error) + Load(string) (message.IMessage, error) + Push(message.IMessage) error +} + +type IBuilder interface { + Load(string) *pkg_settings.SLoadRequest + Push(message.IMessage) *pkg_settings.SPushRequest +} + +type IRequester interface { + Hashes() ([]string, error) + Load(*pkg_settings.SLoadRequest) (message.IMessage, error) + Push(*pkg_settings.SPushRequest) error +} diff --git a/cmd/hidden_lake/traffic/pkg/settings/settings.go b/cmd/hidden_lake/traffic/pkg/settings/settings.go new file mode 100644 index 00000000..cb49d684 --- /dev/null +++ b/cmd/hidden_lake/traffic/pkg/settings/settings.go @@ -0,0 +1,29 @@ +package settings + +const ( + CTitlePattern = "go-peer/hidden-lake-traffic" + CContentType = "application/json" +) + +const ( + CHashesPath = "/hashes" + CLoadPath = "/load" + CPushPath = "/push" +) + +const ( + CHashesTemplate = "%s" + CHashesPath + CLoadTemplate = "%s" + CLoadPath + CPushTemplate = "%s" + CPushPath +) + +const ( + CErrorNone = iota + 1 + CErrorMethod + CErrorDecode + CErrorLoad + CErrorPush + CErrorMessage + CErrorPackSize + CErrorWorkSize +) diff --git a/cmd/hms/settings/settings_test.go b/cmd/hidden_lake/traffic/pkg/settings/settings_test.go similarity index 100% rename from cmd/hms/settings/settings_test.go rename to cmd/hidden_lake/traffic/pkg/settings/settings_test.go diff --git a/cmd/hidden_lake/traffic/pkg/settings/types.go b/cmd/hidden_lake/traffic/pkg/settings/types.go new file mode 100644 index 00000000..1cb83e39 --- /dev/null +++ b/cmd/hidden_lake/traffic/pkg/settings/types.go @@ -0,0 +1,14 @@ +package settings + +type SResponse struct { + FResult string `json:"result"` + FReturn int `json:"return"` +} + +type SLoadRequest struct { + FHash string `json:"hash"` +} + +type SPushRequest struct { + FMessage string `json:"message"` +} diff --git a/cmd/hmc/.gitignore b/cmd/hmc/.gitignore deleted file mode 100644 index 1c55276b..00000000 --- a/cmd/hmc/.gitignore +++ /dev/null @@ -1 +0,0 @@ -hmc diff --git a/cmd/hmc/Makefile b/cmd/hmc/Makefile deleted file mode 100644 index ea8fd74a..00000000 --- a/cmd/hmc/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -GC=go build -.PHONY: default build run clean -default: build run -build: - $(GC) -o hmc *.go -run: - ./hmc -clean: - rm -rf hmc hmc.cfg hmc.stg hmc.db diff --git a/cmd/hmc/README.md b/cmd/hmc/README.md deleted file mode 100644 index fe112890..00000000 --- a/cmd/hmc/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# HMC - -> Hidden Message Client diff --git a/cmd/hmc/action/action.go b/cmd/hmc/action/action.go deleted file mode 100644 index 04da701b..00000000 --- a/cmd/hmc/action/action.go +++ /dev/null @@ -1,25 +0,0 @@ -package action - -var ( - _ IAction = &sAction{} -) - -type sAction struct { - fDescription string - fHandler func() -} - -func NewAction(description string, handler func()) IAction { - return &sAction{ - fDescription: description, - fHandler: handler, - } -} - -func (act *sAction) Description() string { - return act.fDescription -} - -func (act *sAction) Do() { - act.fHandler() -} diff --git a/cmd/hmc/action/types.go b/cmd/hmc/action/types.go deleted file mode 100644 index 6821ebf0..00000000 --- a/cmd/hmc/action/types.go +++ /dev/null @@ -1,8 +0,0 @@ -package action - -type IActions map[string]IAction - -type IAction interface { - Description() string - Do() -} diff --git a/cmd/hmc/actions.go b/cmd/hmc/actions.go deleted file mode 100644 index 2649e19e..00000000 --- a/cmd/hmc/actions.go +++ /dev/null @@ -1,274 +0,0 @@ -package main - -import ( - "fmt" - "math" - "os" - "sort" - "strconv" - "strings" - "syscall" - - "github.com/number571/go-peer/cmd/hmc/action" - "github.com/number571/go-peer/cmd/hmc/settings" - "github.com/number571/go-peer/cmd/hms/hmc" - "github.com/number571/go-peer/pkg/payload" -) - -func newActions() action.IActions { - return action.IActions{ - "": action.NewAction( - "", - func() {}, - ), - "exit": action.NewAction( - "exit from application", - func() { syscall.Kill(os.Getpid(), syscall.SIGINT) }, - ), - "help": action.NewAction( - "get help information about this application", - helpAction, - ), - "whoami": action.NewAction( - "get information about authorized user", - whoamiAction, - ), - "size": action.NewAction( - "get count of emails and pages in user database", - sizeAction, - ), - "list": action.NewAction( - "get list of emails by page (10 emails in 1 page)", - listAction, - ), - "read": action.NewAction( - "get full information about 1 email by ID", - readAction, - ), - "push": action.NewAction( - "create new email and push this to servers", - pushAction, - ), - "load": action.NewAction( - "try load all emails to authorized user from servers", - loadAction, - ), - } -} - -func helpAction() { - type sActionWithKey struct { - fKey string - fAction action.IAction - } - - actions := []*sActionWithKey{} - for key, act := range gActions { - actions = append(actions, &sActionWithKey{ - fKey: key, - fAction: act, - }) - } - - sort.SliceStable(actions, func(i, j int) bool { - return strings.Compare(actions[i].fKey, actions[j].fKey) < 0 - }) - - for _, act := range actions { - switch act.fKey { - case "": - continue - default: - fmt.Printf("%s:\t%s\n", act.fKey, act.fAction.Description()) - } - } -} - -func loadAction() { - // check connections - for _, addr := range gWrapper.Config().Original().Connections() { - client := hmc.NewClient( - hmc.NewBuilder(gClient), - hmc.NewRequester(addr), - ) - - // connect to server - size, err := client.Size() - if err != nil { - fmt.Println(err) - continue - } - - // infinite loop protection - if size > settings.CReceiveSize { - fmt.Println("size of messages > limit") - continue - } - - // load new emails - for i := uint64(0); i < size; i++ { - msg, err := client.Load(i) - if err != nil { - break - } - - pubKey, pld, err := gClient.Decrypt(msg) - if err != nil { - continue - } - - if gWrapper.Config().Original().F2F() { - if _, ok := gWrapper.Config().GetNameByPubKey(pubKey); !ok { - continue - } - } - - if pld.Head() != settings.CHeadPayload { - continue - } - - if len(strings.Split(string(pld.Body()), settings.CSeparator)) < 2 { - continue - } - - err = gDB.Push(gClient.PubKey().Address().Bytes(), msg) - if err != nil { - continue - } - } - } -} - -func whoamiAction() { - fmt.Printf("Address:\n%s;\nPublic Key:\n%s;\n", - gClient.PubKey().Address().String(), - gClient.PubKey()) -} - -func sizeAction() { - size, err := gDB.Size(gClient.PubKey().Address().Bytes()) - if err != nil { - fmt.Println(err) - return - } - - pages := int(math.Ceil(float64(size) / float64(settings.CCountInPage))) - - fmt.Printf("Count: %d\n", size) - fmt.Printf("Pages: %d\n", pages) -} - -func listAction() { - page := newInputter("Page: ").String() - pageInt, err := strconv.Atoi(page) - if err != nil { - fmt.Println(err) - return - } - - start := (pageInt - 1) * settings.CCountInPage - if start < 0 { - fmt.Println("Page can't be <= 0") - return - } - - for pointer := start; pointer < start+settings.CCountInPage; pointer++ { - msg, err := gDB.Load(gClient.PubKey().Address().Bytes(), uint64(pointer)) - if err != nil { - break - } - - pubKey, pld, err := gClient.Decrypt(msg) - if err != nil { - panic(err) - } - - title := []rune(strings.Split(string(pld.Body()), settings.CSeparator)[0]) - if len(title) > settings.CListLenTitle { - title = []rune(string(title[:settings.CListLenTitle-3]) + "...") - } - - name, _ := gWrapper.Config().GetNameByPubKey(pubKey) - fmt.Printf("%s\nID: %d;\nFrom: %s [%s];\nTitle: %s;\n", - settings.CSeparator, - pointer, - pubKey.Address().String(), - name, - string(title), - ) - } -} - -func readAction() { - id := newInputter("ID: ").String() - idInt, err := strconv.Atoi(id) - if err != nil { - fmt.Println(err) - return - } - - msg, err := gDB.Load(gClient.PubKey().Address().Bytes(), uint64(idInt)) - if err != nil { - return - } - - pubKey, pld, err := gClient.Decrypt(msg) - if err != nil { - panic(err) - } - - from, _ := gWrapper.Config().GetNameByPubKey(pubKey) - splited := strings.Split(string(pld.Body()), settings.CSeparator) - - fmt.Printf("%s\nFROM:\n%s [%s]\n%s\nTITLE:\n%s\n%s\nMESSAGE:\n%s\n%s\nPUBLIC_KEY:\n%s\n", - settings.CSeparator, - pubKey.Address().String(), - from, - settings.CSeparator, - splited[0], - settings.CSeparator, - strings.Join(splited[1:], settings.CSeparator), - settings.CSeparator, - pubKey.String(), - ) -} - -func pushAction() { - name := newInputter("Receiver: ").String() - pubKey, ok := gWrapper.Config().GetPubKeyByName(name) - if !ok { - fmt.Println("Receiver's public key undefined") - return - } - - title := newInputter("Title: ").String() - if title == "" { - fmt.Println("Title is nil") - return - } - - msg := newInputter("Message: ").String() - if msg == "" { - fmt.Println("Message is nil") - return - } - - withoutError := 0 - pushReq := hmc.NewBuilder(gClient).Push( - pubKey, - payload.NewPayload( - settings.CHeadPayload, - []byte(fmt.Sprintf("%s%s%s", title, settings.CSeparator, msg)), - ), - ) - for _, addr := range gWrapper.Config().Original().Connections() { - err := hmc.NewRequester(addr).Push(pushReq) - if err != nil { - fmt.Printf("%s - '%s'\n", addr, err.Error()) - continue - } - withoutError++ - } - - fmt.Printf("Message successfully sent (%d servers are received)\n", withoutError) -} diff --git a/cmd/hmc/config/config.go b/cmd/hmc/config/config.go deleted file mode 100644 index 41ee147c..00000000 --- a/cmd/hmc/config/config.go +++ /dev/null @@ -1,95 +0,0 @@ -package config - -import ( - "fmt" - - "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/pkg/encoding" - "github.com/number571/go-peer/pkg/filesystem" -) - -var ( - _ IConfig = &sConfig{} -) - -type sConfig struct { - FF2F bool `json:"f2f_mode"` - FConnections []string `json:"connections"` - FFriends []*sFriend `json:"friends"` - fFriends []iFriend -} - -type sFriend struct { - FName string `json:"name"` - FPubKey string `json:"pub_key"` - fPubKey asymmetric.IPubKey -} - -const ( - // create local hms - cDefaultConnection = "http://localhost:8080" - - // example of friend's name - gDefaultName = "default" - - // example of friend's public key - gDefaultPubKey = `Pub(go-peer/rsa){30818902818100C709DA63096CEDBA0DD6B5DD9465B412268C00509757A8EBD9096E17BEEC17C25A3A8F246E1591554CD214F4B27254EFA811F8BE441A03B37B3C8B390484C74C2294A4C895AA925D723E0065A877D4502CC010996863821E7348348E4E96CDD4CB7A852B2E2853C8FDEE556C4F89F6C3295EAC00DAEE86DD94E25F9703F368C70203010001}` -) - -func NewConfig(filepath string) IConfig { - var cfg = new(sConfig) - - if !filesystem.OpenFile(filepath).IsExist() { - cfg = &sConfig{ - FF2F: false, - FConnections: []string{cDefaultConnection}, - FFriends: []*sFriend{{ - FName: gDefaultName, - FPubKey: gDefaultPubKey, - }}, - } - err := filesystem.OpenFile(filepath).Write(encoding.Serialize(cfg)) - if err != nil { - panic(err) - } - } else { - bytes, err := filesystem.OpenFile(filepath).Read() - if err != nil { - panic(err) - } - err = encoding.Deserialize(bytes, cfg) - if err != nil { - panic(err) - } - } - - for _, val := range cfg.FFriends { - val.fPubKey = asymmetric.LoadRSAPubKey(val.FPubKey) - if val.fPubKey == nil { - panic(fmt.Sprintf("public key is nil: '%s'", val.FName)) - } - cfg.fFriends = append(cfg.fFriends, val) - } - - return cfg -} - -func (cfg *sConfig) F2F() bool { - return cfg.FF2F -} - -func (cfg *sConfig) Connections() []string { - return cfg.FConnections -} - -func (cfg *sConfig) Friends() []iFriend { - return cfg.fFriends -} - -func (f *sFriend) Name() string { - return f.FName -} - -func (f *sFriend) PubKey() asymmetric.IPubKey { - return f.fPubKey -} diff --git a/cmd/hmc/config/config_test.go b/cmd/hmc/config/config_test.go deleted file mode 100644 index 74aa141d..00000000 --- a/cmd/hmc/config/config_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package config - -import ( - "os" - "testing" - - "github.com/number571/go-peer/pkg/filesystem" -) - -const ( - tcConfigFile = "config_test.txt" -) - -const ( - tcF2F = true - tcConnection = "test_connection" - tcName = "default" - tcPubKey = "Pub(go-peer/rsa){30818902818100C709DA63096CEDBA0DD6B5DD9465B412268C00509757A8EBD9096E17BEEC17C25A3A8F246E1591554CD214F4B27254EFA811F8BE441A03B37B3C8B390484C74C2294A4C895AA925D723E0065A877D4502CC010996863821E7348348E4E96CDD4CB7A852B2E2853C8FDEE556C4F89F6C3295EAC00DAEE86DD94E25F9703F368C70203010001}" -) - -const ( - tcConfig = `{ - "f2f_mode": true, - "connections": [ - "test_connection" - ], - "friends": [ - { - "name": "default", - "pub_key": "Pub(go-peer/rsa){30818902818100C709DA63096CEDBA0DD6B5DD9465B412268C00509757A8EBD9096E17BEEC17C25A3A8F246E1591554CD214F4B27254EFA811F8BE441A03B37B3C8B390484C74C2294A4C895AA925D723E0065A877D4502CC010996863821E7348348E4E96CDD4CB7A852B2E2853C8FDEE556C4F89F6C3295EAC00DAEE86DD94E25F9703F368C70203010001}" - } - ] -}` -) - -func testConfigDefaultInit(configPath string) { - filesystem.OpenFile(configPath).Write([]byte(tcConfig)) -} - -func TestConfig(t *testing.T) { - testConfigDefaultInit(tcConfigFile) - defer os.Remove(tcConfigFile) - - cfg := NewConfig(tcConfigFile) - - if cfg.F2F() != tcF2F { - t.Error("f2f is invalid") - } - - if cfg.Connections()[0] != tcConnection { - t.Error("connections is invalid") - } - - if cfg.Friends()[0].Name() != tcName { - t.Error("name is invalid") - } - - if cfg.Friends()[0].PubKey().String() != tcPubKey { - t.Error("public key is invalid") - } -} diff --git a/cmd/hmc/config/types.go b/cmd/hmc/config/types.go deleted file mode 100644 index 34131271..00000000 --- a/cmd/hmc/config/types.go +++ /dev/null @@ -1,16 +0,0 @@ -package config - -import ( - "github.com/number571/go-peer/pkg/crypto/asymmetric" -) - -type IConfig interface { - F2F() bool - Connections() []string - Friends() []iFriend -} - -type iFriend interface { - Name() string - PubKey() asymmetric.IPubKey -} diff --git a/cmd/hmc/init.go b/cmd/hmc/init.go deleted file mode 100644 index 458abcae..00000000 --- a/cmd/hmc/init.go +++ /dev/null @@ -1,79 +0,0 @@ -package main - -import ( - "fmt" - "strings" - - "github.com/number571/go-peer/cmd/hmc/config" - "github.com/number571/go-peer/cmd/hmc/settings" - "github.com/number571/go-peer/pkg/client" - "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/pkg/storage" - - hms_database "github.com/number571/go-peer/cmd/hms/database" - hms_settings "github.com/number571/go-peer/cmd/hms/settings" -) - -func hmcDefaultInit() error { - gWrapper = newWrapper( - newConfigWrapper(config.NewConfig("hmc.cfg")), - ) - gDB = hms_database.NewKeyValueDB("hmc.db") - - privKey := getPrivKey( - "hmc.stg", - []byte(newInputter("Password#Stg: ").Password()), - []byte(newInputter("Password#Obj: ").Password()), - ) - if privKey == nil { - return fmt.Errorf("failed load private key") - } - - gActions = newActions() - gClient = client.NewClient( - client.NewSettings(&client.SSettings{ - FWorkSize: hms_settings.CSizeWork, - FMessageSize: hms_settings.CSizePack, - }), - privKey, - ) - - return nil -} - -func getPrivKey(filepath string, storageKey, objectKey []byte) asymmetric.IPrivKey { - // create/open storage - storage, err := storage.NewCryptoStorage( - filepath, - storageKey, - settings.CWorkSize, - ) - if err != nil { - return nil - } - - // get private key - bpriv, err := storage.Get(objectKey) - if err == nil { - return asymmetric.LoadRSAPrivKey(bpriv) - } - - // private key not exist - answ := newInputter("Private key by password not exist.\nGenerate new? [y/n]: ").String() - switch strings.ToLower(answ) { - case "y", "yes": - // generate private key - priv := asymmetric.NewRSAPrivKey(settings.CAKeySize) - err := storage.Set(objectKey, priv.Bytes()) - if err != nil { - panic(err) - } - return priv - case "n", "no": - // exit from program - return nil - default: - // undefined answer - panic("input answer not equal [y/yes, n/no]") - } -} diff --git a/cmd/hmc/inputter.go b/cmd/hmc/inputter.go deleted file mode 100644 index bf68519c..00000000 --- a/cmd/hmc/inputter.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "bufio" - "fmt" - "os" - "strings" - "syscall" - - "golang.org/x/term" -) - -var ( - _ iInputter = &sInputter{} -) - -type sInputter struct { - fBegin string -} - -func newInputter(begin string) iInputter { - return &sInputter{ - fBegin: begin, - } -} - -func (inp *sInputter) String() string { - fmt.Print(inp.fBegin) - - msg, err := bufio.NewReader(os.Stdin).ReadString('\n') - if err != nil { - panic(err) - } - - return strings.TrimSpace(msg) -} - -func (inp *sInputter) Password() string { - fmt.Print(inp.fBegin) - - bpasw, err := term.ReadPassword(syscall.Stdin) - if err != nil { - panic(err) - } - fmt.Println() - - return strings.TrimSpace(string(bpasw)) -} diff --git a/cmd/hmc/main.go b/cmd/hmc/main.go deleted file mode 100644 index 52035ca9..00000000 --- a/cmd/hmc/main.go +++ /dev/null @@ -1,39 +0,0 @@ -// made by cryptohomochok -package main - -import ( - "fmt" - "os" - "os/signal" - "syscall" - - "github.com/number571/go-peer/pkg/closer" - "github.com/number571/go-peer/pkg/types" -) - -func main() { - err := hmcDefaultInit() - if err != nil { - panic(err) - } - - shutdown := make(chan os.Signal, 1) - signal.Notify(shutdown, syscall.SIGINT, syscall.SIGTERM) - - go func() { - gActions["load"].Do() - for { - cmd := newInputter("> ").String() - f, ok := gActions[cmd] - if !ok { - fmt.Println("Undefined command") - continue - } - f.Do() - } - }() - - <-shutdown - fmt.Println("Shutting down...") - closer.CloseAll([]types.ICloser{gDB}) -} diff --git a/cmd/hmc/settings.go b/cmd/hmc/settings.go deleted file mode 100644 index 7062a8e7..00000000 --- a/cmd/hmc/settings.go +++ /dev/null @@ -1,14 +0,0 @@ -package main - -import ( - "github.com/number571/go-peer/cmd/hmc/action" - hms_database "github.com/number571/go-peer/cmd/hms/database" - hls_client "github.com/number571/go-peer/pkg/client" -) - -var ( - gActions action.IActions - gWrapper iWrapper - gClient hls_client.IClient - gDB hms_database.IKeyValueDB -) diff --git a/cmd/hmc/settings/settings.go b/cmd/hmc/settings/settings.go deleted file mode 100644 index 28400bcc..00000000 --- a/cmd/hmc/settings/settings.go +++ /dev/null @@ -1,11 +0,0 @@ -package settings - -const ( - CSeparator = "==============================================" - CCountInPage = 10 // count of messages in one page - CWorkSize = 20 - CListLenTitle = 50 // length of title in list - CAKeySize = 4096 // size of asymmetric key - CReceiveSize = 8192 // count of messages from server - CHeadPayload = 0x5710017500000001 // head of payload -) diff --git a/cmd/hmc/types.go b/cmd/hmc/types.go deleted file mode 100644 index a8e6d714..00000000 --- a/cmd/hmc/types.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "github.com/number571/go-peer/cmd/hmc/config" - "github.com/number571/go-peer/pkg/crypto/asymmetric" -) - -type iWrapper interface { - Config() iConfigWrapper -} - -type iConfigWrapper interface { - Original() config.IConfig - GetNameByPubKey(asymmetric.IPubKey) (string, bool) - GetPubKeyByName(string) (asymmetric.IPubKey, bool) -} - -type iInputter interface { - String() string - Password() string -} diff --git a/cmd/hmc/wrapper.go b/cmd/hmc/wrapper.go deleted file mode 100644 index 44cf4011..00000000 --- a/cmd/hmc/wrapper.go +++ /dev/null @@ -1,61 +0,0 @@ -package main - -import ( - "github.com/number571/go-peer/cmd/hmc/config" - "github.com/number571/go-peer/pkg/crypto/asymmetric" -) - -var ( - _ iWrapper = &sWrapper{} - _ iConfigWrapper = &sConfigWrapper{} -) - -// Wrapper - -type sWrapper struct { - fConfig iConfigWrapper -} - -func newWrapper(cfg iConfigWrapper) iWrapper { - return &sWrapper{ - fConfig: cfg, - } -} - -func (wrap *sWrapper) Config() iConfigWrapper { - return wrap.fConfig -} - -// Config wrapper - -type sConfigWrapper struct { - fConfig config.IConfig -} - -func newConfigWrapper(cfg config.IConfig) iConfigWrapper { - return &sConfigWrapper{ - fConfig: cfg, - } -} - -func (cfgw *sConfigWrapper) Original() config.IConfig { - return cfgw.fConfig -} - -func (cfgw *sConfigWrapper) GetNameByPubKey(pubKey asymmetric.IPubKey) (string, bool) { - for _, friend := range cfgw.fConfig.Friends() { - if friend.PubKey().Address().String() == pubKey.Address().String() { - return friend.Name(), true - } - } - return "", false -} - -func (cfgw *sConfigWrapper) GetPubKeyByName(name string) (asymmetric.IPubKey, bool) { - for _, friend := range cfgw.fConfig.Friends() { - if friend.Name() == name { - return friend.PubKey(), true - } - } - return nil, false -} diff --git a/cmd/hms/.gitignore b/cmd/hms/.gitignore deleted file mode 100644 index 3ece6590..00000000 --- a/cmd/hms/.gitignore +++ /dev/null @@ -1 +0,0 @@ -hms diff --git a/cmd/hms/README.md b/cmd/hms/README.md deleted file mode 100644 index c86fa57b..00000000 --- a/cmd/hms/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# HMS - -> Hidden Message Service diff --git a/cmd/hms/config/config.go b/cmd/hms/config/config.go deleted file mode 100644 index df3a928a..00000000 --- a/cmd/hms/config/config.go +++ /dev/null @@ -1,66 +0,0 @@ -package config - -import ( - "github.com/number571/go-peer/pkg/encoding" - "github.com/number571/go-peer/pkg/filesystem" -) - -var ( - _ IConfig = &sConfig{} -) - -type sConfig struct { - FAddress string `json:"address"` - FCleanCron string `json:"clean_cron"` - FConnections []string `json:"connections"` -} - -const ( - // create local hms - cDefaultAddress = "localhost:8080" - - // cron of clean database - cDefaultCleanCron = "0 0 * * *" - - // connection - cDefaultConnection = "http://localhost:8081" -) - -func NewConfig(filepath string) IConfig { - var cfg = new(sConfig) - - if !filesystem.OpenFile(filepath).IsExist() { - cfg = &sConfig{ - FAddress: cDefaultAddress, - FCleanCron: cDefaultCleanCron, - FConnections: []string{cDefaultConnection}, - } - err := filesystem.OpenFile(filepath).Write(encoding.Serialize(cfg)) - if err != nil { - panic(err) - } - } else { - bytes, err := filesystem.OpenFile(filepath).Read() - if err != nil { - panic(err) - } - err = encoding.Deserialize(bytes, cfg) - if err != nil { - panic(err) - } - } - - return cfg -} - -func (cfg *sConfig) Address() string { - return cfg.FAddress -} - -func (cfg *sConfig) CleanCron() string { - return cfg.FCleanCron -} - -func (cfg *sConfig) Connections() []string { - return cfg.FConnections -} diff --git a/cmd/hms/config/config_test.go b/cmd/hms/config/config_test.go deleted file mode 100644 index 65fb5b04..00000000 --- a/cmd/hms/config/config_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package config - -import ( - "os" - "testing" - - "github.com/number571/go-peer/pkg/filesystem" -) - -const ( - tcConfigFile = "config_test.txt" -) - -const ( - tcAddress = "test_address" - tcCleanCron = "0 0 0 0 0" - tcConnection = "test_connection" -) - -const ( - tcConfig = `{ - "address": "test_address", - "clean_cron": "0 0 0 0 0", - "connections": [ - "test_connection" - ] -}` -) - -func testConfigDefaultInit(configPath string) { - filesystem.OpenFile(configPath).Write([]byte(tcConfig)) -} - -func TestConfig(t *testing.T) { - testConfigDefaultInit(tcConfigFile) - defer os.Remove(tcConfigFile) - - cfg := NewConfig(tcConfigFile) - - if cfg.Address() != tcAddress { - t.Error("address is invalid") - } - - if cfg.CleanCron() != tcCleanCron { - t.Error("clean_cron is invalid") - } - - if cfg.Connections()[0] != tcConnection { - t.Error("connections is invalid") - } -} diff --git a/cmd/hms/database/database.go b/cmd/hms/database/database.go deleted file mode 100644 index f160d688..00000000 --- a/cmd/hms/database/database.go +++ /dev/null @@ -1,185 +0,0 @@ -package database - -import ( - "fmt" - "os" - "sync" - - "github.com/number571/go-peer/pkg/client/message" - "github.com/number571/go-peer/pkg/crypto/hashing" - "github.com/number571/go-peer/pkg/encoding" - gp_database "github.com/number571/go-peer/pkg/storage/database" -) - -type sStorage struct { - fPath string - fDB gp_database.IKeyValueDB -} - -type sKeyValueDB struct { - fMutex sync.Mutex - fHashes *sStorage - fMessages *sStorage -} - -func NewKeyValueDB(path string) IKeyValueDB { - var ( - hPath = fmt.Sprintf("%s/hashes", path) - mPath = fmt.Sprintf("%s/messages", path) - ) - dbHashes := gp_database.NewLevelDB( - gp_database.NewSettings(&gp_database.SSettings{}), - hPath, - ) - if dbHashes == nil { - panic("storage (hashes) is nil") - } - dbMessages := gp_database.NewLevelDB( - gp_database.NewSettings(&gp_database.SSettings{}), - mPath, - ) - if dbMessages == nil { - panic("storage (messages) is nil") - } - return &sKeyValueDB{ - fHashes: &sStorage{ - fPath: hPath, - fDB: dbHashes, - }, - fMessages: &sStorage{ - fPath: mPath, - fDB: dbMessages, - }, - } -} - -func (db *sKeyValueDB) Size(key []byte) (uint64, error) { - db.fMutex.Lock() - defer db.fMutex.Unlock() - - if len(key) != hashing.CSHA256Size { - return 0, fmt.Errorf("key size invalid") - } - - data, err := db.fMessages.fDB.Get(getKeySize(key)) - if err != nil { - return 0, nil - } - - res := [encoding.CSizeUint64]byte{} - copy(res[:], data) - return encoding.BytesToUint64(res), nil -} - -func (db *sKeyValueDB) Push(key []byte, msg message.IMessage) error { - db.fMutex.Lock() - defer db.fMutex.Unlock() - - if len(key) != hashing.CSHA256Size { - return fmt.Errorf("key size invalid") - } - - // store hash - hash := msg.Body().Hash() - _, err := db.fHashes.fDB.Get(getKeyHash(hash)) - if err == nil { - return fmt.Errorf("hash already exists") - } - - err = db.fHashes.fDB.Set(getKeyHash(hash), []byte{1}) - if err != nil { - return err - } - - // update size - size := uint64(0) - bnum, err := db.fMessages.fDB.Get(getKeySize(key)) - if err == nil { - res := [encoding.CSizeUint64]byte{} - copy(res[:], bnum) - size = encoding.BytesToUint64(res) - } - - res := encoding.Uint64ToBytes(size + 1) - err = db.fMessages.fDB.Set(getKeySize(key), res[:]) - if err != nil { - return err - } - - // push message - err = db.fMessages.fDB.Set( - getKeyMessage(key, size), - msg.Bytes(), - ) - if err != nil { - err1 := db.fHashes.fDB.Del(getKeyHash(hash)) - if err1 != nil { - panic(err) - } - err2 := db.fMessages.fDB.Del(getKeySize(key)) - if err2 != nil { - panic(err) - } - return err - } - - return nil -} - -func (db *sKeyValueDB) Load(key []byte, i uint64) (message.IMessage, error) { - db.fMutex.Lock() - defer db.fMutex.Unlock() - - if len(key) != hashing.CSHA256Size { - return nil, fmt.Errorf("key size invalid") - } - - data, err := db.fMessages.fDB.Get(getKeyMessage(key, i)) - if err != nil { - return nil, fmt.Errorf("message undefined") - } - - return message.LoadMessage(data), nil -} - -func (db *sKeyValueDB) Close() error { - db.fMutex.Lock() - defer db.fMutex.Unlock() - - err := db.fMessages.fDB.Close() - if err != nil { - return err - } - - err = db.fHashes.fDB.Close() - if err != nil { - return err - } - - return nil -} - -func (db *sKeyValueDB) Clean() error { - db.fMutex.Lock() - defer db.fMutex.Unlock() - - err := db.fMessages.fDB.Close() - if err != nil { - return err - } - - err = os.RemoveAll(db.fMessages.fPath) - if err != nil { - return err - } - - db.fMessages.fDB = gp_database.NewLevelDB( - gp_database.NewSettings(&gp_database.SSettings{}), - db.fMessages.fPath, - ) - if db.fMessages.fDB == nil { - panic("storage is nil") - } - - return nil -} diff --git a/cmd/hms/database/database_test.go b/cmd/hms/database/database_test.go deleted file mode 100644 index 86e5ef49..00000000 --- a/cmd/hms/database/database_test.go +++ /dev/null @@ -1,127 +0,0 @@ -package database - -import ( - "bytes" - "os" - "testing" - - "github.com/number571/go-peer/pkg/client" - "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/pkg/crypto/hashing" - "github.com/number571/go-peer/pkg/payload" - testutils "github.com/number571/go-peer/test/_data" -) - -const ( - tcPathDB = "test.db" -) - -var ( - tgKey = hashing.NewSHA256Hasher([]byte("test-key")).Bytes() - tgDB IKeyValueDB -) - -func testHmsDefaultInit(dbPath string) { - os.RemoveAll(dbPath) - tgDB = NewKeyValueDB(dbPath) -} - -func TestDB(t *testing.T) { - testHmsDefaultInit(tcPathDB) - defer func() { - tgDB.Close() - os.RemoveAll(tcPathDB) - }() - - size, err := tgDB.Size(tgKey) - if err != nil { - t.Error(err) - return - } - if size != 0 { - t.Error("init size != 0") - return - } - - cl := client.NewClient( - client.NewSettings(&client.SSettings{ - FWorkSize: 10, - FMessageSize: (100 << 10), - }), - asymmetric.LoadRSAPrivKey(testutils.TcPrivKey), - ) - - msg, err := cl.Encrypt( - cl.PubKey(), - payload.NewPayload(uint64(testutils.TcHead), []byte(testutils.TcBody)), - ) - if err != nil { - t.Error(err) - return - } - - err = tgDB.Push(tgKey, msg) - if err != nil { - t.Error(err) - return - } - - size, err = tgDB.Size(tgKey) - if err != nil { - t.Error(err) - return - } - if size != 1 { - t.Error("after push size != 1") - return - } - - loadMsg, err := tgDB.Load(tgKey, 0) - if err != nil { - t.Error(err) - return - } - - pubKey, pl, err := cl.Decrypt(loadMsg) - if err != nil { - t.Error(err) - return - } - - if pubKey.Address().String() != cl.PubKey().Address().String() { - t.Error("load public key != init public key") - return - } - - if pl.Head() != uint64(testutils.TcHead) { - t.Error("load msg head != init head") - return - } - - if !bytes.Equal(pl.Body(), []byte(testutils.TcBody)) { - t.Error("load msg body != init body") - return - } - - err = tgDB.Clean() - if err != nil { - t.Error(err) - return - } - - size, err = tgDB.Size(tgKey) - if err != nil { - t.Error(err) - return - } - if size != 0 { - t.Error("after clean size != 0") - return - } - - err = tgDB.Close() - if err != nil { - t.Error(err) - return - } -} diff --git a/cmd/hms/database/keys.go b/cmd/hms/database/keys.go deleted file mode 100644 index d0ca6fb3..00000000 --- a/cmd/hms/database/keys.go +++ /dev/null @@ -1,21 +0,0 @@ -package database - -import "fmt" - -const ( - cKeySizeTemplate = "database.users[%X].size" - cKeyMessageTemplate = "database.users[%X].messages[%d]" - cKeyHashTemplate = "database.hashes[%X]" -) - -func getKeySize(key []byte) []byte { - return []byte(fmt.Sprintf(cKeySizeTemplate, key)) -} - -func getKeyMessage(key []byte, i uint64) []byte { - return []byte(fmt.Sprintf(cKeyMessageTemplate, key, i)) -} - -func getKeyHash(key []byte) []byte { - return []byte(fmt.Sprintf(cKeyHashTemplate, key)) -} diff --git a/cmd/hms/database/types.go b/cmd/hms/database/types.go deleted file mode 100644 index cf9d2334..00000000 --- a/cmd/hms/database/types.go +++ /dev/null @@ -1,15 +0,0 @@ -package database - -import ( - "github.com/number571/go-peer/pkg/client/message" - "github.com/number571/go-peer/pkg/types" -) - -type IKeyValueDB interface { - Size([]byte) (uint64, error) - Push([]byte, message.IMessage) error - Load([]byte, uint64) (message.IMessage, error) - - Clean() error - types.ICloser -} diff --git a/cmd/hms/hmc/builder.go b/cmd/hms/hmc/builder.go deleted file mode 100644 index 89c8c2ac..00000000 --- a/cmd/hms/hmc/builder.go +++ /dev/null @@ -1,48 +0,0 @@ -package hmc - -import ( - "github.com/number571/go-peer/pkg/client" - "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/pkg/payload" - - hms_settings "github.com/number571/go-peer/cmd/hms/settings" -) - -var ( - _ IBuilder = &sBuilder{} -) - -type sBuilder struct { - fClient client.IClient -} - -func NewBuilder(client client.IClient) IBuilder { - return &sBuilder{ - fClient: client, - } -} - -func (builder *sBuilder) Size() *hms_settings.SSizeRequest { - return &hms_settings.SSizeRequest{ - FReceiver: builder.fClient.PubKey().Address().Bytes(), - } -} - -func (builder *sBuilder) Load(n uint64) *hms_settings.SLoadRequest { - return &hms_settings.SLoadRequest{ - FReceiver: builder.fClient.PubKey().Address().Bytes(), - FIndex: n, - } -} - -func (builder *sBuilder) Push(receiver asymmetric.IPubKey, pl payload.IPayload) *hms_settings.SPushRequest { - encMsg, err := builder.fClient.Encrypt(builder.fClient.PubKey(), pl) - if err != nil { - panic(err) - } - - return &hms_settings.SPushRequest{ - FReceiver: builder.fClient.PubKey().Address().Bytes(), - FPackage: encMsg.Bytes(), - } -} diff --git a/cmd/hms/hmc/client.go b/cmd/hms/hmc/client.go deleted file mode 100644 index c75c4fbf..00000000 --- a/cmd/hms/hmc/client.go +++ /dev/null @@ -1,39 +0,0 @@ -package hmc - -import ( - "github.com/number571/go-peer/pkg/client/message" - "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/pkg/payload" -) - -var ( - _ IClient = &sClient{} -) - -type sClient struct { - fBuilder IBuilder - fRequester IRequester -} - -func NewClient(builder IBuilder, requester IRequester) IClient { - return &sClient{ - fBuilder: builder, - fRequester: requester, - } -} - -func (client *sClient) Size() (uint64, error) { - return client.fRequester.Size(client.fBuilder.Size()) -} - -func (client *sClient) Load(i uint64) (message.IMessage, error) { - msg, err := client.fRequester.Load(client.fBuilder.Load(i)) - if err != nil { - return nil, err - } - return msg, nil -} - -func (client *sClient) Push(recv asymmetric.IPubKey, pl payload.IPayload) error { - return client.fRequester.Push(client.fBuilder.Push(recv, pl)) -} diff --git a/cmd/hms/hmc/hmc_test.go b/cmd/hms/hmc/hmc_test.go deleted file mode 100644 index 9bbb332e..00000000 --- a/cmd/hms/hmc/hmc_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package hmc - -import ( - "bytes" - "testing" - - "github.com/number571/go-peer/pkg/client" - "github.com/number571/go-peer/pkg/client/message" - "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/pkg/payload" - testutils "github.com/number571/go-peer/test/_data" -) - -func TestBuilder(t *testing.T) { - client := client.NewClient( - client.NewSettings(&client.SSettings{ - FWorkSize: 10, - FMessageSize: (100 << 10), - }), - asymmetric.LoadRSAPrivKey(testutils.TcPrivKey), - ) - - hashRecv := client.PubKey().Address().Bytes() - builder := NewBuilder(client) - - bSize := builder.Size() - if !bytes.Equal(bSize.FReceiver, hashRecv) { - t.Error("builder size error (hash receiver)") - return - } - - bLoad := builder.Load(1) - if bLoad.FIndex != 1 || !bytes.Equal(bLoad.FReceiver, hashRecv) { - t.Error("builder load error (index, hash receiver)") - return - } - - pl := payload.NewPayload(uint64(testutils.TcHead), []byte(testutils.TcBody)) - bPush := builder.Push(client.PubKey(), pl) - if !bytes.Equal(bPush.FReceiver, hashRecv) { - t.Error("builder push error (hash receiver)") - return - } - - msg := message.LoadMessage(bPush.FPackage) - if msg == nil { - t.Error("builder push error (message is nil [1])") - return - } - - pubKey, pl, err := client.Decrypt(msg) - if err != nil { - t.Error("builder push error (message is nil [2])") - return - } - - if pl.Head() != uint64(testutils.TcHead) { - t.Error("builder push error (head is not equal)") - return - } - - if string(pl.Body()) != testutils.TcBody { - t.Error("builder push error (body is not equal)") - return - } - - if pubKey.Address().String() != client.PubKey().Address().String() { - t.Error("builder push error (public key is not equal)") - return - } -} diff --git a/cmd/hms/hmc/requester.go b/cmd/hms/hmc/requester.go deleted file mode 100644 index 8e6ffcba..00000000 --- a/cmd/hms/hmc/requester.go +++ /dev/null @@ -1,92 +0,0 @@ -package hmc - -import ( - "bytes" - "encoding/json" - "fmt" - "net/http" - - hms_settings "github.com/number571/go-peer/cmd/hms/settings" - "github.com/number571/go-peer/pkg/client/message" - "github.com/number571/go-peer/pkg/encoding" -) - -var ( - _ IRequester = &sRequester{} -) - -type sRequester struct { - fHost string -} - -func NewRequester(host string) IRequester { - return &sRequester{ - fHost: host, - } -} - -func (r *sRequester) Size(request *hms_settings.SSizeRequest) (uint64, error) { - resp, err := http.Post( - fmt.Sprintf(hms_settings.CSizeTemplate, r.fHost), - hms_settings.CContentType, - bytes.NewReader(encoding.Serialize(request)), - ) - if err != nil { - return 0, err - } - - var response hms_settings.SResponse - json.NewDecoder(resp.Body).Decode(&response) - - if response.FReturn != hms_settings.CErrorNone { - return 0, fmt.Errorf("%s", string(response.FResult)) - } - - res := [encoding.CSizeUint64]byte{} - copy(res[:], response.FResult) - return encoding.BytesToUint64(res), nil -} - -func (r *sRequester) Load(request *hms_settings.SLoadRequest) (message.IMessage, error) { - resp, err := http.Post( - fmt.Sprintf(hms_settings.CLoadTemplate, r.fHost), - hms_settings.CContentType, - bytes.NewReader(encoding.Serialize(request)), - ) - if err != nil { - return nil, err - } - - var response hms_settings.SResponse - json.NewDecoder(resp.Body).Decode(&response) - - if response.FReturn != hms_settings.CErrorNone { - return nil, fmt.Errorf("%s", string(response.FResult)) - } - - msg := message.LoadMessage(response.FResult) - if msg == nil { - return nil, fmt.Errorf("message is nil") - } - - return msg, nil -} - -func (r *sRequester) Push(request *hms_settings.SPushRequest) error { - resp, err := http.Post( - fmt.Sprintf(hms_settings.CPushTemplate, r.fHost), - hms_settings.CContentType, - bytes.NewReader(encoding.Serialize(request)), - ) - if err != nil { - return err - } - var response hms_settings.SResponse - json.NewDecoder(resp.Body).Decode(&response) - - if response.FReturn != hms_settings.CErrorNone { - return fmt.Errorf("%s", string(response.FResult)) - } - - return nil -} diff --git a/cmd/hms/hmc/types.go b/cmd/hms/hmc/types.go deleted file mode 100644 index 4e08faf5..00000000 --- a/cmd/hms/hmc/types.go +++ /dev/null @@ -1,26 +0,0 @@ -package hmc - -import ( - hms_settings "github.com/number571/go-peer/cmd/hms/settings" - "github.com/number571/go-peer/pkg/client/message" - "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/pkg/payload" -) - -type IClient interface { - Size() (uint64, error) - Load(uint64) (message.IMessage, error) - Push(asymmetric.IPubKey, payload.IPayload) error -} - -type IBuilder interface { - Size() *hms_settings.SSizeRequest - Load(uint64) *hms_settings.SLoadRequest - Push(asymmetric.IPubKey, payload.IPayload) *hms_settings.SPushRequest -} - -type IRequester interface { - Size(*hms_settings.SSizeRequest) (uint64, error) - Load(*hms_settings.SLoadRequest) (message.IMessage, error) - Push(*hms_settings.SPushRequest) error -} diff --git a/cmd/hms/hms_test.go b/cmd/hms/hms_test.go deleted file mode 100644 index 4db364f3..00000000 --- a/cmd/hms/hms_test.go +++ /dev/null @@ -1,172 +0,0 @@ -package main - -import ( - "fmt" - "net/http" - "os" - "testing" - "time" - - "github.com/number571/go-peer/cmd/hms/config" - "github.com/number571/go-peer/cmd/hms/database" - "github.com/number571/go-peer/cmd/hms/hmc" - hms_settings "github.com/number571/go-peer/cmd/hms/settings" - "github.com/number571/go-peer/pkg/client" - "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/pkg/payload" - testutils "github.com/number571/go-peer/test/_data" -) - -const ( - tcN = 3 -) - -const ( - tcPathDB = "hms_test.db" - tcPathConfig = "hms_test.cfg" -) - -var ( - tgHost = fmt.Sprintf("http://%s", testutils.TgAddrs[16]) -) - -func testHmsDefaultInit(dbPath, configPath string) { - os.RemoveAll(dbPath) - - gDB = database.NewKeyValueDB(dbPath) - gConfig = config.NewConfig(configPath) -} - -func TestHMS(t *testing.T) { - testHmsDefaultInit(tcPathDB, tcPathConfig) - defer func() { - gDB.Close() - os.RemoveAll(tcPathDB) - os.Remove(tcPathConfig) - }() - - // server - srv := testStartServerHTTP(t) - defer srv.Close() - - // client push - time.Sleep(200 * time.Millisecond) - err := testClientDoPush() - if err != nil { - t.Error(err) - return - } - - // client size - err = testClientDoSize() - if err != nil { - t.Error(err) - return - } - - // client load - err = testClientDoLoad() - if err != nil { - t.Error(err) - return - } -} - -func testStartServerHTTP(t *testing.T) *http.Server { - mux := http.NewServeMux() - - mux.HandleFunc("/", indexPage) - mux.HandleFunc("/size", sizePage) - mux.HandleFunc("/load", loadPage) - mux.HandleFunc("/push", pushPage) - - srv := &http.Server{ - Addr: testutils.TgAddrs[16], - Handler: mux, - } - - go func() { - srv.ListenAndServe() - }() - - return srv -} - -func testClientDoPush() error { - client := testNewClient() - - for i := 0; i < tcN; i++ { - err := hmc.NewClient( - hmc.NewBuilder(client), - hmc.NewRequester(tgHost), - ).Push( - client.PubKey(), - payload.NewPayload( - 0x01, - []byte(fmt.Sprintf(testutils.TcBodyTemplate, i)), - ), - ) - if err != nil { - return err - } - } - - return nil -} - -func testClientDoSize() error { - client := testNewClient() - - size, err := hmc.NewClient( - hmc.NewBuilder(client), - hmc.NewRequester(tgHost), - ).Size() - if err != nil { - return err - } - - if size != tcN { - return fmt.Errorf("num(%d) != tcN(%d)", size, tcN) - } - - return nil -} - -func testClientDoLoad() error { - client := testNewClient() - - for i := 0; i < tcN; i++ { - msg, err := hmc.NewClient( - hmc.NewBuilder(client), - hmc.NewRequester(tgHost), - ).Load(uint64(i)) - if err != nil { - return err - } - - pubKey, pld, err := client.Decrypt(msg) - if err != nil { - panic(err) - } - - if string(pld.Body()) != fmt.Sprintf(testutils.TcBodyTemplate, i) { - return fmt.Errorf("body is not equal") - } - - if pubKey.Address().String() != client.PubKey().Address().String() { - return fmt.Errorf("public key is not equal") - } - } - - return nil -} - -func testNewClient() client.IClient { - return client.NewClient( - client.NewSettings(&client.SSettings{ - FWorkSize: hms_settings.CSizeWork, - FMessageSize: hms_settings.CSizePack, - }), - asymmetric.LoadRSAPrivKey(testutils.TcPrivKey), - ) -} diff --git a/cmd/hms/init.go b/cmd/hms/init.go deleted file mode 100644 index 935231a6..00000000 --- a/cmd/hms/init.go +++ /dev/null @@ -1,41 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "os" - "time" - - "github.com/number571/go-peer/cmd/hms/config" - "github.com/number571/go-peer/cmd/hms/database" - "github.com/robfig/cron/v3" -) - -func hmsDefaultInit() error { - var ( - initOnly bool - ) - - flag.BoolVar(&initOnly, "init", false, "run initialization only") - flag.Parse() - - gConfig = config.NewConfig("hms.cfg") - gDB = database.NewKeyValueDB("hms.db") - - jakartaTime, err := time.LoadLocation("Asia/Jakarta") - if err != nil { - return err - } - - scheduler := cron.New(cron.WithLocation(jakartaTime)) - scheduler.AddFunc(gConfig.CleanCron(), func() { - gDB.Clean() - }) - - if initOnly { - os.Exit(0) - } - - fmt.Printf("Service is listening [%s]...\n", gConfig.Address()) - return nil -} diff --git a/cmd/hms/main.go b/cmd/hms/main.go deleted file mode 100644 index 72a7a1f8..00000000 --- a/cmd/hms/main.go +++ /dev/null @@ -1,48 +0,0 @@ -// HMS - Hidden Message Service -package main - -import ( - "fmt" - "net/http" - "os" - "os/signal" - "syscall" - - hms_settings "github.com/number571/go-peer/cmd/hms/settings" - "github.com/number571/go-peer/pkg/closer" - "github.com/number571/go-peer/pkg/types" -) - -func main() { - err := hmsDefaultInit() - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - shutdown := make(chan os.Signal, 1) - signal.Notify(shutdown, syscall.SIGINT, syscall.SIGTERM) - - mux := http.NewServeMux() - - mux.HandleFunc("/", indexPage) - mux.HandleFunc(hms_settings.CSizePath, sizePage) - mux.HandleFunc(hms_settings.CLoadPath, loadPage) - mux.HandleFunc(hms_settings.CPushSize, pushPage) - - srv := &http.Server{ - Addr: gConfig.Address(), - Handler: mux, - } - - go func() { - err := srv.ListenAndServe() - if err != nil { - fmt.Println(err) - } - }() - - <-shutdown - fmt.Println("Shutting down...") - closer.CloseAll([]types.ICloser{srv, gDB}) -} diff --git a/cmd/hms/pages.go b/cmd/hms/pages.go deleted file mode 100644 index 6f19ea31..00000000 --- a/cmd/hms/pages.go +++ /dev/null @@ -1,117 +0,0 @@ -package main - -import ( - "encoding/json" - "net/http" - - "github.com/number571/go-peer/cmd/hms/hmc" - hms_settings "github.com/number571/go-peer/cmd/hms/settings" - "github.com/number571/go-peer/pkg/client/message" - "github.com/number571/go-peer/pkg/crypto/puzzle" - "github.com/number571/go-peer/pkg/encoding" -) - -func indexPage(w http.ResponseWriter, r *http.Request) { - response(w, hms_settings.CErrorNone, []byte(hms_settings.CTitlePattern)) -} - -func sizePage(w http.ResponseWriter, r *http.Request) { - var vRequest hms_settings.SSizeRequest - - if r.Method != "POST" { - response(w, hms_settings.CErrorMethod, []byte("failed: incorrect method")) - return - } - - err := json.NewDecoder(r.Body).Decode(&vRequest) - if err != nil { - response(w, hms_settings.CErrorDecode, []byte("failed: decode request")) - return - } - - size, err := gDB.Size(vRequest.FReceiver) - if err != nil { - response(w, hms_settings.CErrorLoad, []byte("failed: load size")) - return - } - - res := encoding.Uint64ToBytes(size) - response(w, hms_settings.CErrorNone, res[:]) -} - -func loadPage(w http.ResponseWriter, r *http.Request) { - var vRequest hms_settings.SLoadRequest - - if r.Method != "POST" { - response(w, hms_settings.CErrorMethod, []byte("failed: incorrect method")) - return - } - - err := json.NewDecoder(r.Body).Decode(&vRequest) - if err != nil { - response(w, hms_settings.CErrorDecode, []byte("failed: decode request")) - return - } - - msg, err := gDB.Load(vRequest.FReceiver, vRequest.FIndex) - if err != nil { - response(w, hms_settings.CErrorLoad, []byte("failed: load message")) - return - } - - response(w, hms_settings.CErrorNone, msg.Bytes()) -} - -func pushPage(w http.ResponseWriter, r *http.Request) { - var vRequest hms_settings.SPushRequest - - if r.Method != "POST" { - response(w, hms_settings.CErrorMethod, []byte("failed: incorrect method")) - return - } - - err := json.NewDecoder(r.Body).Decode(&vRequest) - if err != nil { - response(w, hms_settings.CErrorDecode, []byte("failed: decode request")) - return - } - - if uint64(len(vRequest.FPackage)) > hms_settings.CSizePack { - response(w, hms_settings.CErrorPackSize, []byte("failed: incorrect package size")) - return - } - - msg := message.LoadMessage(vRequest.FPackage) - if msg == nil { - response(w, hms_settings.CErrorMessage, []byte("failed: decode message")) - return - } - - puzzle := puzzle.NewPoWPuzzle(hms_settings.CSizeWork) - if !puzzle.Verify(msg.Body().Hash(), msg.Body().Proof()) { - response(w, hms_settings.CErrorWorkSize, []byte("failed: incorrect work size")) - return - } - - err = gDB.Push(vRequest.FReceiver, msg) - if err != nil { - response(w, hms_settings.CErrorPush, []byte("failed: push message")) - return - } - - go func() { - for _, host := range gConfig.Connections() { - hmc.NewRequester(host).Push(&vRequest) - } - }() - - response(w, hms_settings.CErrorNone, []byte("success")) -} - -func response(w http.ResponseWriter, ret int, res []byte) { - w.Header().Set("Content-Type", hms_settings.CContentType) - json.NewEncoder(w).Encode(&hms_settings.SResponse{ - FResult: res, - FReturn: ret, - }) -} diff --git a/cmd/hms/settings.go b/cmd/hms/settings.go deleted file mode 100644 index d490ae43..00000000 --- a/cmd/hms/settings.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -import ( - "github.com/number571/go-peer/cmd/hms/config" - "github.com/number571/go-peer/cmd/hms/database" -) - -var ( - gConfig config.IConfig - gDB database.IKeyValueDB -) diff --git a/cmd/hms/settings/settings.go b/cmd/hms/settings/settings.go deleted file mode 100644 index 522ecc32..00000000 --- a/cmd/hms/settings/settings.go +++ /dev/null @@ -1,34 +0,0 @@ -package settings - -const ( - CTitlePattern = "go-peer/hidden-message-service" - CContentType = "application/json" -) - -const ( - CSizePath = "/size" - CLoadPath = "/load" - CPushSize = "/push" -) - -const ( - CSizeTemplate = "%s" + CSizePath - CLoadTemplate = "%s" + CLoadPath - CPushTemplate = "%s" + CPushSize -) - -const ( - CSizeWork = 20 // bits - CSizePack = (8 << 20) // 8MiB -) - -const ( - CErrorNone = iota + 1 - CErrorMethod - CErrorDecode - CErrorLoad - CErrorPush - CErrorMessage - CErrorPackSize - CErrorWorkSize -) diff --git a/cmd/hms/settings/types.go b/cmd/hms/settings/types.go deleted file mode 100644 index 75509830..00000000 --- a/cmd/hms/settings/types.go +++ /dev/null @@ -1,20 +0,0 @@ -package settings - -type SResponse struct { - FResult []byte `json:"result"` - FReturn int `json:"return"` -} - -type SSizeRequest struct { - FReceiver []byte `json:"receiver"` -} - -type SLoadRequest struct { - FReceiver []byte `json:"receiver"` - FIndex uint64 `json:"index"` -} - -type SPushRequest struct { - FReceiver []byte `json:"receiver"` - FPackage []byte `json:"package"` -} diff --git a/cmd/akg/.gitignore b/cmd/tools/akg/.gitignore similarity index 100% rename from cmd/akg/.gitignore rename to cmd/tools/akg/.gitignore diff --git a/cmd/akg/Makefile b/cmd/tools/akg/Makefile similarity index 100% rename from cmd/akg/Makefile rename to cmd/tools/akg/Makefile diff --git a/cmd/akg/README.md b/cmd/tools/akg/README.md similarity index 100% rename from cmd/akg/README.md rename to cmd/tools/akg/README.md diff --git a/cmd/akg/akg_test.go b/cmd/tools/akg/akg_test.go similarity index 100% rename from cmd/akg/akg_test.go rename to cmd/tools/akg/akg_test.go diff --git a/cmd/akg/main.go b/cmd/tools/akg/main.go similarity index 100% rename from cmd/akg/main.go rename to cmd/tools/akg/main.go diff --git a/cmd/cds/.gitignore b/cmd/tools/cds/.gitignore similarity index 100% rename from cmd/cds/.gitignore rename to cmd/tools/cds/.gitignore diff --git a/cmd/cds/Makefile b/cmd/tools/cds/Makefile similarity index 100% rename from cmd/cds/Makefile rename to cmd/tools/cds/Makefile diff --git a/cmd/cds/README.md b/cmd/tools/cds/README.md similarity index 100% rename from cmd/cds/README.md rename to cmd/tools/cds/README.md diff --git a/cmd/cds/cds_test.go b/cmd/tools/cds/cds_test.go similarity index 100% rename from cmd/cds/cds_test.go rename to cmd/tools/cds/cds_test.go diff --git a/cmd/cds/data.txt b/cmd/tools/cds/data.txt similarity index 100% rename from cmd/cds/data.txt rename to cmd/tools/cds/data.txt diff --git a/cmd/cds/main.go b/cmd/tools/cds/main.go similarity index 100% rename from cmd/cds/main.go rename to cmd/tools/cds/main.go diff --git a/cmd/cds/password.txt b/cmd/tools/cds/password.txt similarity index 100% rename from cmd/cds/password.txt rename to cmd/tools/cds/password.txt diff --git a/docs/abstract_anonymous_networks.docx b/docs/abstract_anonymous_networks.docx index b2c3e2c8..a5274bab 100644 Binary files a/docs/abstract_anonymous_networks.docx and b/docs/abstract_anonymous_networks.docx differ diff --git a/docs/monolithic_cryptographic_protocol.docx b/docs/monolithic_cryptographic_protocol.docx index 9cf2d664..1747269c 100644 Binary files a/docs/monolithic_cryptographic_protocol.docx and b/docs/monolithic_cryptographic_protocol.docx differ diff --git a/docs/monolithic_cryptographic_protocol.pdf b/docs/monolithic_cryptographic_protocol.pdf index 54e87d22..ea51e171 100644 Binary files a/docs/monolithic_cryptographic_protocol.pdf and b/docs/monolithic_cryptographic_protocol.pdf differ diff --git a/docs/theory_of_the_structure_of_hidden_systems.docx b/docs/theory_of_the_structure_of_hidden_systems.docx index 0ee46f37..0d68dfbc 100644 Binary files a/docs/theory_of_the_structure_of_hidden_systems.docx and b/docs/theory_of_the_structure_of_hidden_systems.docx differ diff --git a/docs/theory_of_the_structure_of_hidden_systems.pdf b/docs/theory_of_the_structure_of_hidden_systems.pdf index dd86ae0d..f414a2ee 100644 Binary files a/docs/theory_of_the_structure_of_hidden_systems.pdf and b/docs/theory_of_the_structure_of_hidden_systems.pdf differ diff --git a/examples/_cmd/anon_messenger/Makefile b/examples/_cmd/anon_messenger/Makefile index b9a4c6c1..5d37af3b 100644 --- a/examples/_cmd/anon_messenger/Makefile +++ b/examples/_cmd/anon_messenger/Makefile @@ -8,18 +8,18 @@ init: pkill --version build: # MAKEFILE BUILD - make build -C ../../../cmd/hls - make build -C ../../../cmd/hlm + make build -C ../../../cmd/hidden_lake/service + make build -C ../../../cmd/hidden_lake/messenger # COPY HLS PROGRAM - cp ../../../cmd/hls/hls ./middle_hls/prog_hls - cp ../../../cmd/hls/hls ./node1_hlm/prog_hls1 - cp ../../../cmd/hls/hls ./node2_hlm/prog_hls2 + cp ../../../cmd/hidden_lake/service/hls ./middle_hls/prog_hls + cp ../../../cmd/hidden_lake/service/hls ./node1_hlm/prog_hls1 + cp ../../../cmd/hidden_lake/service/hls ./node2_hlm/prog_hls2 # COPY HLM PROGRAM - cp ../../../cmd/hlm/hlm ./node1_hlm/prog_hlm1 - cp ../../../cmd/hlm/hlm ./node2_hlm/prog_hlm2 + cp ../../../cmd/hidden_lake/messenger/hlm ./node1_hlm/prog_hlm1 + cp ../../../cmd/hidden_lake/messenger/hlm ./node2_hlm/prog_hlm2 # COPY HLM WEB - cp -r ../../../cmd/hlm/web ./node1_hlm - cp -r ../../../cmd/hlm/web ./node2_hlm + cp -r ../../../cmd/hidden_lake/messenger/web ./node1_hlm + cp -r ../../../cmd/hidden_lake/messenger/web ./node2_hlm run: # MAKEFILE RUN make run -C middle_hls diff --git a/examples/_cmd/anon_messenger/middle_hls/Makefile b/examples/_cmd/anon_messenger/middle_hls/Makefile index edce676d..cf20cca6 100644 --- a/examples/_cmd/anon_messenger/middle_hls/Makefile +++ b/examples/_cmd/anon_messenger/middle_hls/Makefile @@ -2,7 +2,7 @@ GC=go build .PHONY: default run clean default: clean run run: - ./prog_hls --key priv.key & + ./prog_hls & sleep 8 clean: pkill prog_hls || true diff --git a/examples/_cmd/anon_messenger/middle_hls/hls.cfg b/examples/_cmd/anon_messenger/middle_hls/hls.cfg index b0e603d7..bf3e0b8c 100644 --- a/examples/_cmd/anon_messenger/middle_hls/hls.cfg +++ b/examples/_cmd/anon_messenger/middle_hls/hls.cfg @@ -1,5 +1,5 @@ { - "logging": true, + "logging": ["info", "warn", "erro"], "address": { "tcp": "localhost:9571" } diff --git a/examples/_cmd/anon_messenger/middle_hls/priv.key b/examples/_cmd/anon_messenger/middle_hls/priv.key deleted file mode 100644 index 4d9b1195..00000000 --- a/examples/_cmd/anon_messenger/middle_hls/priv.key +++ /dev/null @@ -1 +0,0 @@ -Priv(go-peer/rsa){308209290201000282020100C62F3CFA3D9809EE6DD77EBBFD38BC6796ABA76B795B3C76D3449F0AC808E01EDA8B2B08C58E508C306B2D842A2D317FF6B6D4A13EB76C7BBD5B157B663C3390B227476F4985EF649510D8CCA38FAB9FFCD67916FE73DB77595AB64FBE66D85892708A2DBCA94447A628F183FA6328136FCF158688CB6664EBA91F4C41621741786D50E3286AF9CAB81C101BDB19ACF42E10041CFDA5C6F30ACBBC4251E3D13C0E0781CBDC622E4ED490DD76BBA04D0A9C0012EBDAA77BD9F23183205A9D533C95A6C1FAAD8AB7C3B21FA4C76F7A3FB8EAEB231083ED925C1F71D23671E8C90E460C673A0DCD82ECFA956DF315200554571A99D79EB1E744681B9652389DBA6B9937CE476EBCAC34D02AEACF381DA40469B2F23E4F3DBFD5D8E04031708E46C31E3DC94342298E6F83CF7869C1209ACE2EA04FDB011D0FE265C8D51CF7D90C947160415B3415DFF9D1B16D5A9961F896109223B1408E740C421C6F413FA7B3D7094144DE4A0211DCAF043BC1A9FDE120251CBD654E705795D692A912F0543FF2F13EC733BD1E3AB83B915F95D3540EAA809C1E6E8C248A1EA1AE1D3B29C804F855167F64DA0AB06E5D89080D77D95A6E7199B079925922EA8735DF7654A01B350D67472F25B79DE5FF65B7E9156AEFC8818A1D9216BC4BE527DDC7D88F249B8745CF7DF1610A8237EB4BC1325C64FF47BD34B32CFE59720EC7FB52608D9009C70203010001028202000C1BAEBA0B3152CA0263FC16382E533470FC23CA692BADD204AE58992C077EC9E3C844E4D04D1596BB0E914555DE54FBE072E322C6D6260699570B44F2C612D07051FE074A92A84198E9E294FE1934FF1D4F6D2E7E754D9F491245B93184CF0AFA476DE9C57101FEEEA3E9BD8A7AAC64239C9F500CE3806A020BDF21A58CFCA6BF58CE6C5277D6B30FF486F76CB770DDAA42C83D8D31A7AA09AAD0E1AC6722CD6C7E00EC1796D80570EF38D89C35FAFEFEF0F236FEB0E4DC37F3D6730F963513AA80F9B0FB115290DE3D18B0269B6D713AC90AE763680C5D1C7EB3BD27D075182E276BD71C28C62AFC544CD7611F07B4536E08A027CDEEB73B35144609B7794026215127C65E10EF24541F8F9CB6580EA10B7A5569CC68F310D1F149AFDCE246B2D6E3BEFD31E330760E2AA275C0E014F8122B95CAD4E272C5D4992230A538ABD4360A028C729B3BB8ED3FE306BF7F82C05FBB6AB45906C879D8F80C4991515F86C0F46178A5E99D61F6341A41A6BA9C2B6C7E62A0FDFC0CD62E7A87139435C72994610C47405547B8241EBAE1F281FFBA56F9C2A9E79AF8CFDF5C0C04FB40EBEB331BB80D11EFBF55A845F0C0BFCD6B4D2C79884E0E1CC6F8F1F226F68F0DC15905BE85D9459F082BADBF3D4624E79D0930946C5724FBCFE6A67CDC783ED95133828F7C51BB5915FB5F6B84AEB80A036F33653287D68F735CDE5057B8064A010282010100E51BBE370F1B82489920B74453203702F00C9F4F1B6E6B3D145DA7B800966EC97E702ED709DB6743A678111577584C06AE03CE34981160D52243FB9431F17296CCB8588983D7F83A995845A4E4DD2297B422F61CFDA5718D2AA6B1C3D91E55B1315F41C1715617B62F3C33F9ACD7368E26DB623EF3217E0B6293CA772BEB8A27E0BD73B805C9546E976C8E74D263FD79560F28187A4CE8156BAC397D96CA68D439913ECC8A47D2AE8FF988DB60ABD2F3C8337AF0AD33DC8ED73DB7C1B673DA31B07C5155A3BD3967AE6A2B1CB4F65EEF30AD922568AE29D71FFB64B4B3E21EAD51DCA8A7F9067A0FB3757DCA283327AEF8D9D76F8B2860DF855AE58E0DC503870282010100DD724B53AA306CD9B87E50F855E761F250DA06277529F1A8413FB62A154532890682C2B5D06AC59526D3E82F2E345EC5F54927E2DE015F48112D7391DDB9FEAFD72C7FABAE60B4F5F06C07366E8A0FE759F94B16F634410EC793490BBF2D5E180665C69A1864395D4167FE8B8566547473DAF153EB40B79A2AA408F66BF7959C0C714D4DA9BCF4183111B5510A4FB80CD43124C6DFD3BDA1326A7E816895667CD7CF7CBFA54EF6382B3021459C6295DBADC2DF0B1865491A1B52BF0C4AED521F51362DA0BEE10DEFF3007A7285A79A2FF639884BF8E7539CD59B10DB68FC505942BBA8177555F213FC28AF119E89C578FA22D32D6655AF1C920E5153E1DED7C10282010100985427D687CEEC82C47D421CC58027D366339E4084A697DA968DE693AAA05AACD1CA58FA54ED71ED42E395C845FF891CEFDA4BE220317DC677EFE77792F54C1103B095FD6891D1D3745D8280AE42715B98439E8B8C01D24BDFCDD167BC16353788F222D03140E2A71924D811EB5F744073896DFB18C06E03B7D937C6A0870CE692C0A40DF89AF1EE4DF3B98BE6CEE09B2A230DAFA8B135A5F85F1C226A7DCDD13D2D5B29B7CF253F372EDC55B022CE31942CD652EB760DF1531F0FEC5619153BF071D7CA2F020306F2AA585BCFDDF724E5A2A2070960B324FB78B46E892390EDFFFDCC8D523F822CAA4F36019154E1CFAE5978AA0B461F92BE21BF7B01A0BA450282010100C1E186A7FAB2A92ABA0806165707DD4E8D9145A018499FE5A33307E7B275C2380C364209732F784C0D11AD1059D0CA45616B2A7BCBC9C1C5541CCA39A4BA6A8D43C417079605DF8A107454A04889A240F91A75AEE5E27C2F5776D196724C633C7FA56E0B8E5D7987F772F87EE94DDD9593B5D66295EF3490CAD2917246B71F0AE02DF6F38F2FFB3A8F03A50F0E0B1BE64785BB604FA9903668F0AA4FDCE4293616B0F7D4C703EA38E53F1F7255E84EB26660DE6D556FA0603619ED60F2DCF370ADE6D46E0F90F565E708BD2C356EB765549BAC846FA90120A8383ABB0F2111AC04EC4DD034100A818ADD87E1D23F676073083882603D96B25A02251C5EFE7F41028201001F90EEFCA05DBF1439CE2F7B2E1A3FE4A551238EEF4EECD53B46D12D136896B00B91BFB6ECFBDBCFEB3737B082D5C93A4146A61E58879DC66B445C84215F3E76B06D23323CE2D20775FCB66F1F013CC42AC8DE870812FA347C7D66EBD70117B00D4074AEEEFA8D0D59E8CD83734989064DF5D0F5565C179F4FA0CA8BE30959B530B7D768C31CC435748F194C4A31E1E8CBCCDC3FBA3D03F37C1B582E5D9E0C8768820098459F8F8703F5016680B0E756541834C4A54393D91683A57FE2E9CC2986BA3B4BF0387A4E69D83B878887C1C4F117274F9C20A142AA23C415241780D15BE316720716AC57D5343C1085F06D49EAD304B24DB756BAB196C0CD270EBA98} \ No newline at end of file diff --git a/examples/_cmd/anon_messenger/middle_hls/pub.key b/examples/_cmd/anon_messenger/middle_hls/pub.key deleted file mode 100644 index 87ebb6f3..00000000 --- a/examples/_cmd/anon_messenger/middle_hls/pub.key +++ /dev/null @@ -1 +0,0 @@ -Pub(go-peer/rsa){3082020A0282020100C62F3CFA3D9809EE6DD77EBBFD38BC6796ABA76B795B3C76D3449F0AC808E01EDA8B2B08C58E508C306B2D842A2D317FF6B6D4A13EB76C7BBD5B157B663C3390B227476F4985EF649510D8CCA38FAB9FFCD67916FE73DB77595AB64FBE66D85892708A2DBCA94447A628F183FA6328136FCF158688CB6664EBA91F4C41621741786D50E3286AF9CAB81C101BDB19ACF42E10041CFDA5C6F30ACBBC4251E3D13C0E0781CBDC622E4ED490DD76BBA04D0A9C0012EBDAA77BD9F23183205A9D533C95A6C1FAAD8AB7C3B21FA4C76F7A3FB8EAEB231083ED925C1F71D23671E8C90E460C673A0DCD82ECFA956DF315200554571A99D79EB1E744681B9652389DBA6B9937CE476EBCAC34D02AEACF381DA40469B2F23E4F3DBFD5D8E04031708E46C31E3DC94342298E6F83CF7869C1209ACE2EA04FDB011D0FE265C8D51CF7D90C947160415B3415DFF9D1B16D5A9961F896109223B1408E740C421C6F413FA7B3D7094144DE4A0211DCAF043BC1A9FDE120251CBD654E705795D692A912F0543FF2F13EC733BD1E3AB83B915F95D3540EAA809C1E6E8C248A1EA1AE1D3B29C804F855167F64DA0AB06E5D89080D77D95A6E7199B079925922EA8735DF7654A01B350D67472F25B79DE5FF65B7E9156AEFC8818A1D9216BC4BE527DDC7D88F249B8745CF7DF1610A8237EB4BC1325C64FF47BD34B32CFE59720EC7FB52608D9009C70203010001} \ No newline at end of file diff --git a/examples/_cmd/anon_messenger/node1_hlm/priv.key b/examples/_cmd/anon_messenger/node1_hlm/priv.key deleted file mode 100644 index 1241d86d..00000000 --- a/examples/_cmd/anon_messenger/node1_hlm/priv.key +++ /dev/null @@ -1 +0,0 @@ -Priv(go-peer/rsa){308209280201000282020100B752D35E81F4AEEC1A9C42EDED16E8924DD4D359663611DE2DCCE1A9611704A697B26254DD2AFA974A61A2CF94FAD016450FEF22F218CA970BFE41E6340CE3ABCBEE123E35A9DCDA6D23738DAC46AF8AC57902DDE7F41A03EB00A4818137E1BF4DFAE1EEDF8BB9E4363C15FD1C2278D86F2535BC3F395BE9A6CD690A5C852E6C35D6184BE7B9062AEE2AFC1A5AC81E7D21B7252A56C62BB5AC0BBAD36C7A4907C868704985E1754BAA3E8315E775A51B7BDC7ACB0D0675D29513D78CB05AB6119D3CA0A810A41F78150E3C5D9ACAFBE1533FC3533DECEC14387BF7478F6E229EB4CC312DC22436F4DB0D4CC308FB6EEA612F2F9E00239DE7902DE15889EE71370147C9696A5E7B022947ABB8AFBBC64F7840BED4CE69592CAF4085A1074475E365ED015048C89AE717BC259C42510F15F31DA3F9302EAD8F263B43D14886B2335A245C00871C041CBB683F1F047573F789673F9B11B6E6714C2A3360244757BB220C7952C6D3D9D65AA47511A63E2A59706B7A70846C930DCFB3D8CAFB3BD6F687CACF5A708692C26B363C80C460F54E59912D41D9BB359698051ABC049A0D0CFD7F23DC97DA940B1EDEAC6B84B194C8F8A56A46CE69EE7A0AEAA11C99508A368E64D27756AD0BA7146A6ADA3D5FA237B3B4EDDC84B71C27DE3A9F26A42197791C7DC09E2D7C4A7D8FCDC8F9A5D4983BB278FCE9513B1486D18F8560C3F31CC702030100010282020071714CA16013F526DFF4B0AA211C1B01662E7C37073C106487BD102BCB8BFDF1C54FBAEFBF093896E48D74BDB5F85B4A5CA4569C2E6A4EFB978D586446F36EF3C1B76A0C9B12A93B756C09B6B2D3EF0F15D22387046196B3B3F9EAD2C50EBAA0B275BCD81FF78C29FFB1C0FDA72A61D3B53BB67BEE37E57BBA1FC48F87DF5671DA02C9783745D4DE3E11D57DCD8DA6E85233CE48DBF7B7D6AD4778EE1A63B5CB9E259ACEB48D6713529F6A68E49975798375557B4F6D1EFE1808764B765A3BEEBC796705797EC6867DA9188BE81D122F465FDFD4242EF78C2FC3EEAA96C455A2164981694A893484E304E0EA94255B66A88B1591558EB4C935FC5E4576DD59AADEA5F24C3182C6F15D0AC03C33EACD988D4A461567D64BB0860D653CD1FC3CF0E3931475DE81C60D3F0417695ECB98A5D98AD4949BAB1FFB3F8D47EEA6657397E87E9D944E0FEEC01EECC262468A691BDF837192FFE5DFEA31E25E34BC34026517796947C4392EA054C95F795D451DCC2BA3474EE660E0B750EF2840AF08664D7C40DD63911F53D4B42FE58E1D1CF5447D235C748A2527EFC269C3E177F4AEFCC4CF9800EE6E677379F4A21FC403AF059AB6DB6B46391DD42C249EA01EB9C61C3658DCE7DD9EF999C8E24FF4A144AF407B01959D16FF69433CC3027161C40C11496C70C67C7769C4A06F17019CE1F904D538789BC245E3264B67AF04BA53CD790282010100E3F6F06E9B3E5989BF3ED2280D37FF0A841F5C6E038038C81CC965B2F484EEEBC7906DF20AAA41C21CDBBB93C34B4B1C9592A61EE7B58517CDD03A7714007DDAD4B9234ECF2F3A5037F3BF939EFADBB0F64A598D5F83BA486FD18EE0527AA377153CE48DE6A1595414487C319BCC862979CC9038CC2212D84A515C7F624FA8158097C1414DFE5769111CFBFEFD005F0A576B5DFC556EF8F28F2C3C2DC6A923633FEFB3F70AA85C8FD73CA6E185C21570042AD6428842100F4EFC54D3CB3D98FF663C945DC0B2AE34C7838C4DDCDB5F31CE1AFB3BF1654A5C43F322E17C314EE88DA66E98442B60401D112C8247E9DC2EA86C42EBB65427F0F0A4C2CDD7A63B850282010100CDDE71139488AAF431C71101D8D6E0CB656BA0EF311910E5A32CC00151817D406C38E908C43589588EED06111E1D5216C7B1CCB055E528CE01528757A0AC98BE1322B4374F73F6A92F5965A698D9EEF658A3946CC3AFA2B4D2244FE4B21671286BE2A230288CEDA4181A8FAFCD8D23479B5F391576E217C6766D77CBA96DD4EA4A8E97FA40570D566F7CD4FB300628C2E91EB2B89B75C0CC4AFDDBB6AC8BD6B5D7B7771D61D249A6422C05ED8AB087E7C190F7AD20899F5F7DEB435F76DE5F9D0613744659A51A11BC7F97C95A815799B82A07F242B4F78BB88A162060E969089C56B8FDDE2B428CEB93BDE94CE37EAECFF4630DFAF0FD6351A68D3E792F0ADB0282010009FC8C65DC092C34FB9ACDEC11402DBD1132AA82EB4657B67484621F27D516FE5F3CB5844FF14B762C7B77C92E5A030D5A841520EF77A53FF8B5318A7BE6D59C9B8B0CBFEC159E915B1223875D0492513B48E0896FF0BE5D6400A328B2944ACAF1B43C32F732844E49A12F47A112A1A1F982FBA27156E0CA76DEFF9559023253D6D14F17044AAB1BA0334BDACCCC925D4A9D1A7DEE643125B71DF1F8F365FF75DE9C2A9F1CE9693CA7EA314959E9B9B4B18A0ADED947439AD813F7C75B74F459E3E9AD7A39F1D9EDD7FBAC4ED0E90F4F883EE858A4E7920D5EB0AD0B81BC4B3FA6CCEEB55EEF23854B80B01978FB06B948898D98F3E0D5EB192FAE9503E8755D028201003B41BBEA96E67FCEAA45526FE5AA742A1797534B862660E6B88139032822CD9AAD8BF407C1F26706469D93117A4996475853A5475C7209BCC244AF1059FF5437E1EA2B55805930B6A21A6957FAC7403148724D56C13CDCE88F54446ADF97F61A5C736F9BCD104396E8193D22AD57E2BFC9C92EF52EB30584EAB1B7B9B79B159E1AB7D0A707BE06E8CA4E743F99232CB86DC1984FEAEF89FF43D6AE57767309EA6D9D317C139C23F6E73524BFAB1C05028084E9C5BB87E187EB06BCEDCD99548C2E238B6474894167B98A407684C69620791220176B7C0B84FC2943152ED0009BA9E48C7B06680D4FE2BF33FAE356D830194B8EF78733B6BBCFD4D0F31A8E9FE10282010100CCBC84560C368408205FD9F564F054BB8BDFF143E29EC426A5A1C3775801BE71822B1BCCF24B9808EE39143F664F5425ECB68E342AAB8DC44377AB719DFE103B8FF418B0841BE6C96987845C92997AA06EB0EE6ECE1F691867358735E5A1DF2965DED9A84A0BF90DC853DB1D8D6DBD0BC5C52073070493F4047FEC326F35C25716ED521EB18EE1E54014C8ADB3B561BD3B07625C2208638A2BF950E785CC9322399658A4DAD14ADDBDA188EE41193C1B02F9515D429844298A2352A7F809AB6DA9CA61AEB28B7B6A6CC2B5ED19F90DAAD04B7986ECCF41130A5FDBF77BA94D3099F5A275D4A3A3FE6962081CBAB5975457D32D96BD3E9B947E5AA999C1BC8CB2} \ No newline at end of file diff --git a/examples/_cmd/anon_messenger/node1_hlm/pub.key b/examples/_cmd/anon_messenger/node1_hlm/pub.key deleted file mode 100644 index 022476e9..00000000 --- a/examples/_cmd/anon_messenger/node1_hlm/pub.key +++ /dev/null @@ -1 +0,0 @@ -Pub(go-peer/rsa){3082020A0282020100B752D35E81F4AEEC1A9C42EDED16E8924DD4D359663611DE2DCCE1A9611704A697B26254DD2AFA974A61A2CF94FAD016450FEF22F218CA970BFE41E6340CE3ABCBEE123E35A9DCDA6D23738DAC46AF8AC57902DDE7F41A03EB00A4818137E1BF4DFAE1EEDF8BB9E4363C15FD1C2278D86F2535BC3F395BE9A6CD690A5C852E6C35D6184BE7B9062AEE2AFC1A5AC81E7D21B7252A56C62BB5AC0BBAD36C7A4907C868704985E1754BAA3E8315E775A51B7BDC7ACB0D0675D29513D78CB05AB6119D3CA0A810A41F78150E3C5D9ACAFBE1533FC3533DECEC14387BF7478F6E229EB4CC312DC22436F4DB0D4CC308FB6EEA612F2F9E00239DE7902DE15889EE71370147C9696A5E7B022947ABB8AFBBC64F7840BED4CE69592CAF4085A1074475E365ED015048C89AE717BC259C42510F15F31DA3F9302EAD8F263B43D14886B2335A245C00871C041CBB683F1F047573F789673F9B11B6E6714C2A3360244757BB220C7952C6D3D9D65AA47511A63E2A59706B7A70846C930DCFB3D8CAFB3BD6F687CACF5A708692C26B363C80C460F54E59912D41D9BB359698051ABC049A0D0CFD7F23DC97DA940B1EDEAC6B84B194C8F8A56A46CE69EE7A0AEAA11C99508A368E64D27756AD0BA7146A6ADA3D5FA237B3B4EDDC84B71C27DE3A9F26A42197791C7DC09E2D7C4A7D8FCDC8F9A5D4983BB278FCE9513B1486D18F8560C3F31CC70203010001} \ No newline at end of file diff --git a/examples/_cmd/anon_messenger/node2_hlm/priv.key b/examples/_cmd/anon_messenger/node2_hlm/priv.key deleted file mode 100644 index 07f523c1..00000000 --- a/examples/_cmd/anon_messenger/node2_hlm/priv.key +++ /dev/null @@ -1 +0,0 @@ -Priv(go-peer/rsa){308209270201000282020100C17B6FA53983050B0339A0AB60D20A8A5FF5F8210564464C45CD2FAC2F266E8DDBA3B36C6F356AE57D1A71EED7B612C4CBC808557E4FCBAF6EDCFCECE37494144F09D65C7533109CE2F9B9B31D754453CA636A4463594F2C38303AE1B7BFFE738AC57805C782193B4854FF3F3FACA2C6BF9F75428DF6C583FBC29614C0B3329DF50F7B6399E1CC1F12BED77F29F885D7137ADFADE74A43451BB97A32F2301BE8EA866AFF34D6C7ED7FF1FAEA11FFB5B1034602B67E7918E42CA3D20E3E68AA700BE1B55A78C73A1D60D0A3DED3A6E5778C0BA68BAB9C345462131B9DC554D1A189066D649D7E167621815AB5B93905582BF19C28BCA6018E0CD205702968885E92A3B1E3DB37A25AC26FA4D2A47FF024ECD401F79FA353FEF2E4C2183C44D1D44B44938D32D8DBEDDAF5C87D042E4E9DAD671BE9C10DD8B3FE0A7C29AFE20843FE268C6A8F14949A04FF25A3EEE1EBE0027A99CE1C4DC561697297EA9FD9E23CF2E190B58CA385B66A235290A23CBB3856108EFFDD775601B3DE92C06C9EA2695C2D25D7897FD9D43C1AE10016E51C46C67F19AC84CD25F47DE2962A48030BCD8A0F14FFE4135A2893F62AC3E15CC61EC2E4ACADE0736C9A8DBC17D439248C42C5C0C6E08612414170FBE5AA6B52AE64E4CCDAE6FD3066BED5C200E07DBB0167D74A9FAD263AF253DFA870F44407F8EF3D9F12B8D910C4D803AD82ABA136F93F0203010001028202007497315BDB203CB5BA27CBCDF9F6182BF24F824A43B97D33110CE82155F84EBE65106C5A775935253D11E67E0AB6C8F095EBE039C477C941DA0888D126EF651C27D4C1BBCD540C3ABDFBC60F4D3D11037CFE13574A96D2C2CEC921724B0C030515269180CA0C77AFE592728D668D5D396ED7640DCB065D577F2A6ECDEAA1116B65F50261AEA5061FE367E4EBD81ACE6C206CF6C5108F0BA265668B608FD8B5B8D13A56D79ABBA296577735C03F405BF863049935E75889CB55AB12354B1E3F366DB2815A1755D68B457FF47F9E03005BDDA457A3EAB1A2470722848DBA0FB69324C31EC076B73849CF3EE7AE8202FE5977818C9C6FB18956541B6AF37FC0620BAD4A401FEBADEB782F85597BD4E8110E948DB2FA6D1BA6D9B3C76226EDB97578B0FAA480D8ED07CBD93FBEFA1CB499F6841DF85EE5A8EFFCAAD5193772930E164BCB254E63324E7DD545C629CB25358162A990DB55397510E0E7BBFF896E9673B9286F1ED353E3580D925AC89268EC6DDE2912BE8CB9CEBFCD4212DD6863BE267AAAA646B215C45541F98D606ED20964AE23B017B85119C267F00A99A86D31CB0A32BD66A4F7D07044B03F9A45C4775A753EFB2CA2E238857F968AFF607476D2CBB07A560E649895502C55B8782E3E761A935C223EE0573005D93CE92DEE0D60F2DBED5B044CC40445F50F83539F90455BED7E94145A0C6AF9B95B47B355E1210282010100F9A85AA543F0D90CBE0ED7A879FE5186D2A14BE5C1C10EC7848557CA312EED8DCE148B1E74D73FAF3022876E8AE985192ED8E0E64556D6B6E20AB9C94F06FF67B465D5F6156156A990DB5E7FC56FB0A352A5E75FA76ABF62C346F70546F6D7AA0E4F8C3947ED2F83782509BD75E3EF1F8BD5F37B62C0677393A959AB503251A13D111B7DE46103C8DEF96744BA0F383EC45B7CE66556AEE1DFE79EECE1F6E301955FFBBE935FE2689989C0F476525DBD8498CB42CF32D3129B66B6B34EC2A33F5CB5ECEEAF6E59B30800AB80879DFBE7D50D3E3771B2345C669290EABE2C9A3734F87414CFD4DF21C0D1F00E3665CF311FEBCAB3A20153886BB83448AADA7A730282010100C665BED80AB3AB43D55BBD1B584C5278D4DC7FD32B4B9870D8F606AB63BC3BBF3330915E587B1C408704FC2D1FCB86433E24E06937785372BB7A8F655BADF073C7E3B5CBFBC870F0F94A0D9EB1FF133CBCD406A4DE63552AEC6F52F50671A095F47D6D87A2B039DBD120116BC26A7D1278EBE7FC46B2B572CBD904804EBE92A0B424D308C4E822B29E670C4C1FE95CBD917FF546434AAED98FC7F8EA0ACF49F571572CCBFEE772686EFF8F6AD45904A305A850D6C3ADE545B8F3A2966E428A59A92B9640B5ED1C0CFDF5DF9D00D5320852321FCCBF699F1A8D3408ED5ACCCB20C387DE5524D9680E3F5837E11496F65843B1B5965FCEB131AEE74C40E674D705028201000C9711E32DB6F2AB32D67AC7B34741034491FFCAD9678C0041CD9BACC5A83130AA88DCAF2F833F61ED528073F1AB6F1BE301EAED91E79C3262D9D99EAE4E9308BECF37E80E11F795DB89448DBAFE33F13894C7434AA5167BBB8F539BBF856940D931E7C767BA2D603AE9DB40E3B617F4065046D41D19C8DDCA3F8B17199740089A94C7472502437798CF09072D3EE13E4116C008BA6991AE306574DD4B53F104BE6CB5BC59A04741B124824791C3FB98381CA07B8109761D851ABBF1F4F1D9DBB32835879FEF37B4D09D80089E4E384AEBB29C459D853820C4C775697127BCAB360FA582FB2C280882B9D39A53E1F47DECB72E64BAB1C86DA3C90951F4D3C9C3028201001688F008720EBE615216BD8021A369AAB7E2E3D20494ED97C3CD0E2CE1833BF617C6687CA2E838E94B6CD187FE988B838FC77885FAFAFBDF8853FF7DAFD02E03B8ACB0B59EBFC1B45D5C7FF78A9842831F9FA5B18C611407701BA4FC97E2C82EC03A8EFA5D0C4F461C96DBE3B58D8AEF5234D980DA36EA4D43C23EB4A43D19428FB3AF14CBE8E2280FBDFCB398DC54E0636A795DA5BF11E53C63A66E4F14047E90852A5D7172B09814238B12C353E926EB3997150DDCEEB1E0B42BBF927E946062CAC4A24D07C5ABE41CCD6D73EEC364169202F2AABB408B2F86BD8CD84772BB21FA88D27B0106C4B78539B3A337127C2C143F5FF939ECFE8BB35201FD2B4051028201007013EF7A989CF3DAF73407F23F75DD141AE5AB841D2A31BC1C632761B71F37EE0BE7690922130E4B29F5A92EF3CFD9184275B015BF95F885720AE117C5C8960BAC8E7E9FEB19B3007970E5CDE0F935C75F90D887AE15A820F104CBBA2ABC37697C2952B5D25A91CAA27E5C04DB6D74B5C8B012093A927E96E7315EB2C2E882300171AF0E725DB4088F7B2AC2A36DE6FE7B73413BB40989B21BEED9662EEF9477B938B4020A01169E7F70D8050F9D751A7530E2A44A47F69FAB1FDD7F3F78EC1C22236B49C3B68100712B53C97DB8DB67A4D8B9309D69773BE761CFFAB42DEE9C55E55573AE40AC6A4926A28119BD1C069869250297938875850E4F471CDD2DC7} \ No newline at end of file diff --git a/examples/_cmd/anon_messenger/node2_hlm/pub.key b/examples/_cmd/anon_messenger/node2_hlm/pub.key deleted file mode 100644 index 86ca44fa..00000000 --- a/examples/_cmd/anon_messenger/node2_hlm/pub.key +++ /dev/null @@ -1 +0,0 @@ -Pub(go-peer/rsa){3082020A0282020100C17B6FA53983050B0339A0AB60D20A8A5FF5F8210564464C45CD2FAC2F266E8DDBA3B36C6F356AE57D1A71EED7B612C4CBC808557E4FCBAF6EDCFCECE37494144F09D65C7533109CE2F9B9B31D754453CA636A4463594F2C38303AE1B7BFFE738AC57805C782193B4854FF3F3FACA2C6BF9F75428DF6C583FBC29614C0B3329DF50F7B6399E1CC1F12BED77F29F885D7137ADFADE74A43451BB97A32F2301BE8EA866AFF34D6C7ED7FF1FAEA11FFB5B1034602B67E7918E42CA3D20E3E68AA700BE1B55A78C73A1D60D0A3DED3A6E5778C0BA68BAB9C345462131B9DC554D1A189066D649D7E167621815AB5B93905582BF19C28BCA6018E0CD205702968885E92A3B1E3DB37A25AC26FA4D2A47FF024ECD401F79FA353FEF2E4C2183C44D1D44B44938D32D8DBEDDAF5C87D042E4E9DAD671BE9C10DD8B3FE0A7C29AFE20843FE268C6A8F14949A04FF25A3EEE1EBE0027A99CE1C4DC561697297EA9FD9E23CF2E190B58CA385B66A235290A23CBB3856108EFFDD775601B3DE92C06C9EA2695C2D25D7897FD9D43C1AE10016E51C46C67F19AC84CD25F47DE2962A48030BCD8A0F14FFE4135A2893F62AC3E15CC61EC2E4ACADE0736C9A8DBC17D439248C42C5C0C6E08612414170FBE5AA6B52AE64E4CCDAE6FD3066BED5C200E07DBB0167D74A9FAD263AF253DFA870F44407F8EF3D9F12B8D910C4D803AD82ABA136F93F0203010001} \ No newline at end of file diff --git a/examples/_cmd/echo_service/Makefile b/examples/_cmd/echo_service/Makefile index 04e1da19..1a30a89d 100644 --- a/examples/_cmd/echo_service/Makefile +++ b/examples/_cmd/echo_service/Makefile @@ -5,12 +5,12 @@ init: pkill --version build: # MAKEFILE BUILD - make build -C ../../../cmd/hls + make build -C ../../../cmd/hidden_lake/service make build -C ./recv_hls # COPY HLS - cp -r ../../../cmd/hls/hls ./middle_hls/prog_hls - cp -r ../../../cmd/hls/hls ./recv_hls/prog_hls1 - cp -r ../../../cmd/hls/hls ./send_hls/prog_hls2 + cp -r ../../../cmd/hidden_lake/service/hls ./middle_hls/prog_hls + cp -r ../../../cmd/hidden_lake/service/hls ./recv_hls/prog_hls1 + cp -r ../../../cmd/hidden_lake/service/hls ./send_hls/prog_hls2 run: # MAKEFILE RUN make run -C ./middle_hls diff --git a/examples/_cmd/echo_service/middle_hls/hls.cfg b/examples/_cmd/echo_service/middle_hls/hls.cfg index b0e603d7..bf3e0b8c 100644 --- a/examples/_cmd/echo_service/middle_hls/hls.cfg +++ b/examples/_cmd/echo_service/middle_hls/hls.cfg @@ -1,5 +1,5 @@ { - "logging": true, + "logging": ["info", "warn", "erro"], "address": { "tcp": "localhost:9571" } diff --git a/pkg/client/message/message.go b/pkg/client/message/message.go index fb220b84..f20f2542 100644 --- a/pkg/client/message/message.go +++ b/pkg/client/message/message.go @@ -3,6 +3,8 @@ package message import ( "encoding/json" + "github.com/number571/go-peer/pkg/crypto/hashing" + "github.com/number571/go-peer/pkg/crypto/puzzle" "github.com/number571/go-peer/pkg/encoding" "github.com/number571/go-peer/pkg/payload" ) @@ -34,12 +36,15 @@ type SBodyMessage struct { // IMessage -func LoadMessage(bmsg []byte) IMessage { +func LoadMessage(bmsg []byte, workSize uint64) IMessage { var msg = new(SMessage) err := json.Unmarshal(bmsg, msg) if err != nil { return nil } + if !msg.isValid(workSize) { + return nil + } return msg } @@ -59,6 +64,14 @@ func (msg *SMessage) Bytes() []byte { return jsonData } +func (msg *SMessage) isValid(workSize uint64) bool { + if len(msg.Body().Hash()) != hashing.CSHA256Size { + return false + } + puzzle := puzzle.NewPoWPuzzle(workSize) + return puzzle.Verify(msg.Body().Hash(), msg.Body().Proof()) +} + // IHead func (head SHeadMessage) Sender() []byte { diff --git a/pkg/client/message/message_test.go b/pkg/client/message/message_test.go index 8013c74e..c6ba3425 100644 --- a/pkg/client/message/message_test.go +++ b/pkg/client/message/message_test.go @@ -1,34 +1,27 @@ package message -import ( - "bytes" - "testing" +// const ( +// tcHead = 12345 +// tcBody = "hello, world!" +// ) - "github.com/number571/go-peer/pkg/payload" -) +// func TestMessage(t *testing.T) { +// msg := testNewMessage() +// msg1 := LoadMessage(msg.Bytes()) -const ( - tcHead = 12345 - tcBody = "hello, world!" -) +// if !bytes.Equal(msg.Bytes(), msg1.Bytes()) { +// t.Error("load message not equal new message") +// return +// } +// } -func TestMessage(t *testing.T) { - msg := testNewMessage() - msg1 := LoadMessage(msg.Bytes()) - - if !bytes.Equal(msg.Bytes(), msg1.Bytes()) { - t.Error("load message not equal new message") - return - } -} - -func testNewMessage() IMessage { - return &SMessage{ - FHead: SHeadMessage{ - FSession: "session-key", - }, - FBody: SBodyMessage{ - FPayload: string(payload.NewPayload(tcHead, []byte(tcBody)).Bytes()), - }, - } -} +// func testNewMessage() IMessage { +// return &SMessage{ +// FHead: SHeadMessage{ +// FSession: "session-key", +// }, +// FBody: SBodyMessage{ +// FPayload: string(payload.NewPayload(tcHead, []byte(tcBody)).Bytes()), +// }, +// } +// } diff --git a/pkg/client/queue/queue.go b/pkg/client/queue/queue.go index f78fbcd7..272ee880 100644 --- a/pkg/client/queue/queue.go +++ b/pkg/client/queue/queue.go @@ -49,7 +49,6 @@ func (q *sQueue) UpdateClient(c client.IClient) { q.fClient = c q.fQueue = make(chan message.IMessage, q.Settings().GetCapacity()) - q.fMsgPull.fQueue = make(chan message.IMessage, q.Settings().GetPullCapacity()) } func (q *sQueue) Client() client.IClient { @@ -73,7 +72,7 @@ func (q *sQueue) Run() error { return case <-time.After(q.Settings().GetDuration() / 2): currLen := len(q.fMsgPull.fQueue) - if !q.fIsRun || uint64(currLen) >= q.Settings().GetPullCapacity() { + if uint64(currLen) >= q.Settings().GetPullCapacity() { continue } q.fMsgPull.fQueue <- q.newPseudoMessage() @@ -105,32 +104,35 @@ func (q *sQueue) Enqueue(msg message.IMessage) error { return errors.New("queue already full, need wait and retry") } - go func() { - q.fMutex.Lock() - defer q.fMutex.Unlock() - - q.fQueue <- msg - }() - + q.fQueue <- msg return nil } func (q *sQueue) Dequeue() <-chan message.IMessage { - time.Sleep(q.Settings().GetDuration()) + closed := make(chan bool) go func() { - q.fMutex.Lock() - defer q.fMutex.Unlock() - - if !q.fIsRun { + select { + case <-q.fMsgPull.fSignal: + closed <- true return - } + case <-time.After(q.Settings().GetDuration()): + q.fMutex.Lock() + defer q.fMutex.Unlock() - if len(q.fQueue) == 0 { - q.fQueue <- (<-q.fMsgPull.fQueue) + if len(q.fQueue) == 0 { + q.fQueue <- (<-q.fMsgPull.fQueue) + } + closed <- false } }() + if <-closed { + queue := make(chan message.IMessage) + close(queue) + return queue + } + return q.fQueue } diff --git a/pkg/client/queue/queue_test.go b/pkg/client/queue/queue_test.go index 77dccc9f..eeb18456 100644 --- a/pkg/client/queue/queue_test.go +++ b/pkg/client/queue/queue_test.go @@ -87,9 +87,19 @@ func testQueue(queue IQueue) error { } } + closed := make(chan bool) + go func() { + // test close with parallel dequeue + _, ok := <-queue.Dequeue() + closed <- ok + }() + if err := queue.Close(); err != nil { return err } + if <-closed { + return fmt.Errorf("success dequeue with close") + } return nil } diff --git a/pkg/client/queue/types.go b/pkg/client/queue/types.go index 3ee836a3..81a87810 100644 --- a/pkg/client/queue/types.go +++ b/pkg/client/queue/types.go @@ -9,6 +9,8 @@ import ( ) type IQueue interface { + types.IApp + Settings() ISettings UpdateClient(client.IClient) @@ -16,8 +18,6 @@ type IQueue interface { Enqueue(message.IMessage) error Dequeue() <-chan message.IMessage - - types.IApp } type ISettings interface { diff --git a/pkg/network/anonymity/anonymity.go b/pkg/network/anonymity/anonymity.go index 12ed71f4..62dbe55d 100644 --- a/pkg/network/anonymity/anonymity.go +++ b/pkg/network/anonymity/anonymity.go @@ -11,8 +11,6 @@ import ( "github.com/number571/go-peer/pkg/client/queue" "github.com/number571/go-peer/pkg/closer" "github.com/number571/go-peer/pkg/crypto/asymmetric" - "github.com/number571/go-peer/pkg/crypto/hashing" - "github.com/number571/go-peer/pkg/crypto/puzzle" "github.com/number571/go-peer/pkg/crypto/random" "github.com/number571/go-peer/pkg/friends" "github.com/number571/go-peer/pkg/logger" @@ -61,10 +59,28 @@ func NewNode( } func (node *sNode) Run() error { - if err := node.Queue().Run(); err != nil { + if err := node.runQueue(); err != nil { return err } - node.Network().Handle(node.Settings().GetNetworkMask(), node.handleWrapper()) + + handleWrapper := node.handleWrapper() + + middleware := node.Settings().GetTraffic().Download() + if middleware != nil { + chMsg := middleware() + for { + msg, ok := <-chMsg + if !ok { + break + } + handleWrapper(nil, nil, msg.Bytes()) + } + } + + node.Network().Handle( + node.Settings().GetNetworkMask(), + handleWrapper, + ) return nil } @@ -168,7 +184,11 @@ func (node *sNode) recv(actionKey string) ([]byte, error) { } } -func (node *sNode) handleWrapper() network.IHandlerF { +func (node *sNode) runQueue() error { + if err := node.Queue().Run(); err != nil { + return err + } + go func() { for { msg, ok := <-node.Queue().Dequeue() @@ -176,14 +196,14 @@ func (node *sNode) handleWrapper() network.IHandlerF { break } - hash := msg.Body().Hash() - proof := msg.Body().Proof() + var ( + hash = msg.Body().Hash() + proof = msg.Body().Proof() + pubKey = node.Queue().Client().PubKey() + ) - pubKey := node.fQueue.Client().PubKey() - - // redirect message to another nodes if err := node.networkBroadcast(msg); err != nil { - node.fLogger.Warn(fmtLog(cLogBaseBroadcast, hash, proof, pubKey, nil)) + node.fLogger.Erro(fmtLog(cLogErroMiddleware, hash, proof, pubKey, nil)) continue } @@ -191,8 +211,12 @@ func (node *sNode) handleWrapper() network.IHandlerF { } }() - return func(nnode network.INode, conn conn.IConn, reqBytes []byte) { - msg := node.initialCheck(message.LoadMessage(reqBytes)) + return nil +} + +func (node *sNode) handleWrapper() network.IHandlerF { + return func(_ network.INode, conn conn.IConn, reqBytes []byte) { + msg := message.LoadMessage(reqBytes, node.Queue().Client().Settings().GetWorkSize()) if msg == nil { node.fLogger.Warn(fmtLog(cLogWarnMessageNull, nil, 0, nil, conn)) return @@ -214,10 +238,10 @@ func (node *sNode) handleWrapper() network.IHandlerF { return } - // redirect message to another nodes + // broadcast message to network if err := node.networkBroadcast(msg); err != nil { - node.fLogger.Warn(fmtLog(cLogBaseBroadcast, hash, proof, nil, conn)) - // need continue + node.fLogger.Erro(fmtLog(cLogErroMiddleware, hash, proof, nil, conn)) + return } // try decrypt message @@ -227,6 +251,8 @@ func (node *sNode) handleWrapper() network.IHandlerF { return } + fmt.Println("AAA") + // check sender in f2f list if !node.F2F().InList(sender) { node.fLogger.Warn(fmtLog(cLogWarnNotFriend, hash, proof, sender, conn)) @@ -269,29 +295,29 @@ func (node *sNode) handleWrapper() network.IHandlerF { } } -func (node *sNode) initialCheck(msg message.IMessage) message.IMessage { - if msg == nil { - return nil - } - - if len(msg.Body().Hash()) != hashing.CSHA256Size { - return nil - } - - diff := node.Queue().Client().Settings().GetWorkSize() - puzzle := puzzle.NewPoWPuzzle(diff) - if !puzzle.Verify(msg.Body().Hash(), msg.Body().Proof()) { - return nil - } - - return msg -} - func (node *sNode) networkBroadcast(msg message.IMessage) error { - return node.Network().Broadcast(payload.NewPayload( + hash := msg.Body().Hash() + proof := msg.Body().Proof() + + // redirect message to another nodes + err := node.Network().Broadcast(payload.NewPayload( node.Settings().GetNetworkMask(), msg.Bytes(), )) + if err != nil { + node.fLogger.Warn(fmtLog(cLogBaseBroadcast, hash, proof, nil, nil)) + // need continue (some of connections may be closed) + } + + // use middleware func for upload raw messages + middleware := node.Settings().GetTraffic().Upload() + if middleware != nil { + if err := middleware(msg); err != nil { + return err + } + } + + return nil } func (node *sNode) setRoute(head uint32, handle IHandlerF) { diff --git a/pkg/network/anonymity/logger.go b/pkg/network/anonymity/logger.go index 8a747c0f..93d94bbc 100644 --- a/pkg/network/anonymity/logger.go +++ b/pkg/network/anonymity/logger.go @@ -27,6 +27,7 @@ const ( cLogWarnUnknownRoute iLogType = "UNKRT" // ERRO + cLogErroMiddleware iLogType = "MDLWR" cLogErroDatabaseSet iLogType = "DBSET" ) diff --git a/pkg/network/anonymity/settings.go b/pkg/network/anonymity/settings.go index 1d2cf19b..a587fb4d 100644 --- a/pkg/network/anonymity/settings.go +++ b/pkg/network/anonymity/settings.go @@ -18,6 +18,7 @@ type sSettings struct { FRetryEnqueue uint64 FNetworkMask uint64 FTimeWait time.Duration + FTraffic ITraffic } func NewSettings(sett *SSettings) ISettings { @@ -25,6 +26,7 @@ func NewSettings(sett *SSettings) ISettings { FRetryEnqueue: sett.FRetryEnqueue, FNetworkMask: sett.FNetworkMask, FTimeWait: sett.FTimeWait, + FTraffic: sett.FTraffic, }).useDefaultValue() } @@ -35,6 +37,9 @@ func (s *sSettings) useDefaultValue() ISettings { if s.FTimeWait == 0 { s.FTimeWait = cTimeWait } + if s.FTraffic == nil { + s.FTraffic = NewTraffic(nil, nil) + } return s } @@ -49,3 +54,7 @@ func (s *sSettings) GetNetworkMask() uint64 { func (s *sSettings) GetRetryEnqueue() uint64 { return s.FRetryEnqueue } + +func (s *sSettings) GetTraffic() ITraffic { + return s.FTraffic +} diff --git a/pkg/network/anonymity/traffic.go b/pkg/network/anonymity/traffic.go new file mode 100644 index 00000000..423e4a96 --- /dev/null +++ b/pkg/network/anonymity/traffic.go @@ -0,0 +1,25 @@ +package anonymity + +var ( + _ ITraffic = &sTraffic{} +) + +type sTraffic struct { + FDownload IDownloadF + FUpload IUploadF +} + +func NewTraffic(d IDownloadF, u IUploadF) ITraffic { + return &sTraffic{ + FDownload: d, + FUpload: u, + } +} + +func (t *sTraffic) Download() IDownloadF { + return t.FDownload +} + +func (t *sTraffic) Upload() IUploadF { + return t.FUpload +} diff --git a/pkg/network/anonymity/types.go b/pkg/network/anonymity/types.go index eeb9b63c..fdb571b7 100644 --- a/pkg/network/anonymity/types.go +++ b/pkg/network/anonymity/types.go @@ -3,6 +3,7 @@ package anonymity import ( "time" + "github.com/number571/go-peer/pkg/client/message" "github.com/number571/go-peer/pkg/client/queue" "github.com/number571/go-peer/pkg/crypto/asymmetric" "github.com/number571/go-peer/pkg/friends" @@ -14,7 +15,9 @@ import ( ) type ( - IHandlerF func(INode, asymmetric.IPubKey, []byte) []byte + IHandlerF func(INode, asymmetric.IPubKey, []byte) []byte + IDownloadF func() <-chan message.IMessage + IUploadF func(message.IMessage) error ) type INode interface { @@ -35,6 +38,12 @@ type ISettings interface { GetTimeWait() time.Duration GetNetworkMask() uint64 GetRetryEnqueue() uint64 + GetTraffic() ITraffic +} + +type ITraffic interface { + Download() IDownloadF + Upload() IUploadF } type iHead interface {