mirror of
https://github.com/go-gitea/gitea.git
synced 2025-10-24 17:14:30 +02:00
* Create API endpoints for repo topics.
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Generate swagger
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Add documentation to functions
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Grammar fix
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Fix function comment
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Can't use FindTopics when looking for a single repo topic, as it doesnt use exact match
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Add PUT /repos/{owner}/{repo}/topics and remove GET /repos/{owner}/{repo}/topics
* Ignore if topic is sent twice in same request, refactoring.
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Fix topic dropdown with api changes.
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Style fix
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Update API documentation
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Better way to handle duplicate topics in slice
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Make response element TopicName an array of strings, instead of using an array of TopicName
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Add test cases for API Repo Topics.
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Fix format of tests
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Fix comments
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Fix unit tests after adding some more topics to the test fixture.
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Update models/topic.go
Limit multiple if else if ...
Co-Authored-By: Antoine GIRARD <sapk@users.noreply.github.com>
* Engine as first parameter in function
Co-Authored-By: Antoine GIRARD <sapk@users.noreply.github.com>
* Replace magic numbers with http status code constants.
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Fix variable scope
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Test one read with login and one with token
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Add some more tests
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Apply suggestions from code review
Use empty struct for efficiency
Co-Authored-By: Lauris BH <lauris@nix.lv>
* Add test case to check access for user with write access
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Fix access, repo admin required to change topics
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Correct first test to be without token
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
* Any repo reader should be able to access topics.
* No need for string pointer
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
// Copyright 2018 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 (
|
|
"strings"
|
|
|
|
"code.gitea.io/gitea/models"
|
|
"code.gitea.io/gitea/modules/context"
|
|
"code.gitea.io/gitea/modules/log"
|
|
)
|
|
|
|
// 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.",
|
|
})
|
|
return
|
|
}
|
|
|
|
var topics = make([]string, 0)
|
|
var topicsStr = strings.TrimSpace(ctx.Query("topics"))
|
|
if len(topicsStr) > 0 {
|
|
topics = strings.Split(topicsStr, ",")
|
|
}
|
|
|
|
validTopics, invalidTopics := models.SanitizeAndValidateTopics(topics)
|
|
|
|
if len(validTopics) > 25 {
|
|
ctx.JSON(422, map[string]interface{}{
|
|
"invalidTopics": nil,
|
|
"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, validTopics...)
|
|
if err != nil {
|
|
log.Error("SaveTopics failed: %v", err)
|
|
ctx.JSON(500, map[string]interface{}{
|
|
"message": "Save topics failed.",
|
|
})
|
|
return
|
|
}
|
|
|
|
ctx.JSON(200, map[string]interface{}{
|
|
"status": "ok",
|
|
})
|
|
}
|