James Moger
2014-04-15 2d73a0350d9745668d65a53cbcc776f933380f6a
Documentation
4 files modified
80 ■■■■■ changed files
releases.moxie 3 ●●●● patch | view | raw | blame | history
src/site/plugins_extensions.mkd 61 ●●●●● patch | view | raw | blame | history
src/site/plugins_overview.mkd 5 ●●●●● patch | view | raw | blame | history
src/site/setup_transport_ssh.mkd 11 ●●●● patch | view | raw | blame | history
releases.moxie
@@ -49,7 +49,7 @@
    - args4j 2.0.26
    - JGit 3.3.1
    - Mina SSHD 0.10.1
    - pf4j 0.7.1
    - pf4j 0.8.0
    contributors:
    - James Moger
    - David Ostrovsky
@@ -57,6 +57,7 @@
    - Jeremie Brebec
    - Tim Ryan
    - Decebal Suiu
    - Eric Myrhe
    settings:
    - { name: 'realm.ldap.bindpattern', defaultValue: ' ' }
    - { name: 'tickets.closeOnPushCommitMessageRegex', defaultValue: '(?:fixes|closes)[\\s-]+#?(\\d+)' }
src/site/plugins_extensions.mkd
@@ -2,20 +2,56 @@
Gitblit offers several extension points for enhancing and customizing it's runtime behavior.
Each available extension point has a sample implementation in the [gitblit-cookbook-plugin (Maven project)](https://dev.gitblit.com/summary/gitblit-cookbook-plugin.git).
Each available extension point has a sample implementation in the [gitblit-cookbook-plugin (Maven project)](https://github.com/gitblit/gitblit-cookbook-plugin).
**NOTE:**
Gitblit does not yet offer a comprehensize dependency injection architecture.  This will be addressed in a subsequent release.  For now you may access all of Gitblit's core managers through a static singleton app context:
```java
import com.gitblit.extensions.GitblitPlugin;
import com.gitblit.servlet.GitblitContext;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IUserManager;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.INotificationManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IProjectManager;
import com.gitblit.manager.IFederationManager;
import com.gitblit.manager.IPluginManager;
import com.gitblit.manager.IGitblit;
public class ExamplePlugin extends GitblitPlugin {
    @Override
    public void start() {
        IRuntimeManager runtime = GitblitContext.getManager(IRuntimeManager.class);
        IUserManager users = GitblitContext.getManager(IUserManager.class);
        IAuthenticationManager auth = GitblitContext.getManager(IAuthenticationManager.class);
        INotificationManager notifications = GitblitContext.getManager(INotificationManager.class);
        IRepositoryManager repos = GitblitContext.getManager(IRepositoryManager.class);
        IProjectManager projects = GitblitContext.getManager(IProjectManager.class);
        IFederationManager federation = GitblitContext.getManager(IFederationManager.class);
        IPluginManager plugins = GitblitContext.getManager(IPluginManager.class);
        IGitblit gitblit = GitblitContext.getManager(IGitblit.class);
    }
}
```
### SSH Dispatch Command
*SINCE 1.5.0*
You can provide your own custom SSH commands by subclassing the *DispatchCommand* class.
You can provide your own custom SSH command hierarchies by subclassing the *DispatchCommand* class.
```java
import ro.fortsoft.pf4j.Extension;
import org.kohsuke.args4j.Option;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gitblit.models.UserModel;
import com.gitblit.transport.ssh.commands.CommandMetaData;
import com.gitblit.transport.ssh.commands.DispatchCommand;
import com.gitblit.transport.ssh.commands.UsageExample;
@Extension
@CommandMetaData(name = "mycommands", description = "Sample SSH dispatcher")
@@ -31,6 +67,25 @@
        register(user, SubDispatcher1.class);
        register(user, SubDispatcher2.class);
    }
    @CommandMetaData(name = "commanda", aliases = { "ca" }, description = "description of command a")
    @UsageExample(syntax = "${cmd} --myflag", description = "description of commanda with --myflag")
    public static class CommandA extends SshCommand {
        protected final Logger log = LoggerFactory.getLogger(getClass());
        @Option(name = "--myflag", aliases = { "-m" }, usage = "enable myflag")
        boolean myflag;
        @Override
        public void run() throws Failure {
            if (myflag) {
                log.info("Run with --myflag");
            } else {
                log.info("Run without --myflag");
            }
        }
    }
}
```
src/site/plugins_overview.mkd
@@ -23,6 +23,7 @@
    Plugin-Description: Command and control Gitblit over SSH
    Plugin-Class: com.gitblit.plugin.powertools.Powertools
    Plugin-Version: 1.2.0
    Plugin-Requires: 1.5.0
    Plugin-Provider: gitblit.com
In addition to extending Gitblit core, plugins can also define extension points that may be implemented by other plugins.  Therefore a plugin may depend on other plugins.
@@ -32,9 +33,9 @@
**NOTE:**
The pf4j plugin framework relies on a javac apt processor to generate compile-time extension information, so be sure to enable apt processing in your build process.
#### Limitations of Dependencies & Requires
#### Limitations of Dependencies
Plugins may specify dependencies by ID, but may not specify specific versions of a dependency.  The plugin registry allows you to specify a *requires* version of Gitblit, but this is not currently enforced.
Plugins may specify dependencies by ID, but may not specify specific versions of a dependency.
### Managing Plugins
src/site/setup_transport_ssh.mkd
@@ -80,7 +80,14 @@
    ssh -l <username> -p 29418 <hostname> keys remove ALL
### SSH Command Plugins
##### keys permission
Gitblit supports loading custom SSH command plugins.
You may control the access permission for each SSH key.  This is more of a safety feature than a security measure.
| Permission | Description                                     |
| ---------- | ----------------------------------------------- |
| V          | SSH key may not be used for clone/fetch or push |
| R          | SSH key may be used to clone/fetch              |
| RW         | SSH key may be used to clone/fetch and push     |