From 8421b8264fd7715ec93b13f37be31a945faec556 Mon Sep 17 00:00:00 2001 From: Zettat123 Date: Tue, 14 Mar 2023 05:55:30 +0800 Subject: [PATCH] Handle missing `README` in create repos API (#23387) Close #22934 In `/user/repos` API (and other APIs related to creating repos), user can specify a readme template for auto init. At present, if the specified template does not exist, a `500` will be returned . This PR improved the logic and will return a `400` instead of `500`. --- routers/api/v1/admin/repo.go | 2 ++ routers/api/v1/repo/repo.go | 11 +++++++++++ templates/swagger/v1_json.tmpl | 9 +++++++++ 3 files changed, 22 insertions(+) diff --git a/routers/api/v1/admin/repo.go b/routers/api/v1/admin/repo.go index 83ed06e49bc..a4895f260be 100644 --- a/routers/api/v1/admin/repo.go +++ b/routers/api/v1/admin/repo.go @@ -32,6 +32,8 @@ func CreateRepo(ctx *context.APIContext) { // responses: // "201": // "$ref": "#/responses/Repository" + // "400": + // "$ref": "#/responses/error" // "403": // "$ref": "#/responses/forbidden" // "404": diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 397600dc50a..16608e5bbbd 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -231,6 +231,13 @@ func CreateUserRepo(ctx *context.APIContext, owner *user_model.User, opt api.Cre if opt.AutoInit && opt.Readme == "" { opt.Readme = "Default" } + + // If the readme template does not exist, a 400 will be returned. + if opt.AutoInit && len(opt.Readme) > 0 && !util.SliceContains(repo_module.Readmes, opt.Readme) { + ctx.Error(http.StatusBadRequest, "", fmt.Errorf("readme template does not exist, available templates: %v", repo_module.Readmes)) + return + } + repo, err := repo_service.CreateRepository(ctx, ctx.Doer, owner, repo_module.CreateRepoOptions{ Name: opt.Name, Description: opt.Description, @@ -283,6 +290,8 @@ func Create(ctx *context.APIContext) { // responses: // "201": // "$ref": "#/responses/Repository" + // "400": + // "$ref": "#/responses/error" // "409": // description: The repository with the same name already exists. // "422": @@ -464,6 +473,8 @@ func CreateOrgRepo(ctx *context.APIContext) { // responses: // "201": // "$ref": "#/responses/Repository" + // "400": + // "$ref": "#/responses/error" // "404": // "$ref": "#/responses/notFound" // "403": diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 9c46b25eafc..c304a7a4979 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -713,6 +713,9 @@ "201": { "$ref": "#/responses/Repository" }, + "400": { + "$ref": "#/responses/error" + }, "403": { "$ref": "#/responses/forbidden" }, @@ -1926,6 +1929,9 @@ "201": { "$ref": "#/responses/Repository" }, + "400": { + "$ref": "#/responses/error" + }, "403": { "$ref": "#/responses/forbidden" }, @@ -13382,6 +13388,9 @@ "201": { "$ref": "#/responses/Repository" }, + "400": { + "$ref": "#/responses/error" + }, "409": { "description": "The repository with the same name already exists." },