code.gitea.io/gitea@v1.19.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  	"code.gitea.io/gitea/models/organization"
     8  	repo_model "code.gitea.io/gitea/models/repo"
     9  	user_model "code.gitea.io/gitea/models/user"
    10  )
    11  
    12  // CanUserForkRepo returns true if specified user can fork repository.
    13  func CanUserForkRepo(user *user_model.User, repo *repo_model.Repository) (bool, error) {
    14  	if user == nil {
    15  		return false, nil
    16  	}
    17  	if repo.OwnerID != user.ID && !repo_model.HasForkedRepo(user.ID, repo.ID) {
    18  		return true, nil
    19  	}
    20  	ownedOrgs, err := organization.GetOrgsCanCreateRepoByUserID(user.ID)
    21  	if err != nil {
    22  		return false, err
    23  	}
    24  	for _, org := range ownedOrgs {
    25  		if repo.OwnerID != org.ID && !repo_model.HasForkedRepo(org.ID, repo.ID) {
    26  			return true, nil
    27  		}
    28  	}
    29  	return false, nil
    30  }