From 1be267e0ff7a10fd062fedec7ef8cb6c7d399b5d Mon Sep 17 00:00:00 2001 From: ACoolName Date: Tue, 27 May 2025 13:20:37 +0300 Subject: [PATCH] updated file browser url logic --- auth/auth.go | 16 +++++++++++++++- instancemanager/docker/instance_manager.go | 9 +++++++++ instancemanager/instance_manager.go | 1 + instancemanager/kubernetes/instance_manager.go | 10 ++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/auth/auth.go b/auth/auth.go index 40e5ed9..9bb3982 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -11,6 +11,7 @@ import ( "git.acooldomain.co/server-manager/backend/dbhandler" "git.acooldomain.co/server-manager/backend/factories" + "git.acooldomain.co/server-manager/backend/instancemanager" "git.acooldomain.co/server-manager/backend/models" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt" @@ -23,6 +24,7 @@ type AuthApi struct { userAuthDbHandler dbhandler.UserPassAuthanticationDbHandler serverAuthDbHandler dbhandler.ServersAuthorizationDbHandler OidcAuthDbHandler dbhandler.OidcAuthenticationDbHandler + instanceManager instancemanager.InstanceManager } type Claims struct { @@ -171,10 +173,16 @@ func (con AuthApi) Verify(ctx *gin.Context) { pathSegments := strings.Split(forwardedUri, "/") - serverId, service := pathSegments[2], pathSegments[1] + service := pathSegments[1] switch service { case "browsers": + serverId, err := con.instanceManager.GetServerIdFromFileBrowserUrl(ctx, forwardedUri) + if err != nil { + ctx.AbortWithError(500, err) + return + } + serverPermissions, err := con.serverAuthDbHandler.GetPermissions(ctx, claims.Username, serverId) fmt.Printf("User: %s | GlobalPermissions: %d | ServerId: %s | ServerPermissions: %d\n", claims.Username, claims.Permissions, serverId, serverPermissions) if err != nil { @@ -215,10 +223,16 @@ func LoadGroup(group *gin.RouterGroup, config models.GlobalConfig) gin.HandlerFu panic(err) } + instanceManager, err := factories.GetInstanceManager(config.InstanceManager, config.Domain) + if err != nil { + panic(err) + } + connection := AuthApi{ userAuthDbHandler: userAuthHandler, serverAuthDbHandler: serverAuthDbHandler, tokenHandler: inviteHandler, + instanceManager: instanceManager, config: config, } diff --git a/instancemanager/docker/instance_manager.go b/instancemanager/docker/instance_manager.go index 532cd9b..113423d 100644 --- a/instancemanager/docker/instance_manager.go +++ b/instancemanager/docker/instance_manager.go @@ -3,6 +3,7 @@ package docker import ( "context" "encoding/json" + "errors" "fmt" "log" "maps" @@ -656,6 +657,14 @@ func (im *InstanceManager) StopFileBrowser(ctx context.Context, serverId string) return nil } +func (im *InstanceManager) GetServerIdFromFileBrowserUrl(ctx context.Context, url string) (string, error) { + pathSegments := strings.Split(url, "/") + if len(pathSegments) < 3 { + return "", errors.New("invalid url") + } + return pathSegments[2], nil +} + func NewInstanceManager(config models.DockerInstanceManagerConfig, siteDomain string) (*InstanceManager, error) { apiClient, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { diff --git a/instancemanager/instance_manager.go b/instancemanager/instance_manager.go index 6c7a513..b685eec 100644 --- a/instancemanager/instance_manager.go +++ b/instancemanager/instance_manager.go @@ -60,6 +60,7 @@ type InstanceManager interface { // Read Only GetFileBrowser(ctx context.Context, serverId string) (*models.FileBrowser, error) ListFileBrowsers(ctx context.Context) ([]models.FileBrowser, error) + GetServerIdFromFileBrowserUrl(ctx context.Context, serverId string) (string, error) // Status Changing StartFileBrowser(ctx context.Context, serverId string) (*models.FileBrowser, error) diff --git a/instancemanager/kubernetes/instance_manager.go b/instancemanager/kubernetes/instance_manager.go index 6f8599e..2fb3480 100644 --- a/instancemanager/kubernetes/instance_manager.go +++ b/instancemanager/kubernetes/instance_manager.go @@ -8,6 +8,8 @@ import ( "strings" "time" + gerrors "errors" + "git.acooldomain.co/server-manager/backend/instancemanager" "git.acooldomain.co/server-manager/backend/models" servermanagerv1 "git.acooldomain.co/server-manager/kubernetes-operator/api/v1alpha1" @@ -355,6 +357,14 @@ func (i *InstanceManager) StopFileBrowser(ctx context.Context, serverId string) return nil } +func (im *InstanceManager) GetServerIdFromFileBrowserUrl(ctx context.Context, url string) (string, error) { + pathSegments := strings.Split(url, "/") + if len(pathSegments) < 4 { + return "", gerrors.New("invalid url") + } + return pathSegments[3], nil +} + func NewInstanceManager(config models.KubernetesInstanceManagerConfig) (*InstanceManager, error) { c, err := rest.InClusterConfig() if err != nil {