From 1e1b85270f93b3bca624c99b478f3a9a23be2395 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sat, 29 Sep 2012 23:40:46 -0400 Subject: [PATCH] Preliminary implementation of server-side forking (issue 137) --- src/com/gitblit/models/UserModel.java | 29 +++++++++++++++++++++++++++++ 1 files changed, 29 insertions(+), 0 deletions(-) diff --git a/src/com/gitblit/models/UserModel.java b/src/com/gitblit/models/UserModel.java index 8349bab..0ede878 100644 --- a/src/com/gitblit/models/UserModel.java +++ b/src/com/gitblit/models/UserModel.java @@ -20,6 +20,7 @@ import java.util.HashSet; import java.util.Set; +import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.Constants.AuthorizationControl; import com.gitblit.utils.StringUtils; @@ -42,6 +43,7 @@ public String displayName; public String emailAddress; public boolean canAdmin; + public boolean canFork; public boolean excludeFromFederation; public final Set<String> repositories = new HashSet<String>(); public final Set<TeamModel> teams = new HashSet<TeamModel>(); @@ -83,6 +85,33 @@ } return false; } + + public boolean canForkRepository(RepositoryModel repository) { + if (canAdmin) { + return true; + } + if (!canFork) { + // user has been prohibited from forking + return false; + } + if (!isAuthenticated) { + // unauthenticated user model + return false; + } + if (("~" + username).equalsIgnoreCase(repository.projectPath)) { + // this repository is already a personal repository + return false; + } + if (!repository.allowForks) { + // repository prohibits forks + return false; + } + if (repository.accessRestriction.atLeast(AccessRestrictionType.CLONE)) { + return canAccessRepository(repository); + } + // repository is not clone-restricted + return true; + } public boolean hasRepository(String name) { return repositories.contains(name.toLowerCase()); -- Gitblit v1.9.1