From 30430bad599dda4ea76bb8164218ae56596840df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andri=20=C3=93skarsson?= Date: Sun, 6 Jul 2025 14:26:15 +0200 Subject: [PATCH] later --- nats-w-auth/.gitignore | 1 + nats-w-auth/README.md | 15 +++++++++++++++ nats-w-auth/go.mod | 18 ++++++++++++++++++ nats-w-auth/go.sum | 25 +++++++++++++++++++++++++ nats-w-auth/main.go | 42 ++++++++++++++++++++++++++++++++++++++++++ nats-w-auth/mise.toml | 2 ++ 6 files changed, 103 insertions(+) create mode 100644 nats-w-auth/.gitignore create mode 100644 nats-w-auth/README.md create mode 100644 nats-w-auth/go.mod create mode 100644 nats-w-auth/go.sum create mode 100644 nats-w-auth/main.go create mode 100644 nats-w-auth/mise.toml diff --git a/nats-w-auth/.gitignore b/nats-w-auth/.gitignore new file mode 100644 index 0000000..8fce603 --- /dev/null +++ b/nats-w-auth/.gitignore @@ -0,0 +1 @@ +data/ diff --git a/nats-w-auth/README.md b/nats-w-auth/README.md new file mode 100644 index 0000000..196b1a4 --- /dev/null +++ b/nats-w-auth/README.md @@ -0,0 +1,15 @@ +### Goals + +Explore NATS capabilities. + +- [x] Setup embedded Nats +- [ ] Basic web +- [ ] Setup Auth Callout w. OIDC (probably Google or GitHub) + - Works by subscribing to JWT events from the auth service +- [ ] Sessions w. NATS +- [ ] Try clustering +- [ ] Do we need websockets? + +### References + +- https://github.com/synadia-io/rethink_connectivity/blob/main/19-auth-callout diff --git a/nats-w-auth/go.mod b/nats-w-auth/go.mod new file mode 100644 index 0000000..c795664 --- /dev/null +++ b/nats-w-auth/go.mod @@ -0,0 +1,18 @@ +module nats-w-auth + +go 1.24.3 + +require ( + github.com/google/go-tpm v0.9.5 // indirect + github.com/klauspost/compress v1.18.0 // indirect + github.com/minio/highwayhash v1.0.3 // indirect + github.com/nats-io/jwt/v2 v2.7.4 // indirect + github.com/nats-io/nats-server/v2 v2.11.6 // indirect + github.com/nats-io/nats.go v1.43.0 // indirect + github.com/nats-io/nkeys v0.4.11 // indirect + github.com/nats-io/nuid v1.0.1 // indirect + go.uber.org/automaxprocs v1.6.0 // indirect + golang.org/x/crypto v0.39.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/time v0.12.0 // indirect +) diff --git a/nats-w-auth/go.sum b/nats-w-auth/go.sum new file mode 100644 index 0000000..0f7a532 --- /dev/null +++ b/nats-w-auth/go.sum @@ -0,0 +1,25 @@ +github.com/google/go-tpm v0.9.5 h1:ocUmnDebX54dnW+MQWGQRbdaAcJELsa6PqZhJ48KwVU= +github.com/google/go-tpm v0.9.5/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/minio/highwayhash v1.0.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= +github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= +github.com/nats-io/jwt/v2 v2.7.4 h1:jXFuDDxs/GQjGDZGhNgH4tXzSUK6WQi2rsj4xmsNOtI= +github.com/nats-io/jwt/v2 v2.7.4/go.mod h1:me11pOkwObtcBNR8AiMrUbtVOUGkqYjMQZ6jnSdVUIA= +github.com/nats-io/nats-server/v2 v2.11.6 h1:4VXRjbTUFKEB+7UoaKL3F5Y83xC7MxPoIONOnGgpkHw= +github.com/nats-io/nats-server/v2 v2.11.6/go.mod h1:2xoztlcb4lDL5Blh1/BiukkKELXvKQ5Vy29FPVRBUYs= +github.com/nats-io/nats.go v1.43.0 h1:uRFZ2FEoRvP64+UUhaTokyS18XBCR/xM2vQZKO4i8ug= +github.com/nats-io/nats.go v1.43.0/go.mod h1:iRWIPokVIFbVijxuMQq4y9ttaBTMe0SFdlZfMDd+33g= +github.com/nats-io/nkeys v0.4.11 h1:q44qGV008kYd9W1b1nEBkNzvnWxtRSQ7A8BoqRrcfa0= +github.com/nats-io/nkeys v0.4.11/go.mod h1:szDimtgmfOi9n25JpfIdGw12tZFYXqhGxjhVxsatHVE= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= diff --git a/nats-w-auth/main.go b/nats-w-auth/main.go new file mode 100644 index 0000000..6f818a0 --- /dev/null +++ b/nats-w-auth/main.go @@ -0,0 +1,42 @@ +package main + +import ( + "fmt" + "time" + + "github.com/nats-io/nats-server/v2/server" + "github.com/nats-io/nats.go" +) + +func main() { + opts := server.Options{ + JetStream: true, + StoreDir: "./data", + } + ns, err := server.NewServer(&opts) + if err != nil { + panic(err) + } + go ns.Start() + + if !ns.ReadyForConnections(4 * time.Second) { + panic("not ready for connection") + } + + nc, err := nats.Connect(ns.ClientURL()) + + if err != nil { + panic(err) + } + + subject := "my-subject" + + nc.Subscribe(subject, func(msg *nats.Msg) { + data := string(msg.Data) + fmt.Println("From subscription:", data) + ns.Shutdown() + }) + + nc.Publish(subject, []byte("Hello embedded NATS!")) + ns.WaitForShutdown() +} diff --git a/nats-w-auth/mise.toml b/nats-w-auth/mise.toml new file mode 100644 index 0000000..800d267 --- /dev/null +++ b/nats-w-auth/mise.toml @@ -0,0 +1,2 @@ +[tools] +"ubi:nats-io/natscli" = { version = "v0.2.3", matching = "zip", exe = "nats" } -- 2.51.2