mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-22 21:35:35 +03:00
[GITEA] Fix API inconsistencies
- Document the correct content types for Git archives. Add code that actually sets the correct application type for `.zip` and `.tar.gz`. - When an action (POST/PUT/DELETE method) was successful, an 204 status code should be returned instead of status code 200. - Add and adjust integration testing. - Resolves #2180 - Resolves #2181 (cherry picked from commit6c8c4512b5
) (cherry picked from commit3f74bcb14d
)
This commit is contained in:
parent
24870cf133
commit
6ed9057fd7
5 changed files with 23 additions and 6 deletions
|
@ -545,5 +545,5 @@ func RenameUser(ctx *context.APIContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Trace("User name changed: %s -> %s", oldName, newName)
|
log.Trace("User name changed: %s -> %s", oldName, newName)
|
||||||
ctx.Status(http.StatusOK)
|
ctx.Status(http.StatusNoContent)
|
||||||
}
|
}
|
||||||
|
|
|
@ -257,7 +257,9 @@ func GetArchive(ctx *context.APIContext) {
|
||||||
// ---
|
// ---
|
||||||
// summary: Get an archive of a repository
|
// summary: Get an archive of a repository
|
||||||
// produces:
|
// produces:
|
||||||
// - application/json
|
// - application/octet-stream
|
||||||
|
// - application/zip
|
||||||
|
// - application/gzip
|
||||||
// parameters:
|
// parameters:
|
||||||
// - name: owner
|
// - name: owner
|
||||||
// in: path
|
// in: path
|
||||||
|
@ -337,7 +339,17 @@ func download(ctx *context.APIContext, archiveName string, archiver *repo_model.
|
||||||
}
|
}
|
||||||
defer fr.Close()
|
defer fr.Close()
|
||||||
|
|
||||||
|
contentType := ""
|
||||||
|
switch archiver.Type {
|
||||||
|
case git.ZIP:
|
||||||
|
contentType = "application/zip"
|
||||||
|
case git.TARGZ:
|
||||||
|
// Per RFC6713.
|
||||||
|
contentType = "application/gzip"
|
||||||
|
}
|
||||||
|
|
||||||
ctx.ServeContent(fr, &context.ServeHeaderOptions{
|
ctx.ServeContent(fr, &context.ServeHeaderOptions{
|
||||||
|
ContentType: contentType,
|
||||||
Filename: downloadName,
|
Filename: downloadName,
|
||||||
LastModified: archiver.CreatedUnix.AsLocalTime(),
|
LastModified: archiver.CreatedUnix.AsLocalTime(),
|
||||||
})
|
})
|
||||||
|
|
4
templates/swagger/v1_json.tmpl
generated
4
templates/swagger/v1_json.tmpl
generated
|
@ -3533,7 +3533,9 @@
|
||||||
"/repos/{owner}/{repo}/archive/{archive}": {
|
"/repos/{owner}/{repo}/archive/{archive}": {
|
||||||
"get": {
|
"get": {
|
||||||
"produces": [
|
"produces": [
|
||||||
"application/json"
|
"application/octet-stream",
|
||||||
|
"application/zip",
|
||||||
|
"application/gzip"
|
||||||
],
|
],
|
||||||
"tags": [
|
"tags": [
|
||||||
"repository"
|
"repository"
|
||||||
|
|
|
@ -254,14 +254,14 @@ func TestAPIRenameUser(t *testing.T) {
|
||||||
// required
|
// required
|
||||||
"new_name": "User2",
|
"new_name": "User2",
|
||||||
}).AddTokenAuth(token)
|
}).AddTokenAuth(token)
|
||||||
MakeRequest(t, req, http.StatusOK)
|
MakeRequest(t, req, http.StatusNoContent)
|
||||||
|
|
||||||
urlStr = fmt.Sprintf("/api/v1/admin/users/%s/rename", "User2")
|
urlStr = fmt.Sprintf("/api/v1/admin/users/%s/rename", "User2")
|
||||||
req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
|
req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
|
||||||
// required
|
// required
|
||||||
"new_name": "User2-2-2",
|
"new_name": "User2-2-2",
|
||||||
}).AddTokenAuth(token)
|
}).AddTokenAuth(token)
|
||||||
MakeRequest(t, req, http.StatusOK)
|
MakeRequest(t, req, http.StatusNoContent)
|
||||||
|
|
||||||
req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
|
req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
|
||||||
// required
|
// required
|
||||||
|
@ -281,7 +281,7 @@ func TestAPIRenameUser(t *testing.T) {
|
||||||
// required
|
// required
|
||||||
"new_name": "user2",
|
"new_name": "user2",
|
||||||
}).AddTokenAuth(token)
|
}).AddTokenAuth(token)
|
||||||
MakeRequest(t, req, http.StatusOK)
|
MakeRequest(t, req, http.StatusNoContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAPICron(t *testing.T) {
|
func TestAPICron(t *testing.T) {
|
||||||
|
|
|
@ -32,18 +32,21 @@ func TestAPIDownloadArchive(t *testing.T) {
|
||||||
bs, err := io.ReadAll(resp.Body)
|
bs, err := io.ReadAll(resp.Body)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Len(t, bs, 320)
|
assert.Len(t, bs, 320)
|
||||||
|
assert.EqualValues(t, "application/zip", resp.Header().Get("Content-Type"))
|
||||||
|
|
||||||
link, _ = url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master.tar.gz", user2.Name, repo.Name))
|
link, _ = url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master.tar.gz", user2.Name, repo.Name))
|
||||||
resp = MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusOK)
|
resp = MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusOK)
|
||||||
bs, err = io.ReadAll(resp.Body)
|
bs, err = io.ReadAll(resp.Body)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Len(t, bs, 266)
|
assert.Len(t, bs, 266)
|
||||||
|
assert.EqualValues(t, "application/gzip", resp.Header().Get("Content-Type"))
|
||||||
|
|
||||||
link, _ = url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master.bundle", user2.Name, repo.Name))
|
link, _ = url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master.bundle", user2.Name, repo.Name))
|
||||||
resp = MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusOK)
|
resp = MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusOK)
|
||||||
bs, err = io.ReadAll(resp.Body)
|
bs, err = io.ReadAll(resp.Body)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Len(t, bs, 382)
|
assert.Len(t, bs, 382)
|
||||||
|
assert.EqualValues(t, "application/octet-stream", resp.Header().Get("Content-Type"))
|
||||||
|
|
||||||
link, _ = url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master", user2.Name, repo.Name))
|
link, _ = url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/archive/master", user2.Name, repo.Name))
|
||||||
MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusBadRequest)
|
MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusBadRequest)
|
||||||
|
|
Loading…
Reference in a new issue