summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2015-08-11 23:24:40 +0800
committerUnknwon <u@gogs.io>2015-08-11 23:24:40 +0800
commit34f6cbfc2a13295d2c8ab33f17ddbca27337b18b (patch)
tree1264ba8fa4370d05c0f5efcd81d7e28380110454 /routers
parent89c2bd4a0dd85261f72565ba8395644da8129fea (diff)
downloadgitea-34f6cbfc2a13295d2c8ab33f17ddbca27337b18b.tar.gz
gitea-34f6cbfc2a13295d2c8ab33f17ddbca27337b18b.zip
finish attachments when create issue
Diffstat (limited to 'routers')
-rw-r--r--routers/repo/issue.go151
1 files changed, 52 insertions, 99 deletions
diff --git a/routers/repo/issue.go b/routers/repo/issue.go
index e8d2d7e1c2..20a6331f1f 100644
--- a/routers/repo/issue.go
+++ b/routers/repo/issue.go
@@ -7,11 +7,8 @@ package repo
import (
"errors"
"fmt"
- "io"
- "io/ioutil"
"net/http"
"net/url"
- "os"
"strings"
"time"
@@ -181,6 +178,7 @@ func NewIssue(ctx *middleware.Context) {
ctx.Data["RequireDropzone"] = true
ctx.Data["IsAttachmentEnabled"] = setting.AttachmentEnabled
ctx.Data["AttachmentAllowedTypes"] = setting.AttachmentAllowedTypes
+ ctx.Data["AttachmentMaxFiles"] = setting.AttachmentMaxFiles
if ctx.User.IsAdmin {
var (
@@ -215,18 +213,19 @@ func NewIssue(ctx *middleware.Context) {
}
func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
- fmt.Println(ctx.QueryStrings("uuids"))
ctx.Data["Title"] = ctx.Tr("repo.issues.new")
ctx.Data["PageIsIssueList"] = true
ctx.Data["RequireDropzone"] = true
ctx.Data["IsAttachmentEnabled"] = setting.AttachmentEnabled
ctx.Data["AttachmentAllowedTypes"] = setting.AttachmentAllowedTypes
+ ctx.Data["AttachmentMaxFiles"] = setting.AttachmentMaxFiles
var (
repo = ctx.Repo.Repository
labelIDs []int64
milestoneID int64
assigneeID int64
+ attachments []string
)
if ctx.User.IsAdmin {
// Check labels.
@@ -286,6 +285,10 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
}
}
+ if setting.AttachmentEnabled {
+ attachments = ctx.QueryStrings("attachments")
+ }
+
if ctx.HasError() {
ctx.HTML(200, ISSUE_NEW)
return
@@ -301,7 +304,7 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
AssigneeID: assigneeID,
Content: form.Content,
}
- if err := models.NewIssue(repo, issue, labelIDs); err != nil {
+ if err := models.NewIssue(repo, issue, labelIDs, attachments); err != nil {
ctx.Handle(500, "NewIssue", err)
return
}
@@ -347,9 +350,50 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index))
}
-func UploadAttachment(ctx *middleware.Context) {
+func UploadIssueAttachment(ctx *middleware.Context) {
+ if !setting.AttachmentEnabled {
+ ctx.Error(404, "attachment is not enabled")
+ return
+ }
+
+ allowedTypes := strings.Split(setting.AttachmentAllowedTypes, ",")
+ 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)
+
+ 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": "fuck",
+ "uuid": attach.UUID,
})
}
@@ -687,78 +731,6 @@ func UpdateAssignee(ctx *middleware.Context) {
})
}
-func uploadFiles(ctx *middleware.Context, issueId, commentId int64) {
- if !setting.AttachmentEnabled {
- return
- }
-
- allowedTypes := strings.Split(setting.AttachmentAllowedTypes, "|")
- attachments := ctx.Req.MultipartForm.File["attachments"]
-
- if len(attachments) > setting.AttachmentMaxFiles {
- ctx.Handle(400, "issue.Comment", ErrTooManyFiles)
- return
- }
-
- for _, header := range attachments {
- file, err := header.Open()
-
- if err != nil {
- ctx.Handle(500, "issue.Comment(header.Open)", err)
- return
- }
-
- defer file.Close()
-
- buf := make([]byte, 1024)
- n, _ := file.Read(buf)
- if n > 0 {
- buf = buf[:n]
- }
- fileType := http.DetectContentType(buf)
- fmt.Println(fileType)
-
- allowed := false
-
- for _, t := range allowedTypes {
- t := strings.Trim(t, " ")
-
- if t == "*/*" || t == fileType {
- allowed = true
- break
- }
- }
-
- if !allowed {
- ctx.Handle(400, "issue.Comment", ErrFileTypeForbidden)
- return
- }
-
- os.MkdirAll(setting.AttachmentPath, os.ModePerm)
- out, err := ioutil.TempFile(setting.AttachmentPath, "attachment_")
-
- if err != nil {
- ctx.Handle(500, "ioutil.TempFile", err)
- return
- }
-
- defer out.Close()
-
- out.Write(buf)
- _, err = io.Copy(out, file)
- if err != nil {
- ctx.Handle(500, "io.Copy", err)
- return
- }
-
- _, err = models.CreateAttachment(issueId, commentId, header.Filename, out.Name())
- if err != nil {
- ctx.Handle(500, "CreateAttachment", err)
- return
- }
- }
-}
-
func Comment(ctx *middleware.Context) {
send := func(status int, data interface{}, err error) {
if err != nil {
@@ -884,7 +856,7 @@ func Comment(ctx *middleware.Context) {
}
if comment != nil {
- uploadFiles(ctx, issue.ID, comment.Id)
+ // uploadFiles(ctx, issue.ID, comment.Id)
}
// Notify watchers.
@@ -1194,25 +1166,6 @@ func DeleteMilestone(ctx *middleware.Context) {
})
}
-func IssueGetAttachment(ctx *middleware.Context) {
- id := com.StrTo(ctx.Params(":id")).MustInt64()
- if id == 0 {
- ctx.Error(404)
- return
- }
-
- attachment, err := models.GetAttachmentById(id)
-
- if err != nil {
- ctx.Handle(404, "models.GetAttachmentById", err)
- return
- }
-
- // Fix #312. Attachments with , in their name are not handled correctly by Google Chrome.
- // We must put the name in " manually.
- ctx.ServeFile(attachment.Path, "\""+attachment.Name+"\"")
-}
-
func PullRequest2(ctx *middleware.Context) {
ctx.HTML(200, "repo/pr2/list")
}