]> source.dussan.org Git - gitblit.git/commitdiff
Permission regexes are now case-insensitive
authorJames Moger <james.moger@gitblit.com>
Mon, 22 Oct 2012 20:22:37 +0000 (16:22 -0400)
committerJames Moger <james.moger@gitblit.com>
Mon, 22 Oct 2012 20:22:37 +0000 (16:22 -0400)
docs/01_setup.mkd
docs/04_releases.mkd
src/com/gitblit/models/TeamModel.java
src/com/gitblit/models/UserModel.java
src/com/gitblit/utils/StringUtils.java
tests/com/gitblit/tests/PermissionsTest.java

index b5c407eae1ce097f7d7049f05b606a70769e15ee..6d015a3e12e04a6f47d94cc3a8d093710ee03802 100644 (file)
@@ -264,9 +264,9 @@ These permission codes are combined with the repository path to create a user pe
 \r
 #### Discrete Permissions with Regex Matching (Gitblit v1.2.0+)\r
 \r
-Gitblit also supports regex matching for repository permissions.  The following permission grants push privileges to all repositories in the *mygroup* folder.\r
+Gitblit also supports *case-insensitive* regex matching for repository permissions.  The following permission grants push privileges to all repositories in the *mygroup* folder.\r
 \r
-    RW:mygroup/[A-Za-z0-9-~_\\./]+\r
+    RW:mygroup/[a-z0-9-~_\\./]+\r
 \r
 #### No-So-Discrete Permissions (Gitblit <= v1.1.0)\r
 \r
index 1ac7de3a56a524cca434c31d1170dbaf8aed177a..ae3ba621afafcde2e7935b6a00cbe3edc2b1b619 100644 (file)
@@ -32,8 +32,8 @@ If you are updating your server, you must also update any Gitblit Manager and Fe
     - RWD (clone and push with ref creation, deletion)\r
     - RW+ (clone and push with ref creation, deletion, rewind)  \r
 While not as sophisticated as Gitolite, this does give finer access controls.  These permissions fit in cleanly with the existing users.conf and users.properties files.  In Gitblit <= 1.1.0, all your existing user accounts have RW+ access.   If you are upgrading to 1.2.0, the RW+ access is *preserved* and you will have to lower/adjust accordingly.\r
-- Implemented regex repository permission matching (issue 36)  \r
-This allows you to specify a permission like `RW:mygroup/[A-Za-z0-9-~_\\./]+` to grant push privileges to all repositories within the *mygroup* project/folder.\r
+- Implemented *case-insensitive* regex repository permission matching (issue 36)  \r
+This allows you to specify a permission like `RW:mygroup/[a-z0-9-~_\\./]+` to grant push privileges to all repositories within the *mygroup* project/folder.\r
 - Added DELETE, CREATE, and NON-FAST-FORWARD ref change logging\r
 - Added support for personal repositories.  \r
 Personal repositories can be created by accounts with the *create* permission and are stored in *git.repositoriesFolder/~username*.  Each user with personal repositories will have a user page, something like the GitHub profile page.  Personal repositories have all the same features as common repositories, except personal repositories can be renamed by their owner.\r
index 9ba2f669ae5d064d08f527609400c5444830c745..6410eb45f45b8077a828a425db3a43d1231d3361 100644 (file)
@@ -29,6 +29,7 @@ import com.gitblit.Constants.AccessPermission;
 import com.gitblit.Constants.AccessRestrictionType;\r
 import com.gitblit.Constants.RegistrantType;\r
 import com.gitblit.Constants.Unused;\r
+import com.gitblit.utils.StringUtils;\r
 \r
 /**\r
  * TeamModel is a serializable model class that represents a group of users and\r
@@ -184,9 +185,9 @@ public class TeamModel implements Serializable, Comparable<TeamModel> {
                                permission = p;\r
                        }\r
                } else {\r
-                       // search for regex permission match\r
+                       // search for case-insensitive regex permission match\r
                        for (String key : permissions.keySet()) {\r
-                               if (repository.name.matches(key)) {\r
+                               if (StringUtils.matchesIgnoreCase(repository.name, key)) {\r
                                        AccessPermission p = permissions.get(key);\r
                                        if (p != null) {\r
                                                permission = p;\r
index 97430bfe11772ca4fb331c3abd435bf2bc2b97ce..6cc077895d7d49ccac5c0b2078ed172724c34edb 100644 (file)
@@ -227,9 +227,9 @@ public class UserModel implements Principal, Serializable, Comparable<UserModel>
                                return p;\r
                        }\r
                } else {\r
-                       // search for regex permission match\r
+                       // search for case-insensitive regex permission match\r
                        for (String key : permissions.keySet()) {\r
-                               if (repository.name.matches(key)) {\r
+                               if (StringUtils.matchesIgnoreCase(repository.name, key)) {\r
                                        AccessPermission p = permissions.get(key);\r
                                        if (p != null) {\r
                                                permission = p;\r
index d115f896d717773347c9a9acd7a9d6bf0feae9dd..02cc49fd835d9519dea0119938ef8ccbdb3f0a9c 100644 (file)
@@ -692,4 +692,17 @@ public class StringUtils {
                }\r
                return path;\r
        }\r
+       \r
+       /**\r
+        * Variation of String.matches() which disregards case issues.\r
+        * \r
+        * @param regex\r
+        * @param input\r
+        * @return true if the pattern matches\r
+        */\r
+       public static boolean matchesIgnoreCase(String input, String regex) {\r
+               Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);\r
+               Matcher m = p.matcher(input);\r
+               return m.matches();\r
+       }\r
 }
\ No newline at end of file
index 2f47a4893a3801807caa8671d11cb385e39c7cf2..c0e406d49d13d577bc50c3d35df000099b00fc47 100644 (file)
@@ -2399,7 +2399,7 @@ public class PermissionsTest extends Assert {
                repository.accessRestriction = AccessRestrictionType.VIEW;
 
                UserModel user = new UserModel("test");
-               user.setRepositoryPermission("ubercool/[A-Za-z0-9-~_\\./]+", AccessPermission.CLONE);
+               user.setRepositoryPermission("ubercool/[A-Z0-9-~_\\./]+", AccessPermission.CLONE);
 
                assertTrue("user DOES NOT HAVE a repository permission!", user.hasRepositoryPermission(repository.name));
                assertTrue("user CAN NOT view!", user.canView(repository));