mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00: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)
 | 
			
		||||
	ctx.Status(http.StatusOK)
 | 
			
		||||
	ctx.Status(http.StatusNoContent)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -257,7 +257,9 @@ func GetArchive(ctx *context.APIContext) {
 | 
			
		|||
	// ---
 | 
			
		||||
	// summary: Get an archive of a repository
 | 
			
		||||
	// produces:
 | 
			
		||||
	// - application/json
 | 
			
		||||
	// - application/octet-stream
 | 
			
		||||
	// - application/zip
 | 
			
		||||
	// - application/gzip
 | 
			
		||||
	// parameters:
 | 
			
		||||
	// - name: owner
 | 
			
		||||
	//   in: path
 | 
			
		||||
| 
						 | 
				
			
			@ -337,7 +339,17 @@ func download(ctx *context.APIContext, archiveName string, archiver *repo_model.
 | 
			
		|||
	}
 | 
			
		||||
	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{
 | 
			
		||||
		ContentType:  contentType,
 | 
			
		||||
		Filename:     downloadName,
 | 
			
		||||
		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}": {
 | 
			
		||||
      "get": {
 | 
			
		||||
        "produces": [
 | 
			
		||||
          "application/json"
 | 
			
		||||
          "application/octet-stream",
 | 
			
		||||
          "application/zip",
 | 
			
		||||
          "application/gzip"
 | 
			
		||||
        ],
 | 
			
		||||
        "tags": [
 | 
			
		||||
          "repository"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -254,14 +254,14 @@ func TestAPIRenameUser(t *testing.T) {
 | 
			
		|||
		// required
 | 
			
		||||
		"new_name": "User2",
 | 
			
		||||
	}).AddTokenAuth(token)
 | 
			
		||||
	MakeRequest(t, req, http.StatusOK)
 | 
			
		||||
	MakeRequest(t, req, http.StatusNoContent)
 | 
			
		||||
 | 
			
		||||
	urlStr = fmt.Sprintf("/api/v1/admin/users/%s/rename", "User2")
 | 
			
		||||
	req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
 | 
			
		||||
		// required
 | 
			
		||||
		"new_name": "User2-2-2",
 | 
			
		||||
	}).AddTokenAuth(token)
 | 
			
		||||
	MakeRequest(t, req, http.StatusOK)
 | 
			
		||||
	MakeRequest(t, req, http.StatusNoContent)
 | 
			
		||||
 | 
			
		||||
	req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
 | 
			
		||||
		// required
 | 
			
		||||
| 
						 | 
				
			
			@ -281,7 +281,7 @@ func TestAPIRenameUser(t *testing.T) {
 | 
			
		|||
		// required
 | 
			
		||||
		"new_name": "user2",
 | 
			
		||||
	}).AddTokenAuth(token)
 | 
			
		||||
	MakeRequest(t, req, http.StatusOK)
 | 
			
		||||
	MakeRequest(t, req, http.StatusNoContent)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestAPICron(t *testing.T) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,18 +32,21 @@ func TestAPIDownloadArchive(t *testing.T) {
 | 
			
		|||
	bs, err := io.ReadAll(resp.Body)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	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))
 | 
			
		||||
	resp = MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusOK)
 | 
			
		||||
	bs, err = io.ReadAll(resp.Body)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	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))
 | 
			
		||||
	resp = MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusOK)
 | 
			
		||||
	bs, err = io.ReadAll(resp.Body)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	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))
 | 
			
		||||
	MakeRequest(t, NewRequest(t, "GET", link.String()).AddTokenAuth(token), http.StatusBadRequest)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue