diff --git a/servers/images.go b/servers/images.go index f0c33c3..10c435b 100644 --- a/servers/images.go +++ b/servers/images.go @@ -21,11 +21,14 @@ type ImageData struct { DisplayName string } -func convertImageToImageData(imageSummary image.Summary) ImageData { +func convertImageToImageData(imageSummary image.Summary) *ImageData { + if len(imageSummary.RepoTags) == 0 { + return nil + } imageId := imageSummary.RepoTags[0] splitImageId := strings.Split(imageId, ":") imageName, imageVersion := splitImageId[0], splitImageId[1] - return ImageData{ + return &ImageData{ Id: imageId, Name: imageName, Version: imageVersion, @@ -38,9 +41,15 @@ func (con Connection) GetImages(c *gin.Context) { c.AbortWithError(500, err) return } - imagesData := make([]ImageData, len(images)) - for index, imageSummary := range images { - imagesData[index] = convertImageToImageData(imageSummary) + imagesData := make([]ImageData, 0, len(images)) + + for _, imageSummary := range images { + imageData := convertImageToImageData(imageSummary) + if imageData == nil { + continue + } + + imagesData = append(imagesData, *imageData) } c.JSON(200, imagesData) diff --git a/servers/servers.go b/servers/servers.go index de2bb70..5ebcd89 100644 --- a/servers/servers.go +++ b/servers/servers.go @@ -609,6 +609,7 @@ func (con Connection) UpdateServer(ctx *gin.Context) { if err != nil { ctx.AbortWithError(500, err) + return } updateOperation := bson.M{} @@ -790,6 +791,34 @@ func (con Connection) GetServerUserPermissions(ctx *gin.Context) { ctx.JSON(200, serverData.UserPermissions[claims.(*auth.AuthClaims).Username]) } +type SetServerUserPermissionsRequest struct { + Username string + Permissions models.Permission +} + +func (con Connection) SetServerUserPermissions(ctx *gin.Context) { + server_id := ctx.Param("server_id") + if server_id == "" { + ctx.AbortWithStatus(500) + return + } + var request SetServerUserPermissionsRequest + err := json.NewDecoder(ctx.Request.Body).Decode(&request) + + if err != nil { + ctx.AbortWithError(500, err) + return + } + + _, err = con.databaseConnection.Database("Backend").Collection("Servers").UpdateOne(context.TODO(), bson.D{{Key: "Id", Value: server_id}}, bson.D{{Key: "$set", Value: bson.D{{Key: fmt.Sprintf("UserPermissions.%s", request.Username), Value: request.Permissions}}}}) + + if err != nil { + ctx.AbortWithError(500, err) + return + } + ctx.JSON(200, "OK") +} + func LoadGroup(group *gin.RouterGroup, mongo_client *mongo.Client, config models.GlobalConfig) { apiClient, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { @@ -808,4 +837,5 @@ func LoadGroup(group *gin.RouterGroup, mongo_client *mongo.Client, config models group.PATCH("/:server_id", auth.AuthorizedTo(models.Admin, connection.serverAuthorized(models.Admin)), connection.UpdateServer) group.POST("/:server_id/browse", auth.AuthorizedTo(models.Browse, connection.serverAuthorized(models.Admin)), connection.BrowseServer) group.GET("/:server_id/permissions", auth.AuthorizedTo(models.Browse, connection.serverAuthorized(models.Admin)), connection.GetServerUserPermissions) + group.POST("/:server_id/permissions", auth.AuthorizedTo(models.Browse, connection.serverAuthorized(models.Admin)), connection.SetServerUserPermissions) }