Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
number571 committed Jan 27, 2025
1 parent 5380e89 commit 480a9f9
Show file tree
Hide file tree
Showing 23 changed files with 599 additions and 453 deletions.
1 change: 1 addition & 0 deletions examples/notifier/simple/node1_hln/hln.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
settings:
messages_capacity: 2048
work_size_bits: 25
network_key: channel_password
logging:
- info
- warn
Expand Down
1 change: 1 addition & 0 deletions examples/notifier/simple/node2_hln/hln.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
settings:
messages_capacity: 2048
work_size_bits: 25
network_key: channel_password
logging:
- info
- warn
Expand Down
1 change: 1 addition & 0 deletions examples/notifier/simple/node3_hln/hln.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
settings:
messages_capacity: 2048
work_size_bits: 25
network_key: BBCCBB
logging:
- info
- warn
Expand Down
2 changes: 1 addition & 1 deletion internal/applications/notifier/internal/handler/friends.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func FriendsPage(
result.sTemplate = getTemplate(pCfg)
result.FFriends = make([]string, 0, len(friends))
result.FFriendBaseURL = "/friends/chat"
result.FUsedBaseURLBlock = "Anonymous chat"
result.FUsedBaseURLBlock = "Channel"

friendsList := make([]string, 0, len(friends))
for aliasName := range friends {
Expand Down
27 changes: 22 additions & 5 deletions internal/applications/notifier/internal/handler/friends_chat.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ import (
"net/http"

"github.com/number571/go-peer/pkg/logger"
"github.com/number571/go-peer/pkg/message/layer1"
"github.com/number571/hidden-lake/internal/applications/notifier/internal/database"
internal_utils "github.com/number571/hidden-lake/internal/applications/notifier/internal/utils"
"github.com/number571/hidden-lake/internal/applications/notifier/pkg/app/config"
hln_client "github.com/number571/hidden-lake/internal/applications/notifier/pkg/client"
hlm_settings "github.com/number571/hidden-lake/internal/applications/notifier/pkg/settings"
hls_client "github.com/number571/hidden-lake/internal/service/pkg/client"
"github.com/number571/hidden-lake/internal/utils/alias"
"github.com/number571/hidden-lake/internal/utils/layer1x"
http_logger "github.com/number571/hidden-lake/internal/utils/logger/http"
"github.com/number571/hidden-lake/internal/utils/msgdata"
"github.com/number571/hidden-lake/internal/webui"
Expand Down Expand Up @@ -151,16 +153,31 @@ func pushMessage(
return nil, ErrLenMessageGtLimit
}

cfgSett := pCfg.GetSettings()
msg := layer1x.NewMessage(
layer1.NewConstructSettings(&layer1.SConstructSettings{
FSettings: layer1.NewSettings(&layer1.SSettings{
FWorkSizeBits: cfgSett.GetWorkSizeBits(),
}),
FParallel: cfgSett.GetPowParallel(),
}),
layer1x.NewMessage(
layer1.NewConstructSettings(&layer1.SConstructSettings{
FSettings: layer1.NewSettings(&layer1.SSettings{
FNetworkKey: cfgSett.GetNetworkKey(),
}),
}),
pMsgBytes,
).ToBytes(),
)

hlnClient := hln_client.NewClient(
pCfg.GetSettings(),
hln_client.NewBuilder(),
hln_client.NewRequester(pClient),
)

hash, err := hlnClient.Initialize(pCtx, pFriends, pMsgBytes)
if err != nil {
if err := hlnClient.Redirect(pCtx, pFriends, "", msg); err != nil {
return nil, errors.Join(ErrPushMessage, err)
}

return hash, nil
return msg.GetHash(), nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@ package handler

import (
"context"
"io"
"net/http"

"github.com/number571/go-peer/pkg/logger"
"github.com/number571/go-peer/pkg/message/layer1"
"github.com/number571/hidden-lake/internal/applications/notifier/internal/database"
"github.com/number571/hidden-lake/internal/utils/alias"
"github.com/number571/hidden-lake/internal/utils/api"
"github.com/number571/hidden-lake/internal/utils/layer1x"
http_logger "github.com/number571/hidden-lake/internal/utils/logger/http"
"github.com/number571/hidden-lake/internal/utils/msgdata"

Expand All @@ -26,13 +29,6 @@ func HandleIncomingFinalyzeHTTP(
pBroker msgdata.IMessageBroker,
pHLSClient hls_client.IClient,
) http.HandlerFunc {
sett := pConfig.GetSettings()
hlnClient := hln_client.NewClient(
sett,
hln_client.NewBuilder(),
hln_client.NewRequester(pHLSClient),
)

return func(pW http.ResponseWriter, pR *http.Request) {
pW.Header().Set(hls_settings.CHeaderResponseMode, hls_settings.CHeaderResponseModeOFF)

Expand All @@ -44,10 +40,29 @@ func HandleIncomingFinalyzeHTTP(
return
}

proof, hash, saltBytes, bodyBytes, err := readRequestWithValidate(pR, sett.GetWorkSizeBits())
msgBytes, err := io.ReadAll(pR.Body)
if err != nil {
pLogger.PushWarn(logBuilder.WithMessage(http_logger.CLogDecodeBody))
_ = api.Response(pW, http.StatusNotAcceptable, "failed: decode body")
return
}

rawMsg, err := layer1.LoadMessage(
layer1.NewSettings(&layer1.SSettings{
FWorkSizeBits: pConfig.GetSettings().GetWorkSizeBits(),
}),
msgBytes,
)
if err != nil {
pLogger.PushWarn(logBuilder.WithMessage("decode_message"))
_ = api.Response(pW, http.StatusNotAcceptable, "failed: decode message")
return
}

rawBodyBytes, err := layer1x.ExtractMessage(rawMsg)
if err != nil {
pLogger.PushWarn(logBuilder.WithMessage("read_body"))
_ = api.Response(pW, http.StatusNotAcceptable, "failed: read body")
pLogger.PushWarn(logBuilder.WithMessage("extract_raw_message"))
_ = api.Response(pW, http.StatusNotAcceptable, "failed: extract raw message")
return
}

Expand All @@ -59,14 +74,28 @@ func HandleIncomingFinalyzeHTTP(
}

rel := database.NewRelation(myPubKey)
hashExist, err := pDB.SetHash(rel, true, hash)
hashExist, err := pDB.SetHash(rel, true, rawMsg.GetHash())
if err != nil {
pLogger.PushWarn(logBuilder.WithMessage("set_hash"))
_ = api.Response(pW, http.StatusNotAcceptable, "failed: set hash")
return
}

if !hashExist {
// try decrypt message
decMsg, err := layer1.LoadMessage(
layer1.NewSettings(&layer1.SSettings{
FNetworkKey: pConfig.GetSettings().GetNetworkKey(),
}),
rawBodyBytes,
)
if !hashExist && err == nil {
bodyBytes, err := layer1x.ExtractMessage(decMsg)
if err != nil {
pLogger.PushWarn(logBuilder.WithMessage("extract_dec_message"))
_ = api.Response(pW, http.StatusBadRequest, "failed: extract dec message")
return
}

dbMsg := database.NewMessage(true, bodyBytes)
msg, err := msgdata.GetMessage(dbMsg.GetMessage(), dbMsg.GetTimestamp())
if err != nil {
Expand All @@ -91,8 +120,11 @@ func HandleIncomingFinalyzeHTTP(
return
}

err = hlnClient.Finalyze(pCtx, alias.GetAliasesList(friends), proof, saltBytes, bodyBytes)
if err != nil {
hlnClient := hln_client.NewClient(
hln_client.NewBuilder(),
hln_client.NewRequester(pHLSClient),
)
if err := hlnClient.Finalyze(pCtx, alias.GetAliasesList(friends), rawMsg); err != nil {
pLogger.PushWarn(logBuilder.WithMessage("finalyze"))
_ = api.Response(pW, http.StatusBadGateway, "failed: finalyze")
return
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
package handler

import (
"bytes"
"context"
"errors"
"io"
"net/http"

"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/encoding"
"github.com/number571/go-peer/pkg/logger"
"github.com/number571/go-peer/pkg/message/layer1"
"github.com/number571/hidden-lake/internal/applications/notifier/pkg/app/config"
hln_client "github.com/number571/hidden-lake/internal/applications/notifier/pkg/client"
hln_settings "github.com/number571/hidden-lake/internal/applications/notifier/pkg/settings"
hls_client "github.com/number571/hidden-lake/internal/service/pkg/client"
hls_settings "github.com/number571/hidden-lake/internal/service/pkg/settings"
"github.com/number571/hidden-lake/internal/utils/alias"
"github.com/number571/hidden-lake/internal/utils/api"
"github.com/number571/hidden-lake/internal/utils/layer1x"
http_logger "github.com/number571/hidden-lake/internal/utils/logger/http"
)

Expand All @@ -28,13 +25,6 @@ func HandleIncomingRedirectHTTP(
pLogger logger.ILogger,
pHLSClient hls_client.IClient,
) http.HandlerFunc {
sett := pConfig.GetSettings()
hlnClient := hln_client.NewClient(
sett,
hln_client.NewBuilder(),
hln_client.NewRequester(pHLSClient),
)

return func(pW http.ResponseWriter, pR *http.Request) {
pW.Header().Set(hls_settings.CHeaderResponseMode, hls_settings.CHeaderResponseModeOFF)

Expand All @@ -46,10 +36,28 @@ func HandleIncomingRedirectHTTP(
return
}

proof, _, saltBytes, bodyBytes, err := readRequestWithValidate(pR, sett.GetWorkSizeBits())
msgBytes, err := io.ReadAll(pR.Body)
if err != nil {
pLogger.PushWarn(logBuilder.WithMessage(http_logger.CLogDecodeBody))
_ = api.Response(pW, http.StatusNotAcceptable, "failed: decode body")
return
}

rawMsg, err := layer1.LoadMessage(
layer1.NewSettings(&layer1.SSettings{
FWorkSizeBits: pConfig.GetSettings().GetWorkSizeBits(),
}),
msgBytes,
)
if err != nil {
pLogger.PushWarn(logBuilder.WithMessage("read_body"))
_ = api.Response(pW, http.StatusNotAcceptable, "failed: read body")
pLogger.PushWarn(logBuilder.WithMessage("decode_message"))
_ = api.Response(pW, http.StatusNotAcceptable, "failed: decode message")
return
}

if _, err := layer1x.ExtractMessage(rawMsg); err != nil {
pLogger.PushWarn(logBuilder.WithMessage("decode_message_body"))
_ = api.Response(pW, http.StatusNotAcceptable, "failed: decode message body")
return
}

Expand All @@ -74,8 +82,11 @@ func HandleIncomingRedirectHTTP(
return
}

err = hlnClient.Redirect(pCtx, alias.GetAliasesList(friends), aliasName, proof, saltBytes, bodyBytes)
if err != nil {
hlnClient := hln_client.NewClient(
hln_client.NewBuilder(),
hln_client.NewRequester(pHLSClient),
)
if err := hlnClient.Redirect(pCtx, alias.GetAliasesList(friends), aliasName, rawMsg); err != nil {
pLogger.PushWarn(logBuilder.WithMessage("redirect"))
_ = api.Response(pW, http.StatusBadGateway, "failed: redirect")
return
Expand All @@ -85,31 +96,3 @@ func HandleIncomingRedirectHTTP(
_ = api.Response(pW, http.StatusOK, http_logger.CLogSuccess)
}
}

func readRequestWithValidate(pR *http.Request, pWorkSizeBits uint64) (uint64, []byte, []byte, []byte, error) {
bodyBytes, err := io.ReadAll(pR.Body)
if err != nil {
return 0, nil, nil, nil, err
}

proofBytes := encoding.HexDecode(pR.Header.Get(hln_settings.CHeaderPow))
if proofBytes == nil {
return 0, nil, nil, nil, errors.New("proof bytes is nil") // nolint: err113
}

saltBytes := encoding.HexDecode(pR.Header.Get(hln_settings.CHeaderSalt))
if saltBytes == nil || len(saltBytes) != hln_client.CSaltSize {
return 0, nil, nil, nil, errors.New("salt bytes is nil") // nolint: err113
}

proofArr := [encoding.CSizeUint64]byte{}
copy(proofArr[:], proofBytes)
proof := encoding.BytesToUint64(proofArr)

hash := hashing.NewHasher(bytes.Join([][]byte{saltBytes, bodyBytes}, []byte{})).ToBytes()
if !puzzle.NewPoWPuzzle(pWorkSizeBits).VerifyBytes(hash, proof) {
return 0, nil, nil, nil, errors.New("salt bytes is nil") // nolint: err113
}

return proof, hash, saltBytes, bodyBytes, nil
}
9 changes: 8 additions & 1 deletion internal/applications/notifier/internal/utils/msg_size.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,20 @@ import (
"context"
"errors"

"github.com/number571/go-peer/pkg/message/layer1"
"github.com/number571/go-peer/pkg/payload"
hln_client "github.com/number571/hidden-lake/internal/applications/notifier/pkg/client"
"github.com/number571/hidden-lake/internal/service/pkg/client"
)

var (
gReqSize = uint64(len(
hln_client.NewBuilder().Redirect(0, make([]byte, hln_client.CSaltSize), []byte{}).ToBytes(),
hln_client.NewBuilder().Redirect(layer1.NewMessage(
layer1.NewConstructSettings(&layer1.SConstructSettings{
FSettings: layer1.NewSettings(&layer1.SSettings{}),
}),
payload.NewPayload32(0, []byte{}),
)).ToBytes(),
))
)

Expand Down
5 changes: 5 additions & 0 deletions internal/applications/notifier/pkg/app/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ type SConfigSettings struct {
FMessagesCapacity uint64 `json:"messages_capacity" yaml:"messages_capacity"`
FWorkSizeBits uint64 `json:"work_size_bits,omitempty" yaml:"work_size_bits,omitempty"`
FPowParallel uint64 `json:"pow_parallel,omitempty" yaml:"pow_parallel,omitempty"`
FNetworkKey string `json:"network_key,omitempty" yaml:"network_key,omitempty"`
FLanguage string `json:"language,omitempty" yaml:"language,omitempty"`
}

Expand Down Expand Up @@ -148,6 +149,10 @@ func (p *SConfigSettings) GetWorkSizeBits() uint64 {
return p.FWorkSizeBits
}

func (p *SConfigSettings) GetNetworkKey() string {
return p.FNetworkKey
}

func (p *SConfigSettings) GetPowParallel() uint64 {
return p.FPowParallel
}
Expand Down
1 change: 1 addition & 0 deletions internal/applications/notifier/pkg/app/config/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ type IConfigSettings interface {
GetMessagesCapacity() uint64
GetWorkSizeBits() uint64
GetPowParallel() uint64
GetNetworkKey() string
GetLanguage() language.ILanguage
}

Expand Down
Loading

0 comments on commit 480a9f9

Please sign in to comment.