code.gitea.io/gitea@v1.22.3/modules/repository/fork.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repository 5 6 import ( 7 "context" 8 9 "code.gitea.io/gitea/models/organization" 10 repo_model "code.gitea.io/gitea/models/repo" 11 user_model "code.gitea.io/gitea/models/user" 12 ) 13 14 // CanUserForkRepo returns true if specified user can fork repository. 15 func CanUserForkRepo(ctx context.Context, user *user_model.User, repo *repo_model.Repository) (bool, error) { 16 if user == nil { 17 return false, nil 18 } 19 if repo.OwnerID != user.ID && !repo_model.HasForkedRepo(ctx, user.ID, repo.ID) { 20 return true, nil 21 } 22 ownedOrgs, err := organization.GetOrgsCanCreateRepoByUserID(ctx, user.ID) 23 if err != nil { 24 return false, err 25 } 26 for _, org := range ownedOrgs { 27 if repo.OwnerID != org.ID && !repo_model.HasForkedRepo(ctx, org.ID, repo.ID) { 28 return true, nil 29 } 30 } 31 return false, nil 32 }