summaryrefslogtreecommitdiffstats
path: root/routers/repo/attachment.go
diff options
context:
space:
mode:
authorPhilip Couling <couling@gmail.com>2017-01-20 06:58:46 +0000
committerKim "BKC" Carlbäcker <kim.carlbacker@gmail.com>2017-01-20 07:58:46 +0100
commit1610b9f547982af08e771e979718ae9e84b573b6 (patch)
treea2881060065f2b0d3056ab7fd5a8ac2e9f372126 /routers/repo/attachment.go
parent74bbec3bf9f5e306248bf80808f93e116c232306 (diff)
downloadgitea-1610b9f547982af08e771e979718ae9e84b573b6.tar.gz
gitea-1610b9f547982af08e771e979718ae9e84b573b6.zip
Spun attachments into seperate go file (#701)
Moved attachments into seperate go file
Diffstat (limited to 'routers/repo/attachment.go')
-rw-r--r--routers/repo/attachment.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/routers/repo/attachment.go b/routers/repo/attachment.go
new file mode 100644
index 0000000000..2ba389f07a
--- /dev/null
+++ b/routers/repo/attachment.go
@@ -0,0 +1,73 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package repo
+
+import (
+ "fmt"
+ "net/http"
+ "strings"
+
+ "code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/setting"
+)
+
+func renderAttachmentSettings(ctx *context.Context) {
+ ctx.Data["RequireDropzone"] = true
+ ctx.Data["IsAttachmentEnabled"] = setting.AttachmentEnabled
+ ctx.Data["AttachmentAllowedTypes"] = setting.AttachmentAllowedTypes
+ ctx.Data["AttachmentMaxSize"] = setting.AttachmentMaxSize
+ ctx.Data["AttachmentMaxFiles"] = setting.AttachmentMaxFiles
+}
+
+// UploadAttachment response for uploading issue's attachment
+func UploadAttachment(ctx *context.Context) {
+ if !setting.AttachmentEnabled {
+ ctx.Error(404, "attachment is not enabled")
+ return
+ }
+
+ file, header, err := ctx.Req.FormFile("file")
+ if err != nil {
+ ctx.Error(500, fmt.Sprintf("FormFile: %v", err))
+ return
+ }
+ defer file.Close()
+
+ buf := make([]byte, 1024)
+ n, _ := file.Read(buf)
+ if n > 0 {
+ buf = buf[:n]
+ }
+ fileType := http.DetectContentType(buf)
+
+ allowedTypes := strings.Split(setting.AttachmentAllowedTypes, ",")
+ allowed := false
+ for _, t := range allowedTypes {
+ t := strings.Trim(t, " ")
+ if t == "*/*" || t == fileType {
+ allowed = true
+ break
+ }
+ }
+
+ if !allowed {
+ ctx.Error(400, ErrFileTypeForbidden.Error())
+ return
+ }
+
+ attach, err := models.NewAttachment(header.Filename, buf, file)
+ if err != nil {
+ ctx.Error(500, fmt.Sprintf("NewAttachment: %v", err))
+ return
+ }
+
+ log.Trace("New attachment uploaded: %s", attach.UUID)
+ ctx.JSON(200, map[string]string{
+ "uuid": attach.UUID,
+ })
+}
+