Initial commit
This commit is contained in:
commit
7c10a881fe
31
cmd/main.go
Normal file
31
cmd/main.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"git.grassecon.net/term/event/nats"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
n := nats.NewNatsSubscription()
|
||||||
|
err := n.Connect(ctx, "localhost:4222")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "Connect err: %v", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
defer n.Close()
|
||||||
|
|
||||||
|
cint := make(chan os.Signal)
|
||||||
|
cterm := make(chan os.Signal)
|
||||||
|
signal.Notify(cint, os.Interrupt, syscall.SIGINT)
|
||||||
|
signal.Notify(cterm, os.Interrupt, syscall.SIGTERM)
|
||||||
|
select {
|
||||||
|
case _ = <-cint:
|
||||||
|
case _ = <-cterm:
|
||||||
|
}
|
||||||
|
}
|
18
common/hex.go
Normal file
18
common/hex.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/hex"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NormalizeHex(s string) (string, error) {
|
||||||
|
if len(s) >= 2 {
|
||||||
|
if s[:2] == "0x" {
|
||||||
|
s = s[2:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r, err := hex.DecodeString(s)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return hex.EncodeToString(r), nil
|
||||||
|
}
|
105
event/nats/nats.go
Normal file
105
event/nats/nats.go
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
package nats
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
nats "github.com/nats-io/nats.go"
|
||||||
|
"github.com/nats-io/nats.go/jetstream"
|
||||||
|
|
||||||
|
"git.defalsify.org/vise.git/logging"
|
||||||
|
|
||||||
|
geEvent "github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||||
|
|
||||||
|
"git.grassecon.net/term/event"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
evGive = "TRACKER.FAUCET_GIVE"
|
||||||
|
evReg = "TRACKER.CUSTODIAL_REGISTRATION"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
logg = logging.NewVanilla().WithDomain("nats")
|
||||||
|
)
|
||||||
|
|
||||||
|
type NatsSubscription struct {
|
||||||
|
*event.Router
|
||||||
|
ctx context.Context
|
||||||
|
conn *nats.Conn
|
||||||
|
js jetstream.JetStream
|
||||||
|
cs jetstream.Consumer
|
||||||
|
cctx jetstream.ConsumeContext
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNatsSubscription() *NatsSubscription {
|
||||||
|
return &NatsSubscription{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func(n *NatsSubscription) Connect(ctx context.Context, connStr string) error {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
n.conn, err = nats.Connect(connStr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
n.js, err = jetstream.New(n.conn)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
n.cs, err = n.js.OrderedConsumer(ctx, "TRACKER", jetstream.OrderedConsumerConfig{
|
||||||
|
//FilterSubjects: []string{"TRACKER.*"},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
n.ctx = ctx
|
||||||
|
n.cctx, err = n.cs.Consume(n.handleEvent)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func(n *NatsSubscription) Close() error {
|
||||||
|
n.cctx.Stop()
|
||||||
|
select {
|
||||||
|
case <-n.cctx.Closed():
|
||||||
|
n.conn.Close()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func fail(m jetstream.Msg) {
|
||||||
|
err := m.Nak()
|
||||||
|
if err != nil {
|
||||||
|
logg.Errorf("nats nak fail", "err", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func(n *NatsSubscription) handleEvent(m jetstream.Msg) {
|
||||||
|
var ev geEvent.Event
|
||||||
|
|
||||||
|
logg.Tracef("have msg", "err", m)
|
||||||
|
b := m.Data()
|
||||||
|
err := json.Unmarshal(b, &ev)
|
||||||
|
if err != nil {
|
||||||
|
logg.Errorf("nats msg deserialize fail", "err", err)
|
||||||
|
fail(m)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = n.Route(&ev)
|
||||||
|
if err != nil {
|
||||||
|
logg.Errorf("handler route fail", "err", err)
|
||||||
|
fail(m)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = m.Ack()
|
||||||
|
// err = m.DoubleAck(n.ctx)
|
||||||
|
if err != nil {
|
||||||
|
logg.Errorf("ack fail", "err", err)
|
||||||
|
panic("ack fail")
|
||||||
|
}
|
||||||
|
}
|
12
event/route.go
Normal file
12
event/route.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package event
|
||||||
|
|
||||||
|
import (
|
||||||
|
geEvent "github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Router struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func(r *Router) Route(ev *geEvent.Event) error {
|
||||||
|
return nil
|
||||||
|
}
|
12
event/sub.go
Normal file
12
event/sub.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package event
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"io"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Subscription interface {
|
||||||
|
io.Closer
|
||||||
|
Connect(ctx context.Context, connStr string) error
|
||||||
|
Next() error
|
||||||
|
}
|
19
go.mod
Normal file
19
go.mod
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
module git.grassecon.net/term
|
||||||
|
|
||||||
|
go 1.23.2
|
||||||
|
|
||||||
|
require (
|
||||||
|
git.defalsify.org/vise.git v0.2.0
|
||||||
|
github.com/grassrootseconomics/eth-tracker v1.3.0-rc
|
||||||
|
github.com/nats-io/nats.go v1.37.0
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c // indirect
|
||||||
|
github.com/klauspost/compress v1.17.2 // indirect
|
||||||
|
github.com/nats-io/nkeys v0.4.7 // indirect
|
||||||
|
github.com/nats-io/nuid v1.0.1 // indirect
|
||||||
|
golang.org/x/crypto v0.26.0 // indirect
|
||||||
|
golang.org/x/sys v0.24.0 // indirect
|
||||||
|
golang.org/x/text v0.17.0 // indirect
|
||||||
|
)
|
20
go.sum
Normal file
20
go.sum
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
git.defalsify.org/vise.git v0.2.0 h1:X2ZgiGRq4C+9qOlDMP0b/oE5QHjVQNT4aEFZB88ST0Q=
|
||||||
|
git.defalsify.org/vise.git v0.2.0/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
|
||||||
|
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c h1:H9Nm+I7Cg/YVPpEV1RzU3Wq2pjamPc/UtHDgItcb7lE=
|
||||||
|
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c/go.mod h1:rGod7o6KPeJ+hyBpHfhi4v7blx9sf+QsHsA7KAsdN6U=
|
||||||
|
github.com/grassrootseconomics/eth-tracker v1.3.0-rc h1:iYe2rwCBrU5O8x0+HSJRjcPT1h68k/uGd3i/cJJQuTQ=
|
||||||
|
github.com/grassrootseconomics/eth-tracker v1.3.0-rc/go.mod h1:rLXM5u8FDHnMEdah8ACgo/wfawu4o2sljHGkky2rQKE=
|
||||||
|
github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
|
||||||
|
github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||||
|
github.com/nats-io/nats.go v1.37.0 h1:07rauXbVnnJvv1gfIyghFEo6lUcYRY0WXc3x7x0vUxE=
|
||||||
|
github.com/nats-io/nats.go v1.37.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8=
|
||||||
|
github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI=
|
||||||
|
github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc=
|
||||||
|
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
|
||||||
|
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
|
||||||
|
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
|
||||||
|
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
|
||||||
|
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
||||||
|
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
|
||||||
|
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
9
handler/error.go
Normal file
9
handler/error.go
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package handler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrInvalidPayload = fmt.Errorf("Invalid event payload")
|
||||||
|
)
|
26
handler/reg.go
Normal file
26
handler/reg.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package handler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.defalsify.org/vise.git/db"
|
||||||
|
|
||||||
|
"git.grassecon.net/term/common"
|
||||||
|
"git.grassecon.net/term/lookup"
|
||||||
|
)
|
||||||
|
|
||||||
|
func HandleEvReg(store db.Db, payload map[string]any) error {
|
||||||
|
var err error
|
||||||
|
address, ok := payload["address"].(string)
|
||||||
|
if !ok {
|
||||||
|
return ErrInvalidPayload
|
||||||
|
}
|
||||||
|
address, err = common.NormalizeHex(address)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
sessionId, err := lookup.GetSessionIdByAddress(store, address)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_ = sessionId
|
||||||
|
return nil
|
||||||
|
}
|
10
lookup/db.go
Normal file
10
lookup/db.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package lookup
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.defalsify.org/vise.git/db"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetSessionIdByAddress(store db.Db, address string) (string, error) {
|
||||||
|
var r string
|
||||||
|
return r, nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user