dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 674375ef4633c1f17e4bfcfb59d8a7af31278af8
parent 7270ad79c896084bfac2cb112f69ae7550162823
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Mon,  3 Apr 2023 00:26:39 -0700

quick websoket server

Diffstat:
Mpkg/web/web.go | 43++++++++++++++++++++++++++++++++-----------
1 file changed, 32 insertions(+), 11 deletions(-)

diff --git a/pkg/web/web.go b/pkg/web/web.go @@ -2,30 +2,30 @@ package web import ( "context" - "dkforest/pkg/database" - "fmt" - "github.com/ulule/limiter" - "github.com/ulule/limiter/drivers/store/memory" - "net" - "net/http" - "regexp" - "strconv" - "strings" - "time" - "dkforest/bindata" "dkforest/pkg/config" + "dkforest/pkg/database" "dkforest/pkg/staticbin" tmp "dkforest/pkg/template" "dkforest/pkg/utils" "dkforest/pkg/web/handlers" v1 "dkforest/pkg/web/handlers/api/v1" "dkforest/pkg/web/middlewares" + "fmt" "github.com/labstack/echo" "github.com/nicksnyder/go-i18n/v2/i18n" "github.com/sirupsen/logrus" + "github.com/ulule/limiter" + "github.com/ulule/limiter/drivers/store/memory" + "golang.org/x/net/websocket" "golang.org/x/text/language" yaml "gopkg.in/yaml.v1" + "net" + "net/http" + "regexp" + "strconv" + "strings" + "time" ) func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Templates) echo.HandlerFunc { @@ -66,6 +66,27 @@ func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Te e.POST("/bhc", handlers.BHCHandler, middlewares.CircuitRateLimitMiddleware(5*time.Second, 4, true)) e.GET("/public/css/:signupToken/signup.css", handlers.SignupCss, middlewares.CircuitRateLimitMiddleware(15*time.Second, 4, false)) e.GET("/public/img/:signupToken/:signal/:data", handlers.SignalCss, middlewares.CircuitRateLimitMiddleware(15*time.Second, 4, false)) + e.GET("/ws", func(c echo.Context) error { + websocket.Handler(func(ws *websocket.Conn) { + defer ws.Close() + for { + // Write + err := websocket.Message.Send(ws, "Hello, Client!") + if err != nil { + c.Logger().Error(err) + } + + // Read + msg := "" + err = websocket.Message.Receive(ws, &msg) + if err != nil { + c.Logger().Error(err) + } + fmt.Printf("%s\n", msg) + } + }).ServeHTTP(c.Response(), c.Request()) + return nil + }) noAuthGroup := e.Group("", middlewares.NoAuthMiddleware) noAuthGroup.GET("/login", handlers.LoginHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false)) noAuthGroup.POST("/login", handlers.LoginHandler, middlewares.CircuitRateLimitMiddleware(1*time.Second, 4, false))