code.gitea.io/gitea@v1.21.7/routers/api/v1/admin/adopt.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package admin 5 6 import ( 7 "net/http" 8 9 repo_model "code.gitea.io/gitea/models/repo" 10 user_model "code.gitea.io/gitea/models/user" 11 "code.gitea.io/gitea/modules/context" 12 "code.gitea.io/gitea/modules/util" 13 "code.gitea.io/gitea/routers/api/v1/utils" 14 repo_service "code.gitea.io/gitea/services/repository" 15 ) 16 17 // ListUnadoptedRepositories lists the unadopted repositories that match the provided names 18 func ListUnadoptedRepositories(ctx *context.APIContext) { 19 // swagger:operation GET /admin/unadopted admin adminUnadoptedList 20 // --- 21 // summary: List unadopted repositories 22 // produces: 23 // - application/json 24 // parameters: 25 // - name: page 26 // in: query 27 // description: page number of results to return (1-based) 28 // type: integer 29 // - name: limit 30 // in: query 31 // description: page size of results 32 // type: integer 33 // - name: pattern 34 // in: query 35 // description: pattern of repositories to search for 36 // type: string 37 // responses: 38 // "200": 39 // "$ref": "#/responses/StringSlice" 40 // "403": 41 // "$ref": "#/responses/forbidden" 42 43 listOptions := utils.GetListOptions(ctx) 44 if listOptions.Page == 0 { 45 listOptions.Page = 1 46 } 47 repoNames, count, err := repo_service.ListUnadoptedRepositories(ctx, ctx.FormString("query"), &listOptions) 48 if err != nil { 49 ctx.InternalServerError(err) 50 return 51 } 52 53 ctx.SetTotalCountHeader(int64(count)) 54 55 ctx.JSON(http.StatusOK, repoNames) 56 } 57 58 // AdoptRepository will adopt an unadopted repository 59 func AdoptRepository(ctx *context.APIContext) { 60 // swagger:operation POST /admin/unadopted/{owner}/{repo} admin adminAdoptRepository 61 // --- 62 // summary: Adopt unadopted files as a repository 63 // produces: 64 // - application/json 65 // parameters: 66 // - name: owner 67 // in: path 68 // description: owner of the repo 69 // type: string 70 // required: true 71 // - name: repo 72 // in: path 73 // description: name of the repo 74 // type: string 75 // required: true 76 // responses: 77 // "204": 78 // "$ref": "#/responses/empty" 79 // "404": 80 // "$ref": "#/responses/notFound" 81 // "403": 82 // "$ref": "#/responses/forbidden" 83 ownerName := ctx.Params(":username") 84 repoName := ctx.Params(":reponame") 85 86 ctxUser, err := user_model.GetUserByName(ctx, ownerName) 87 if err != nil { 88 if user_model.IsErrUserNotExist(err) { 89 ctx.NotFound() 90 return 91 } 92 ctx.InternalServerError(err) 93 return 94 } 95 96 // check not a repo 97 has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, repoName) 98 if err != nil { 99 ctx.InternalServerError(err) 100 return 101 } 102 isDir, err := util.IsDir(repo_model.RepoPath(ctxUser.Name, repoName)) 103 if err != nil { 104 ctx.InternalServerError(err) 105 return 106 } 107 if has || !isDir { 108 ctx.NotFound() 109 return 110 } 111 if _, err := repo_service.AdoptRepository(ctx, ctx.Doer, ctxUser, repo_service.CreateRepoOptions{ 112 Name: repoName, 113 IsPrivate: true, 114 }); err != nil { 115 ctx.InternalServerError(err) 116 return 117 } 118 119 ctx.Status(http.StatusNoContent) 120 } 121 122 // DeleteUnadoptedRepository will delete an unadopted repository 123 func DeleteUnadoptedRepository(ctx *context.APIContext) { 124 // swagger:operation DELETE /admin/unadopted/{owner}/{repo} admin adminDeleteUnadoptedRepository 125 // --- 126 // summary: Delete unadopted files 127 // produces: 128 // - application/json 129 // parameters: 130 // - name: owner 131 // in: path 132 // description: owner of the repo 133 // type: string 134 // required: true 135 // - name: repo 136 // in: path 137 // description: name of the repo 138 // type: string 139 // required: true 140 // responses: 141 // "204": 142 // "$ref": "#/responses/empty" 143 // "403": 144 // "$ref": "#/responses/forbidden" 145 ownerName := ctx.Params(":username") 146 repoName := ctx.Params(":reponame") 147 148 ctxUser, err := user_model.GetUserByName(ctx, ownerName) 149 if err != nil { 150 if user_model.IsErrUserNotExist(err) { 151 ctx.NotFound() 152 return 153 } 154 ctx.InternalServerError(err) 155 return 156 } 157 158 // check not a repo 159 has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, repoName) 160 if err != nil { 161 ctx.InternalServerError(err) 162 return 163 } 164 isDir, err := util.IsDir(repo_model.RepoPath(ctxUser.Name, repoName)) 165 if err != nil { 166 ctx.InternalServerError(err) 167 return 168 } 169 if has || !isDir { 170 ctx.NotFound() 171 return 172 } 173 174 if err := repo_service.DeleteUnadoptedRepository(ctx, ctx.Doer, ctxUser, repoName); err != nil { 175 ctx.InternalServerError(err) 176 return 177 } 178 179 ctx.Status(http.StatusNoContent) 180 }