package servers import ( "git.acooldomain.co/server-manager/backend/auth" "git.acooldomain.co/server-manager/backend/factories" "git.acooldomain.co/server-manager/backend/models" "github.com/gin-gonic/gin" ) type FileBrowser struct { Id string `json:"Id"` Url string `json:"Url"` ConnectedTo ServerInfo `json:"ConnectedTo"` } func (con ServersApi) GetBrowsers(ctx *gin.Context) { fileBrowsers, err := con.InstanceManager.ListFileBrowsers(ctx) if err != nil { ctx.AbortWithError(500, err) return } fileBrowserInfos := make([]FileBrowserInfo, len(fileBrowsers)) for i, browser := range fileBrowsers { server, err := con.ServersDbHandler.GetServer(ctx, browser.ServerId) if err != nil { ctx.Error(err) continue } serverInfo := ServerInfo{ Id: server.Id, Image: ImageInfo{ Name: server.Image.Registry, Version: server.Image.Tag, }, OwnerId: server.Owner, DefaultCommand: server.Command, Nickname: server.Nickname, } fileBrowserInfos[i] = FileBrowserInfo{ ConnectedTo: serverInfo, Url: browser.Url, Id: browser.Id, } } ctx.JSON(200, fileBrowserInfos) } func (con ServersApi) StopBrowser(ctx *gin.Context) { serverId := ctx.Param("server_id") err := con.InstanceManager.StopFileBrowser(ctx, serverId) if err != nil { ctx.AbortWithError(500, err) return } ctx.Status(200) } func LoadBrowsersGroup(group *gin.RouterGroup, config models.GlobalConfig) { serversDbHandler, err := factories.GetServersDbHandler(config.ServersDatabase) if err != nil { panic(err) } serversAuthorizationHandler, err := factories.GetServersAuthorizationDbHandler(config.ServersAuthorizationDatabase) if err != nil { panic(err) } instanceManager, err := factories.GetInstanceManager(config.InstanceManager, config.Domain) if err != nil { panic(err) } connection := ServersApi{ ServersDbHandler: serversDbHandler, ServerAuthorization: serversAuthorizationHandler, InstanceManager: instanceManager, } group.GET("", connection.GetBrowsers) group.POST("/:server_id/stop", auth.AuthorizedTo(models.Browse), connection.ServerAuthorized(models.Browse), auth.AuthorizationEnforcer(), connection.StopBrowser) }