diff options
author | Philip Couling <couling@gmail.com> | 2017-01-20 06:58:46 +0000 |
---|---|---|
committer | Kim "BKC" Carlbäcker <kim.carlbacker@gmail.com> | 2017-01-20 07:58:46 +0100 |
commit | 1610b9f547982af08e771e979718ae9e84b573b6 (patch) | |
tree | a2881060065f2b0d3056ab7fd5a8ac2e9f372126 /routers/repo/attachment.go | |
parent | 74bbec3bf9f5e306248bf80808f93e116c232306 (diff) | |
download | gitea-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.go | 73 |
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, + }) +} + |