James Moger
2014-03-19 ebd4f4460cfe786f89898decbb6f62dd25a9d1ea
Allow registration of a command instance
1 files modified
27 ■■■■■ changed files
src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
@@ -144,6 +144,26 @@
        commands.add(cmd);
    }
    /**
     * Registers a command as long as the user is permitted to execute it.
     *
     * @param user
     * @param cmd
     */
    protected void registerCommand(UserModel user, BaseCommand cmd) {
        if (!cmd.getClass().isAnnotationPresent(CommandMetaData.class)) {
            throw new RuntimeException(MessageFormat.format("{0} must be annotated with {1}!", cmd.getName(),
                    CommandMetaData.class.getName()));
        }
        CommandMetaData meta = cmd.getClass().getAnnotation(CommandMetaData.class);
        if (meta.admin() && !user.canAdmin()) {
            log.debug(MessageFormat.format("excluding admin command {0} for {1}", meta.name(), user.username));
            return;
        }
        commands.add(cmd.getClass());
        instantiated.add(cmd);
    }
    private Map<String, Class<? extends BaseCommand>> getMap() {
        if (map == null) {
            map = Maps.newHashMapWithExpectedSize(commands.size());
@@ -222,6 +242,13 @@
            throw new UnloggedFailure(1, msg);
        }
        for (BaseCommand cmd : instantiated) {
            // use an already instantiated command
            if (cmd.getClass().equals(c)) {
                return cmd;
            }
        }
        BaseCommand cmd = null;
        try {
            cmd = c.newInstance();