mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	add api for user to create org (#5268)
* add api for user to create org * remove unused blank line on the swagger file end * fix create and add test * fix tests * fix routes of create org API * fix bug * add copyright heads
This commit is contained in:
		
				
					committed by
					
						 techknowlogick
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							499bff43d9
						
					
				
				
					commit
					8ef177f8c5
				
			
							
								
								
									
										48
									
								
								integrations/api_org_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								integrations/api_org_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | |||||||
|  | // 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 integrations | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"net/http" | ||||||
|  | 	"strings" | ||||||
|  | 	"testing" | ||||||
|  |  | ||||||
|  | 	"code.gitea.io/gitea/models" | ||||||
|  | 	api "code.gitea.io/sdk/gitea" | ||||||
|  |  | ||||||
|  | 	"github.com/stretchr/testify/assert" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestAPIOrg(t *testing.T) { | ||||||
|  | 	prepareTestEnv(t) | ||||||
|  |  | ||||||
|  | 	session := loginUser(t, "user1") | ||||||
|  |  | ||||||
|  | 	token := getTokenForLoggedInUser(t, session) | ||||||
|  | 	var org = api.CreateOrgOption{ | ||||||
|  | 		UserName:    "user1_org", | ||||||
|  | 		FullName:    "User1's organization", | ||||||
|  | 		Description: "This organization created by user1", | ||||||
|  | 		Website:     "https://try.gitea.io", | ||||||
|  | 		Location:    "Shanghai", | ||||||
|  | 	} | ||||||
|  | 	req := NewRequestWithJSON(t, "POST", "/api/v1/orgs?token="+token, &org) | ||||||
|  | 	resp := session.MakeRequest(t, req, http.StatusCreated) | ||||||
|  |  | ||||||
|  | 	var apiOrg api.Organization | ||||||
|  | 	DecodeJSON(t, resp, &apiOrg) | ||||||
|  |  | ||||||
|  | 	assert.Equal(t, org.UserName, apiOrg.UserName) | ||||||
|  | 	assert.Equal(t, org.FullName, apiOrg.FullName) | ||||||
|  | 	assert.Equal(t, org.Description, apiOrg.Description) | ||||||
|  | 	assert.Equal(t, org.Website, apiOrg.Website) | ||||||
|  | 	assert.Equal(t, org.Location, apiOrg.Location) | ||||||
|  |  | ||||||
|  | 	models.AssertExistsAndLoadBean(t, &models.User{ | ||||||
|  | 		Name:      org.UserName, | ||||||
|  | 		LowerName: strings.ToLower(org.UserName), | ||||||
|  | 		FullName:  org.FullName, | ||||||
|  | 	}) | ||||||
|  | } | ||||||
| @@ -1,4 +1,5 @@ | |||||||
| // Copyright 2015 The Gogs Authors. All rights reserved. | // Copyright 2015 The Gogs Authors. All rights reserved. | ||||||
|  | // Copyright 2018 The Gitea Authors. All rights reserved. | ||||||
| // Use of this source code is governed by a MIT-style | // Use of this source code is governed by a MIT-style | ||||||
| // license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
| @@ -578,6 +579,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||||
| 		// Organizations | 		// Organizations | ||||||
| 		m.Get("/user/orgs", reqToken(), org.ListMyOrgs) | 		m.Get("/user/orgs", reqToken(), org.ListMyOrgs) | ||||||
| 		m.Get("/users/:username/orgs", org.ListUserOrgs) | 		m.Get("/users/:username/orgs", org.ListUserOrgs) | ||||||
|  | 		m.Post("/orgs", reqToken(), bind(api.CreateOrgOption{}), org.Create) | ||||||
| 		m.Group("/orgs/:orgname", func() { | 		m.Group("/orgs/:orgname", func() { | ||||||
| 			m.Get("/repos", user.ListOrgRepos) | 			m.Get("/repos", user.ListOrgRepos) | ||||||
| 			m.Combo("").Get(org.Get). | 			m.Combo("").Get(org.Get). | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| // Copyright 2015 The Gogs Authors. All rights reserved. | // Copyright 2015 The Gogs Authors. All rights reserved. | ||||||
|  | // Copyright 2018 The Gitea Authors. All rights reserved. | ||||||
| // Use of this source code is governed by a MIT-style | // Use of this source code is governed by a MIT-style | ||||||
| // license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
| @@ -62,6 +63,56 @@ func ListUserOrgs(ctx *context.APIContext) { | |||||||
| 	listUserOrgs(ctx, u, false) | 	listUserOrgs(ctx, u, false) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Create api for create organization | ||||||
|  | func Create(ctx *context.APIContext, form api.CreateOrgOption) { | ||||||
|  | 	// swagger:operation POST /orgs organization orgCreate | ||||||
|  | 	// --- | ||||||
|  | 	// summary: Create an organization | ||||||
|  | 	// consumes: | ||||||
|  | 	// - application/json | ||||||
|  | 	// produces: | ||||||
|  | 	// - application/json | ||||||
|  | 	// parameters: | ||||||
|  | 	// - name: organization | ||||||
|  | 	//   in: body | ||||||
|  | 	//   required: true | ||||||
|  | 	//   schema: { "$ref": "#/definitions/CreateOrgOption" } | ||||||
|  | 	// responses: | ||||||
|  | 	//   "201": | ||||||
|  | 	//     "$ref": "#/responses/Organization" | ||||||
|  | 	//   "403": | ||||||
|  | 	//     "$ref": "#/responses/forbidden" | ||||||
|  | 	//   "422": | ||||||
|  | 	//     "$ref": "#/responses/validationError" | ||||||
|  |  | ||||||
|  | 	if !ctx.User.AllowCreateOrganization { | ||||||
|  | 		ctx.Error(403, "Create organization not allowed", nil) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	org := &models.User{ | ||||||
|  | 		Name:        form.UserName, | ||||||
|  | 		FullName:    form.FullName, | ||||||
|  | 		Description: form.Description, | ||||||
|  | 		Website:     form.Website, | ||||||
|  | 		Location:    form.Location, | ||||||
|  | 		IsActive:    true, | ||||||
|  | 		Type:        models.UserTypeOrganization, | ||||||
|  | 	} | ||||||
|  | 	if err := models.CreateOrganization(org, ctx.User); err != nil { | ||||||
|  | 		if models.IsErrUserAlreadyExist(err) || | ||||||
|  | 			models.IsErrNameReserved(err) || | ||||||
|  | 			models.IsErrNamePatternNotAllowed(err) { | ||||||
|  | 			ctx.Error(422, "", err) | ||||||
|  | 		} else { | ||||||
|  | 			ctx.Error(500, "CreateOrganization", err) | ||||||
|  | 		} | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	ctx.JSON(201, convert.ToOrganization(org)) | ||||||
|  | } | ||||||
|  |  | ||||||
| // Get get an organization | // Get get an organization | ||||||
| func Get(ctx *context.APIContext) { | func Get(ctx *context.APIContext) { | ||||||
| 	// swagger:operation GET /orgs/{org} organization orgGet | 	// swagger:operation GET /orgs/{org} organization orgGet | ||||||
|   | |||||||
| @@ -406,6 +406,42 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "/orgs": { | ||||||
|  |       "post": { | ||||||
|  |         "consumes": [ | ||||||
|  |           "application/json" | ||||||
|  |         ], | ||||||
|  |         "produces": [ | ||||||
|  |           "application/json" | ||||||
|  |         ], | ||||||
|  |         "tags": [ | ||||||
|  |           "organization" | ||||||
|  |         ], | ||||||
|  |         "summary": "Create an organization", | ||||||
|  |         "operationId": "orgCreate", | ||||||
|  |         "parameters": [ | ||||||
|  |           { | ||||||
|  |             "name": "organization", | ||||||
|  |             "in": "body", | ||||||
|  |             "required": true, | ||||||
|  |             "schema": { | ||||||
|  |               "$ref": "#/definitions/CreateOrgOption" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "responses": { | ||||||
|  |           "201": { | ||||||
|  |             "$ref": "#/responses/Organization" | ||||||
|  |           }, | ||||||
|  |           "403": { | ||||||
|  |             "$ref": "#/responses/forbidden" | ||||||
|  |           }, | ||||||
|  |           "422": { | ||||||
|  |             "$ref": "#/responses/validationError" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "/orgs/{org}": { |     "/orgs/{org}": { | ||||||
|       "get": { |       "get": { | ||||||
|         "produces": [ |         "produces": [ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user