commit f7ca88fd4ebfecedb1afc02a680e1935b9f82af9
parent 1b8f67b8d093a02ea15d06f9c2bf97a8b03afcc0
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Thu, 22 Jun 2023 08:51:22 -0700
keep track of which client frontend was used for a request (tor / i2p) & dynamic git url accordingly
Diffstat:
5 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/pkg/config/config.go b/pkg/config/config.go
@@ -34,6 +34,7 @@ var RoomPasswordSalt = "room_pa$$word_$alt_OYvUwmNPVTdsw"
const (
DkfOnion = "http://dkforestseeaaq2dqz2uflmlsybvnq2irzn4ygyvu53oazyorednviid.onion"
DkfGitOnion = "http://git.dkforestseeaaq2dqz2uflmlsybvnq2irzn4ygyvu53oazyorednviid.onion"
+ I2pGitOnion = "http://git.dkforest4gwaceahf4te3vs7ycddtbpf2lucocxdzhphezikdgnq.b32.i2p"
DkfGit1Onion = "http://yylovpz7taca7jfrub3wltxabzzjp34fngj5lpwl6eo47ekt5cxs6mid.onion"
ChattorOnion = "http://chattorwozgwecrzzbchyhvxiyomny6jn4ac2njc22ozgwg42bhtupad.onion"
DreadOnion = "http://dreadytofatroptsdj6io7l3xptbet6onoyno2yv7jicoxknyazubrad.onion"
diff --git a/pkg/template/templates.go b/pkg/template/templates.go
@@ -2,6 +2,7 @@ package template
import (
"dkforest/pkg/global"
+ "dkforest/pkg/web/clientFrontends"
hutils "dkforest/pkg/web/handlers/utils"
"fmt"
"html/template"
@@ -67,6 +68,7 @@ func (t *Templates) Render(w io.Writer, name string, data any, c echo.Context) e
tmpl := t.Templates[name]
db := c.Get("database").(*database.DkfDB)
+ clientFE := c.Get("clientFE").(clientFrontends.ClientFrontend)
d := templateDataStruct{}
d.TmplName = name
@@ -87,7 +89,12 @@ func (t *Templates) Render(w io.Writer, name string, data any, c echo.Context) e
d.BaseKeywords = strings.Join(getBaseKeywords(), ", ")
d.Development = config.Development.Load()
d.AuthUser = c.Get("authUser").(*database.User)
- d.GitURL = config.DkfGitOnion
+ switch clientFE {
+ case clientFrontends.TorClientFE:
+ d.GitURL = config.DkfGitOnion
+ case clientFrontends.I2PClientFE:
+ d.GitURL = config.I2pGitOnion
+ }
d.WallpaperImg = "/public/img/login_bg.jpg"
year, month, day := time.Now().UTC().Date()
diff --git a/pkg/web/clientFrontends/clientFrontends.go b/pkg/web/clientFrontends/clientFrontends.go
@@ -0,0 +1,8 @@
+package clientFrontends
+
+type ClientFrontend int
+
+const (
+ TorClientFE = iota + 1
+ I2PClientFE
+)
diff --git a/pkg/web/middlewares/middlewares.go b/pkg/web/middlewares/middlewares.go
@@ -2,6 +2,7 @@ package middlewares
import (
"dkforest/bindata"
+ "dkforest/pkg/web/clientFrontends"
hutils "dkforest/pkg/web/handlers/utils"
"net"
"net/http"
@@ -223,6 +224,15 @@ func SetDatabaseMiddleware(db *database.DkfDB) echo.MiddlewareFunc {
}
}
+func SetClientFEMiddleware(clientFE clientFrontends.ClientFrontend) echo.MiddlewareFunc {
+ return func(next echo.HandlerFunc) echo.HandlerFunc {
+ return func(ctx echo.Context) error {
+ ctx.Set("clientFE", clientFE)
+ return next(ctx)
+ }
+ }
+}
+
// SetUserMiddleware Get user and put it into echo context.
// - Get auth-token from cookie
// - If exists, get user from database
diff --git a/pkg/web/web.go b/pkg/web/web.go
@@ -8,6 +8,7 @@ import (
"dkforest/pkg/staticbin"
tmp "dkforest/pkg/template"
"dkforest/pkg/utils"
+ "dkforest/pkg/web/clientFrontends"
"dkforest/pkg/web/handlers"
v1 "dkforest/pkg/web/handlers/api/v1"
"dkforest/pkg/web/middlewares"
@@ -31,7 +32,7 @@ import (
"time"
)
-func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Templates) echo.HandlerFunc {
+func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Templates, clientFE clientFrontends.ClientFrontend) echo.HandlerFunc {
e := newEcho()
e.Server.ReadHeaderTimeout = 10 * time.Second
@@ -41,6 +42,7 @@ func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Te
e.Use(staticbin.Static(bindata.Asset, staticbin.Options{Dir: "/public", SkipLogging: true}))
e.Renderer = renderer
e.Use(middlewares.SetDatabaseMiddleware(db))
+ e.Use(middlewares.SetClientFEMiddleware(clientFE))
e.Use(middlewares.FirstUseMiddleware)
e.Use(middlewares.DdosMiddleware)
e.Use(middlewares.MaintenanceMiddleware)
@@ -317,7 +319,7 @@ func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Te
}
}
-func getBaseServer(db *database.DkfDB) *echo.Echo {
+func getBaseServer(db *database.DkfDB, clientFE clientFrontends.ClientFrontend) *echo.Echo {
e := newEcho()
renderer := tmp.GetRenderer(e)
i18nBundle := getI18nBundle()
@@ -329,13 +331,13 @@ func getBaseServer(db *database.DkfDB) *echo.Echo {
e.POST("/api/v1/file-drop/:uuid/dkfdownload", handlers.FileDropDkfDownloadHandler, middlewares.SetDatabaseMiddleware(db), middlewares.I18nMiddleware(i18nBundle, "en"), middlewares.SetUserMiddleware, middlewares.IsAuthMiddleware)
e.GET("/downloads/:fileName", handlers.FileDropDownloadHandler, middlewares.SetDatabaseMiddleware(db), middlewares.I18nMiddleware(i18nBundle, "en"), middlewares.SetUserMiddleware)
e.POST("/downloads/:fileName", handlers.FileDropDownloadHandler, middlewares.SetDatabaseMiddleware(db), middlewares.I18nMiddleware(i18nBundle, "en"), middlewares.SetUserMiddleware)
- e.Any("*", getMainServer(db, i18nBundle, renderer))
+ e.Any("*", getMainServer(db, i18nBundle, renderer, clientFE))
return e
}
-func getSubdomainServer(db *database.DkfDB) *echo.Echo {
+func getSubdomainServer(db *database.DkfDB, clientFE clientFrontends.ClientFrontend) *echo.Echo {
rp := getReverseProxy(config.GogsURL)
- be := getBaseServer(db)
+ be := getBaseServer(db, clientFE)
e := newEcho()
e.Any("*", func(c echo.Context) error {
res := c.Response()
@@ -356,11 +358,11 @@ func getI2pServer(db *database.DkfDB) *echo.Echo {
if config.Development.IsTrue() {
return nil
}
- return getSubdomainServer(db)
+ return getSubdomainServer(db, clientFrontends.I2PClientFE)
}
func getTorServer(db *database.DkfDB) *echo.Echo {
- e := getSubdomainServer(db)
+ e := getSubdomainServer(db, clientFrontends.TorClientFE)
configTorProdServer(e)
return e
}