From 644bdd5a59a5ed5fbf93a0765f92608b0530c16a Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 31 Oct 2012 23:16:24 -0400 Subject: [PATCH] Improve transparency of permissions by indicating permission source --- src/com/gitblit/Constants.java | 131 ++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 128 insertions(+), 3 deletions(-) diff --git a/src/com/gitblit/Constants.java b/src/com/gitblit/Constants.java index bbb986b..426d2df 100644 --- a/src/com/gitblit/Constants.java +++ b/src/com/gitblit/Constants.java @@ -15,6 +15,10 @@ */ package com.gitblit; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Constant values used by Gitblit. @@ -30,7 +34,7 @@ // The build script extracts this exact line so be careful editing it // and only use A-Z a-z 0-9 .-_ in the string. - public static final String VERSION = "1.0.0-SNAPSHOT"; + public static final String VERSION = "1.2.0-SNAPSHOT"; // The build script extracts this exact line so be careful editing it // and only use A-Z a-z 0-9 .-_ in the string. @@ -38,11 +42,17 @@ // The build script extracts this exact line so be careful editing it // and only use A-Z a-z 0-9 .-_ in the string. - public static final String JGIT_VERSION = "JGit 1.3.0 (201202151440-r)"; + public static final String JGIT_VERSION = "JGit 2.1.0 (201209190230-r)"; public static final String ADMIN_ROLE = "#admin"; + + public static final String FORK_ROLE = "#fork"; + + public static final String CREATE_ROLE = "#create"; public static final String NOT_FEDERATED_ROLE = "#notfederated"; + + public static final String NO_ROLE = "#none"; public static final String PROPERTIES_FILE = "gitblit.properties"; @@ -71,6 +81,12 @@ public static final int LEN_SHORTLOG_REFS = 60; public static final String DEFAULT_BRANCH = "default"; + + public static final String CONFIG_GITBLIT = "gitblit"; + + public static final String CONFIG_CUSTOM_FIELDS = "customFields"; + + public static final String ISO8601 = "yyyy-MM-dd'T'HH:mm:ssZ"; public static String getGitBlitVersion() { return NAME + " v" + VERSION; @@ -103,6 +119,28 @@ return name(); } } + + /** + * Enumeration representing the types of authorization control for an + * access restricted resource. + */ + public static enum AuthorizationControl { + AUTHENTICATED, NAMED; + + public static AuthorizationControl fromName(String name) { + for (AuthorizationControl type : values()) { + if (type.name().equalsIgnoreCase(name)) { + return type; + } + } + return NAMED; + } + + public String toString() { + return name(); + } + } + /** * Enumeration representing the types of federation tokens. @@ -214,11 +252,12 @@ public static enum RpcRequest { // Order is important here. anything above LIST_SETTINGS requires // administrator privileges and web.allowRpcManagement. - GET_PROTOCOL, LIST_REPOSITORIES, LIST_BRANCHES, LIST_SETTINGS, + CLEAR_REPOSITORY_CACHE, GET_PROTOCOL, LIST_REPOSITORIES, LIST_BRANCHES, LIST_SETTINGS, CREATE_REPOSITORY, EDIT_REPOSITORY, DELETE_REPOSITORY, LIST_USERS, CREATE_USER, EDIT_USER, DELETE_USER, LIST_TEAMS, CREATE_TEAM, EDIT_TEAM, DELETE_TEAM, LIST_REPOSITORY_MEMBERS, SET_REPOSITORY_MEMBERS, LIST_REPOSITORY_TEAMS, SET_REPOSITORY_TEAMS, + LIST_REPOSITORY_MEMBER_PERMISSIONS, SET_REPOSITORY_MEMBER_PERMISSIONS, LIST_REPOSITORY_TEAM_PERMISSIONS, SET_REPOSITORY_TEAM_PERMISSIONS, LIST_FEDERATION_REGISTRATIONS, LIST_FEDERATION_RESULTS, LIST_FEDERATION_PROPOSALS, LIST_FEDERATION_SETS, EDIT_SETTINGS, LIST_STATUS; @@ -277,4 +316,90 @@ return null; } } + + /** + * The access permissions available for a repository. + */ + public static enum AccessPermission { + NONE("N"), EXCLUDE("X"), VIEW("V"), CLONE("R"), PUSH("RW"), CREATE("RWC"), DELETE("RWD"), REWIND("RW+"); + + public static final AccessPermission [] NEWPERMISSIONS = { EXCLUDE, VIEW, CLONE, PUSH, CREATE, DELETE, REWIND }; + + public static AccessPermission LEGACY = REWIND; + + public final String code; + + private AccessPermission(String code) { + this.code = code; + } + + public boolean atLeast(AccessPermission perm) { + return ordinal() >= perm.ordinal(); + } + + public boolean exceeds(AccessPermission perm) { + return ordinal() > perm.ordinal(); + } + + public String asRole(String repository) { + return code + ":" + repository; + } + + @Override + public String toString() { + return code; + } + + public static AccessPermission permissionFromRole(String role) { + String [] fields = role.split(":", 2); + if (fields.length == 1) { + // legacy/undefined assume full permissions + return AccessPermission.LEGACY; + } else { + // code:repository + return AccessPermission.fromCode(fields[0]); + } + } + + public static String repositoryFromRole(String role) { + String [] fields = role.split(":", 2); + if (fields.length == 1) { + // legacy/undefined assume full permissions + return role; + } else { + // code:repository + return fields[1]; + } + } + + public static AccessPermission fromCode(String code) { + for (AccessPermission perm : values()) { + if (perm.code.equalsIgnoreCase(code)) { + return perm; + } + } + return AccessPermission.NONE; + } + } + + public static enum RegistrantType { + REPOSITORY, USER, TEAM; + } + + public static enum PermissionType { + EXPLICIT, OWNER, ADMINISTRATOR, TEAM, REGEX; + } + + public static enum GCStatus { + READY, COLLECTING; + + public boolean exceeds(GCStatus s) { + return ordinal() > s.ordinal(); + } + } + + @Documented + @Retention(RetentionPolicy.RUNTIME) + public @interface Unused { + } } -- Gitblit v1.9.1