summaryrefslogtreecommitdiffstats
path: root/routers/repo/topic.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/repo/topic.go')
-rw-r--r--routers/repo/topic.go35
1 files changed, 33 insertions, 2 deletions
diff --git a/routers/repo/topic.go b/routers/repo/topic.go
index 2a43d53ff0..63fcf793f9 100644
--- a/routers/repo/topic.go
+++ b/routers/repo/topic.go
@@ -12,8 +12,8 @@ import (
"code.gitea.io/gitea/modules/log"
)
-// TopicPost response for creating repository
-func TopicPost(ctx *context.Context) {
+// TopicsPost response for creating repository
+func TopicsPost(ctx *context.Context) {
if ctx.User == nil {
ctx.JSON(403, map[string]interface{}{
"message": "Only owners could change the topics.",
@@ -27,6 +27,37 @@ func TopicPost(ctx *context.Context) {
topics = strings.Split(topicsStr, ",")
}
+ invalidTopics := make([]string, 0)
+ i := 0
+ for _, topic := range topics {
+ topic = strings.TrimSpace(strings.ToLower(topic))
+ // ignore empty string
+ if len(topic) > 0 {
+ topics[i] = topic
+ i++
+ }
+ if !models.ValidateTopic(topic) {
+ invalidTopics = append(invalidTopics, topic)
+ }
+ }
+ topics = topics[:i]
+
+ if len(topics) > 25 {
+ ctx.JSON(422, map[string]interface{}{
+ "invalidTopics": topics[:0],
+ "message": ctx.Tr("repo.topic.count_prompt"),
+ })
+ return
+ }
+
+ if len(invalidTopics) > 0 {
+ ctx.JSON(422, map[string]interface{}{
+ "invalidTopics": invalidTopics,
+ "message": ctx.Tr("repo.topic.format_prompt"),
+ })
+ return
+ }
+
err := models.SaveTopics(ctx.Repo.Repository.ID, topics...)
if err != nil {
log.Error(2, "SaveTopics failed: %v", err)