summaryrefslogtreecommitdiff
path: root/internal/api/client/instance/instancepatch.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-11-08 18:11:06 +0100
committerLibravatar GitHub <noreply@github.com>2022-11-08 17:11:06 +0000
commitb4f7316a4cdf5ee2b43118aa6133a84a7ae4a5df (patch)
tree1ffa65108351843bbb92c8a245c5345cff88c61a /internal/api/client/instance/instancepatch.go
parent[frontend] Custom Emoji Deletion (#994) (diff)
downloadgotosocial-b4f7316a4cdf5ee2b43118aa6133a84a7ae4a5df.tar.xz
[feature] Make instance thumbnail configurable via admin panel (#973)
* [feature] Make instance thumbnail configurable via admin panel * log db errors in InstanceToAPIInstance * only update instance in db if necessary * start adding tests * finish test
Diffstat (limited to 'internal/api/client/instance/instancepatch.go')
-rw-r--r--internal/api/client/instance/instancepatch.go48
1 files changed, 43 insertions, 5 deletions
diff --git a/internal/api/client/instance/instancepatch.go b/internal/api/client/instance/instancepatch.go
index 080327852..d4fa8ca5d 100644
--- a/internal/api/client/instance/instancepatch.go
+++ b/internal/api/client/instance/instancepatch.go
@@ -20,11 +20,13 @@ package instance
import (
"errors"
+ "fmt"
"net/http"
"github.com/gin-gonic/gin"
"github.com/superseriousbusiness/gotosocial/internal/api"
"github.com/superseriousbusiness/gotosocial/internal/api/model"
+ "github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/oauth"
)
@@ -89,14 +91,19 @@ import (
// maximum: 5000
// allowEmptyValue: true
// -
-// name: avatar
+// name: thumbnail
// in: formData
-// description: Avatar of the instance.
+// description: Thumbnail image to use for the instance.
// type: file
// -
+// name: thumbnail_description
+// in: formData
+// description: Image description of the submitted instance thumbnail.
+// type: string
+// -
// name: header
// in: formData
-// description: Header of the instance.
+// description: Header image to use for the instance.
// type: file
//
// security:
@@ -144,8 +151,7 @@ func (m *Module) InstanceUpdatePATCHHandler(c *gin.Context) {
return
}
- if form.Title == nil && form.ContactUsername == nil && form.ContactEmail == nil && form.ShortDescription == nil && form.Description == nil && form.Terms == nil && form.Avatar == nil && form.Header == nil {
- err := errors.New("empty form submitted")
+ if err := validateInstanceUpdate(form); err != nil {
api.ErrorHandler(c, gtserror.NewErrorBadRequest(err, err.Error()), m.processor.InstanceGet)
return
}
@@ -158,3 +164,35 @@ func (m *Module) InstanceUpdatePATCHHandler(c *gin.Context) {
c.JSON(http.StatusOK, i)
}
+
+func validateInstanceUpdate(form *model.InstanceSettingsUpdateRequest) error {
+ if form.Title == nil &&
+ form.ContactUsername == nil &&
+ form.ContactEmail == nil &&
+ form.ShortDescription == nil &&
+ form.Description == nil &&
+ form.Terms == nil &&
+ form.Avatar == nil &&
+ form.AvatarDescription == nil &&
+ form.Header == nil {
+ return errors.New("empty form submitted")
+ }
+
+ maxImageSize := config.GetMediaImageMaxSize()
+ maxDescriptionChars := config.GetMediaDescriptionMaxChars()
+
+ // validate avatar if present
+ if form.Avatar != nil {
+ if size := form.Avatar.Size; size > int64(maxImageSize) {
+ return fmt.Errorf("file size limit exceeded: limit is %d bytes but desired instance avatar was %d bytes", maxImageSize, size)
+ }
+
+ if form.AvatarDescription != nil {
+ if length := len([]rune(*form.AvatarDescription)); length > maxDescriptionChars {
+ return fmt.Errorf("avatar description length must be less than %d characters (inclusive), but provided avatar description was %d chars", maxDescriptionChars, length)
+ }
+ }
+ }
+
+ return nil
+}