commit 674375ef4633c1f17e4bfcfb59d8a7af31278af8
parent 7270ad79c896084bfac2cb112f69ae7550162823
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Mon, 3 Apr 2023 00:26:39 -0700
quick websoket server
Diffstat:
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))