|
|
|
@ -20,7 +20,7 @@ import (
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
// https://github.com/gogits/go-gogs-client/wiki/Repositories#search-repositories
|
|
|
|
|
func Search(ctx *context.Context) { |
|
|
|
|
func Search(ctx *context.APIContext) { |
|
|
|
|
opts := &models.SearchRepoOptions{ |
|
|
|
|
Keyword: path.Base(ctx.Query("q")), |
|
|
|
|
OwnerID: com.StrTo(ctx.Query("uid")).MustInt64(), |
|
|
|
@ -81,17 +81,17 @@ func Search(ctx *context.Context) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// https://github.com/gogits/go-gogs-client/wiki/Repositories#list-your-repositories
|
|
|
|
|
func ListMyRepos(ctx *context.Context) { |
|
|
|
|
func ListMyRepos(ctx *context.APIContext) { |
|
|
|
|
ownRepos, err := models.GetRepositories(ctx.User.Id, true) |
|
|
|
|
if err != nil { |
|
|
|
|
ctx.APIError(500, "GetRepositories", err) |
|
|
|
|
ctx.Error(500, "GetRepositories", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
numOwnRepos := len(ownRepos) |
|
|
|
|
|
|
|
|
|
accessibleRepos, err := ctx.User.GetRepositoryAccesses() |
|
|
|
|
if err != nil { |
|
|
|
|
ctx.APIError(500, "GetRepositoryAccesses", err) |
|
|
|
|
ctx.Error(500, "GetRepositoryAccesses", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -113,7 +113,7 @@ func ListMyRepos(ctx *context.Context) {
|
|
|
|
|
ctx.JSON(200, &repos) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func CreateUserRepo(ctx *context.Context, owner *models.User, opt api.CreateRepoOption) { |
|
|
|
|
func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateRepoOption) { |
|
|
|
|
repo, err := models.CreateRepository(owner, models.CreateRepoOptions{ |
|
|
|
|
Name: opt.Name, |
|
|
|
|
Description: opt.Description, |
|
|
|
@ -127,14 +127,14 @@ func CreateUserRepo(ctx *context.Context, owner *models.User, opt api.CreateRepo
|
|
|
|
|
if models.IsErrRepoAlreadyExist(err) || |
|
|
|
|
models.IsErrNameReserved(err) || |
|
|
|
|
models.IsErrNamePatternNotAllowed(err) { |
|
|
|
|
ctx.APIError(422, "", err) |
|
|
|
|
ctx.Error(422, "", err) |
|
|
|
|
} else { |
|
|
|
|
if repo != nil { |
|
|
|
|
if err = models.DeleteRepository(ctx.User.Id, repo.ID); err != nil { |
|
|
|
|
log.Error(4, "DeleteRepository: %v", err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
ctx.APIError(500, "CreateRepository", err) |
|
|
|
|
ctx.Error(500, "CreateRepository", err) |
|
|
|
|
} |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
@ -143,35 +143,35 @@ func CreateUserRepo(ctx *context.Context, owner *models.User, opt api.CreateRepo
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// https://github.com/gogits/go-gogs-client/wiki/Repositories#create
|
|
|
|
|
func Create(ctx *context.Context, opt api.CreateRepoOption) { |
|
|
|
|
func Create(ctx *context.APIContext, opt api.CreateRepoOption) { |
|
|
|
|
// Shouldn't reach this condition, but just in case.
|
|
|
|
|
if ctx.User.IsOrganization() { |
|
|
|
|
ctx.APIError(422, "", "not allowed creating repository for organization") |
|
|
|
|
ctx.Error(422, "", "not allowed creating repository for organization") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
CreateUserRepo(ctx, ctx.User, opt) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func CreateOrgRepo(ctx *context.Context, opt api.CreateRepoOption) { |
|
|
|
|
func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) { |
|
|
|
|
org, err := models.GetOrgByName(ctx.Params(":org")) |
|
|
|
|
if err != nil { |
|
|
|
|
if models.IsErrUserNotExist(err) { |
|
|
|
|
ctx.APIError(422, "", err) |
|
|
|
|
ctx.Error(422, "", err) |
|
|
|
|
} else { |
|
|
|
|
ctx.APIError(500, "GetOrgByName", err) |
|
|
|
|
ctx.Error(500, "GetOrgByName", err) |
|
|
|
|
} |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if !org.IsOwnedBy(ctx.User.Id) { |
|
|
|
|
ctx.APIError(403, "", "Given user is not owner of organization.") |
|
|
|
|
ctx.Error(403, "", "Given user is not owner of organization.") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
CreateUserRepo(ctx, org, opt) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// https://github.com/gogits/go-gogs-client/wiki/Repositories#migrate
|
|
|
|
|
func Migrate(ctx *context.Context, form auth.MigrateRepoForm) { |
|
|
|
|
func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) { |
|
|
|
|
ctxUser := ctx.User |
|
|
|
|
// Not equal means context user is an organization,
|
|
|
|
|
// or is another user/organization if current user is admin.
|
|
|
|
@ -179,9 +179,9 @@ func Migrate(ctx *context.Context, form auth.MigrateRepoForm) {
|
|
|
|
|
org, err := models.GetUserByID(form.Uid) |
|
|
|
|
if err != nil { |
|
|
|
|
if models.IsErrUserNotExist(err) { |
|
|
|
|
ctx.APIError(422, "", err) |
|
|
|
|
ctx.Error(422, "", err) |
|
|
|
|
} else { |
|
|
|
|
ctx.APIError(500, "GetUserByID", err) |
|
|
|
|
ctx.Error(500, "GetUserByID", err) |
|
|
|
|
} |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
@ -189,14 +189,14 @@ func Migrate(ctx *context.Context, form auth.MigrateRepoForm) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ctx.HasError() { |
|
|
|
|
ctx.APIError(422, "", ctx.GetErrMsg()) |
|
|
|
|
ctx.Error(422, "", ctx.GetErrMsg()) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ctxUser.IsOrganization() && !ctx.User.IsAdmin { |
|
|
|
|
// Check ownership of organization.
|
|
|
|
|
if !ctxUser.IsOwnedBy(ctx.User.Id) { |
|
|
|
|
ctx.APIError(403, "", "Given user is not owner of organization.") |
|
|
|
|
ctx.Error(403, "", "Given user is not owner of organization.") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -207,16 +207,16 @@ func Migrate(ctx *context.Context, form auth.MigrateRepoForm) {
|
|
|
|
|
addrErr := err.(models.ErrInvalidCloneAddr) |
|
|
|
|
switch { |
|
|
|
|
case addrErr.IsURLError: |
|
|
|
|
ctx.APIError(422, "", err) |
|
|
|
|
ctx.Error(422, "", err) |
|
|
|
|
case addrErr.IsPermissionDenied: |
|
|
|
|
ctx.APIError(422, "", "You are not allowed to import local repositories.") |
|
|
|
|
ctx.Error(422, "", "You are not allowed to import local repositories.") |
|
|
|
|
case addrErr.IsInvalidPath: |
|
|
|
|
ctx.APIError(422, "", "Invalid local path, it does not exist or not a directory.") |
|
|
|
|
ctx.Error(422, "", "Invalid local path, it does not exist or not a directory.") |
|
|
|
|
default: |
|
|
|
|
ctx.APIError(500, "ParseRemoteAddr", "Unknown error type (ErrInvalidCloneAddr): "+err.Error()) |
|
|
|
|
ctx.Error(500, "ParseRemoteAddr", "Unknown error type (ErrInvalidCloneAddr): "+err.Error()) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
ctx.APIError(500, "ParseRemoteAddr", err) |
|
|
|
|
ctx.Error(500, "ParseRemoteAddr", err) |
|
|
|
|
} |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
@ -234,7 +234,7 @@ func Migrate(ctx *context.Context, form auth.MigrateRepoForm) {
|
|
|
|
|
log.Error(4, "DeleteRepository: %v", errDelete) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
ctx.APIError(500, "MigrateRepository", models.HandleCloneUserCredentials(err.Error(), true)) |
|
|
|
|
ctx.Error(500, "MigrateRepository", models.HandleCloneUserCredentials(err.Error(), true)) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -242,13 +242,13 @@ func Migrate(ctx *context.Context, form auth.MigrateRepoForm) {
|
|
|
|
|
ctx.JSON(201, convert.ToApiRepository(ctxUser, repo, api.Permission{true, true, true})) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func parseOwnerAndRepo(ctx *context.Context) (*models.User, *models.Repository) { |
|
|
|
|
func parseOwnerAndRepo(ctx *context.APIContext) (*models.User, *models.Repository) { |
|
|
|
|
owner, err := models.GetUserByName(ctx.Params(":username")) |
|
|
|
|
if err != nil { |
|
|
|
|
if models.IsErrUserNotExist(err) { |
|
|
|
|
ctx.APIError(422, "", err) |
|
|
|
|
ctx.Error(422, "", err) |
|
|
|
|
} else { |
|
|
|
|
ctx.APIError(500, "GetUserByName", err) |
|
|
|
|
ctx.Error(500, "GetUserByName", err) |
|
|
|
|
} |
|
|
|
|
return nil, nil |
|
|
|
|
} |
|
|
|
@ -256,9 +256,9 @@ func parseOwnerAndRepo(ctx *context.Context) (*models.User, *models.Repository)
|
|
|
|
|
repo, err := models.GetRepositoryByName(owner.Id, ctx.Params(":reponame")) |
|
|
|
|
if err != nil { |
|
|
|
|
if models.IsErrRepoNotExist(err) { |
|
|
|
|
ctx.Error(404) |
|
|
|
|
ctx.Status(404) |
|
|
|
|
} else { |
|
|
|
|
ctx.APIError(500, "GetRepositoryByName", err) |
|
|
|
|
ctx.Error(500, "GetRepositoryByName", err) |
|
|
|
|
} |
|
|
|
|
return nil, nil |
|
|
|
|
} |
|
|
|
@ -267,7 +267,7 @@ func parseOwnerAndRepo(ctx *context.Context) (*models.User, *models.Repository)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// https://github.com/gogits/go-gogs-client/wiki/Repositories#get
|
|
|
|
|
func Get(ctx *context.Context) { |
|
|
|
|
func Get(ctx *context.APIContext) { |
|
|
|
|
owner, repo := parseOwnerAndRepo(ctx) |
|
|
|
|
if ctx.Written() { |
|
|
|
|
return |
|
|
|
@ -277,19 +277,19 @@ func Get(ctx *context.Context) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// https://github.com/gogits/go-gogs-client/wiki/Repositories#delete
|
|
|
|
|
func Delete(ctx *context.Context) { |
|
|
|
|
func Delete(ctx *context.APIContext) { |
|
|
|
|
owner, repo := parseOwnerAndRepo(ctx) |
|
|
|
|
if ctx.Written() { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if owner.IsOrganization() && !owner.IsOwnedBy(ctx.User.Id) { |
|
|
|
|
ctx.APIError(403, "", "Given user is not owner of organization.") |
|
|
|
|
ctx.Error(403, "", "Given user is not owner of organization.") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := models.DeleteRepository(owner.Id, repo.ID); err != nil { |
|
|
|
|
ctx.APIError(500, "DeleteRepository", err) |
|
|
|
|
ctx.Error(500, "DeleteRepository", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|