Package: gitserver
gitserver========Generate an RSA key ::ssh-keygen -t rsaExample Configuration File:::port: 22driver: examplehost_key: /path/to/private/rsa/keyNote that driver above corresponds to the name located in setup.py ::entry_points={'gitserver.driver': ['example = gitserver.example',],}To use your own driver, which you should be doing as the example driveris completely wide open, simply author a new Python package, and createand entrey_point in your setup.py as defined above. The important partsare ``example = gitserver.example``. Put another way,``name = path.to.python.module``.The keyword ``name`` is what is used in the configuration file. In theexample entry_point above the `name` is **example**.The right side of the assignment, ``path.to.python.module``is the python path to your module that will represent the ``name``.In the example above it is represented as ``gitserver.example``. Whichmeans it will looking the package ``gitserver`` for the module ``example.py``The example provided in this package contains all of the 4 functionsyou must implement, they are enumerated here ::def repopath(reponame):def authorize(model, command, path):def authenticate(credentials):def get_user_model(user_id):During ``authentication`` you **must** set ``credentials.username``to a value that can be passed to ``get_user_model(user_id)`` in orderto hydrate your custom user model. Which leads us to definiing yourcustom user model.Additionally, aside from implementing the 4 functions above, you mustdefine your own user model, which can be anything you like. You willreceive this user model in the authorize function above ::class ExampleUser(object):def __init__(self):self.id = Noneself.userame = NoneThe flow of the 4 required functions ::1) authenticate(credentials) is invoked2) get_user_model(user_id) is invoked with the value ofcredentials.username that was set in authenticate(credentials)3) authorize(model, command, path)This is the last invocation in the flow.- model: the result of get_user_model(user_id)- command: one of git-upload-pack or git-receive-pack- path: the path of the requested operationYou should return True or False here as to weather the'model' (aka user) is authorized to perform the requested'command' and the given 'path'Note that the example.py file included always returns False.In other words no one will be authorized. You will need tochange this if you want this to be useful.The path argument here, using a github.com url as an example:git clone git@github.com:aventurella/gitserver.git would yieldthe following path:aventurella/gitserver.gitKeep in mind that this must also work over ssh:// sogit clone ssh://git@github.com:[port]/aventurella/gitserver.gitwould yield the following path:/aventurella/gitserver.gitThe ssh version will come with a leading / the other will not.4) repopath(reponame) is invoked. Lets assume this is runningon github and the following command is executed:git clone git@github.com:aventurella/gitserver.gitreponame would then be 'aventurella/gitserver.git'It is unlikely that this is an actual path on your filesystemIt is your job here to convert this path into the absolute pathon your filesystem where the repository can be located.Start the server (in the foreground for example purposes) ::twistd -n gitserver -c /path/to/your/confOmit, the `-n` argument to start daemonized.Ubuntu Requirements====================- python-dev (pyopenssl requires)- libffi-dev (pyopenssl requires)- libssl-dev (pyopenssl requires)Release History---------------0.0.1 (2014-01-20)++++++++++++++++++**API Changes****Bugfixes**