From 2331e7936c27e32b7d6d251b3637efc0e1184a81 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 18:58:08 -0400
Subject: [PATCH] Support admin commands that respect user permissions

---
 src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
index 83707f7..5c02273 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
@@ -93,6 +93,12 @@
       }
 
       Command cmd = getCommand();
+      if (cmd.getClass().isAnnotationPresent(CommandMetaData.class)) {
+    	  CommandMetaData meta = cmd.getClass().getAnnotation(CommandMetaData.class);
+    	  if (meta.admin() && !ctx.getClient().getUser().canAdmin()) {
+    		  throw new UnloggedFailure(1, MessageFormat.format("{0} requires admin permissions", commandName));
+    	  }
+      }
       if (cmd instanceof BaseCommand) {
         BaseCommand bc = (BaseCommand) cmd;
         if (getName().isEmpty()) {
@@ -162,6 +168,9 @@
       final Class<? extends Command> c = m.get(name);
       CommandMetaData meta = c.getAnnotation(CommandMetaData.class);
       if (meta != null) {
+        if (meta.admin() && !ctx.getClient().getUser().canAdmin()) {
+      	  continue;
+        }
         if (meta.hidden()) {
         	continue;
         }

--
Gitblit v1.9.1