From 43eb2d5f47279042bc045ca2252f61055d52ed05 Mon Sep 17 00:00:00 2001
From: Bolke de Bruin <bolke@xs4all.nl>
Date: Sat, 22 Oct 2022 10:17:43 +0200
Subject: [PATCH] Make session length configurable

---
 cmd/rdpgw/config/configuration.go | 1 +
 cmd/rdpgw/main.go                 | 6 +++++-
 cmd/rdpgw/web/session.go          | 9 ++++++---
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/cmd/rdpgw/config/configuration.go b/cmd/rdpgw/config/configuration.go
index 2e5026b..dad3a43 100644
--- a/cmd/rdpgw/config/configuration.go
+++ b/cmd/rdpgw/config/configuration.go
@@ -45,6 +45,7 @@ type ServerConfig struct {
 	SessionKey           string   `koanf:"sessionkey"`
 	SessionEncryptionKey string   `koanf:"sessionencryptionkey"`
 	SessionStore         string   `koanf:"sessionstore"`
+	MaxSessionLength     int      `koanf:"maxsessionlength"`
 	SendBuf              int      `koanf:"sendbuf"`
 	ReceiveBuf           int      `koanf:"receivebuf"`
 	Tls                  string   `koanf:"tls"`
diff --git a/cmd/rdpgw/main.go b/cmd/rdpgw/main.go
index 42b0e5f..66e8c6e 100644
--- a/cmd/rdpgw/main.go
+++ b/cmd/rdpgw/main.go
@@ -94,7 +94,11 @@ func main() {
 	security.Hosts = conf.Server.Hosts
 
 	// init session store
-	web.InitStore([]byte(conf.Server.SessionKey), []byte(conf.Server.SessionEncryptionKey), conf.Server.SessionStore)
+	web.InitStore([]byte(conf.Server.SessionKey),
+		[]byte(conf.Server.SessionEncryptionKey),
+		conf.Server.SessionStore,
+		conf.Server.MaxSessionLength,
+	)
 
 	// configure web backend
 	w := &web.Config{
diff --git a/cmd/rdpgw/web/session.go b/cmd/rdpgw/web/session.go
index be79db7..9114ed8 100644
--- a/cmd/rdpgw/web/session.go
+++ b/cmd/rdpgw/web/session.go
@@ -17,7 +17,7 @@ const (
 
 var sessionStore sessions.Store
 
-func InitStore(sessionKey []byte, encryptionKey []byte, storeType string) {
+func InitStore(sessionKey []byte, encryptionKey []byte, storeType string, maxLength int) {
 	if len(sessionKey) < 32 {
 		log.Fatal("Session key too small")
 	}
@@ -30,8 +30,11 @@ func InitStore(sessionKey []byte, encryptionKey []byte, storeType string) {
 		fs := sessions.NewFilesystemStore(os.TempDir(), sessionKey, encryptionKey)
 
 		// set max length
-		log.Printf("Setting maximum session storage to %d bytes", maxSessionLength)
-		fs.MaxLength(maxSessionLength)
+		if maxLength == 0 {
+			maxLength = maxSessionLength
+		}
+		log.Printf("Setting maximum session storage to %d bytes", maxLength)
+		fs.MaxLength(maxLength)
 
 		sessionStore = fs
 	} else {
-- 
GitLab