Support admin commands that respect user permissions
| | |
| | | public @interface CommandMetaData { |
| | | String name(); |
| | | String description() default ""; |
| | | boolean admin() default false; |
| | | boolean hidden() default false; |
| | | } |
| | |
| | | |
| | | import com.gitblit.transport.ssh.CommandMetaData; |
| | | |
| | | @CommandMetaData(name = "create-repository", description = "Create new GIT repository", hidden = true) |
| | | @CommandMetaData(name = "create-repository", description = "Create new GIT repository", admin = true, hidden = true) |
| | | public class CreateRepository extends SshCommand { |
| | | |
| | | @Option(name = "--name", aliases = {"-n"}, required = true, metaVar = "NAME", usage = "name of repository to be created") |
| | |
| | | } |
| | | |
| | | 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()) { |
| | |
| | | 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; |
| | | } |
| | |
| | | import com.gitblit.transport.ssh.IKeyManager; |
| | | |
| | | /** Set a user's account settings. **/ |
| | | @CommandMetaData(name = "set-account", description = "Change an account's settings") |
| | | @CommandMetaData(name = "set-account", description = "Change an account's settings", admin = true) |
| | | public class SetAccountCommand extends BaseKeyCommand { |
| | | |
| | | private static final String ALL = "ALL"; |