-
Notifications
You must be signed in to change notification settings - Fork 46
DIYServer
We strongly encourage you to use Google App Engine for the Cauliflower Vest service due to the usual benefits of cloud hosting platforms: scaleability, virtual instances, cost, etc. While we believe a cloud solution works best we understand it may not be possible for your organization to use Google App Engine. We welcome development on new escrow service solutions for general use platforms.
You may wish to port the Cauliflower Vest server or write your own from scratch. This should be relatively simple since our server code is modular, small, and actually quite basic. In general, it's simply a data storage getter/setter with ACLs and secure storage into a database with a simple schema. Please also see this wiki for more server background info.
To get yourself orientated, view the URL to code mapping module:
cauliflowervest/server/urls.py
Look towards the bottom for the URL mapping which maps URLs to classes which handle each request type.
application = webapp.WSGIApplication([
(r'/filevault/([\w\d\-]+)/?$', filevault.FileVault),
(r'/logs$', logs.Logs),
(r'/search$', search.Search),
(r'/_ah/warmup$', Warmup),
(r'/?$', Home),
], debug=True)
If you follow the mappings to the respective modules you will find the http
handlers for possible get/post/put operations. For example,
consider cauliflowervest/server/handlers/filevault.py which handles
the /filevault/ resource expressed in the regex above.
In App Engine the class method names match the http method, so to find
the HTTP PUT handler look for the put method.
def put(self, volume_uuid=None):
"""Handles PUT requests."""
if settings.ALLOW_ALL_DOMAIN_USERS_TO_ESCROW:
self.VerifyDomainUser()
else:
self.VerifyPermissions(permissions.ESCROW)
if volume_uuid and self.request.body:
self.PutNewPassphrase(volume_uuid, self.request.body, self.request)
else:
models.FileVaultAccessLog.Log(
message='Unknown PUT', request=self.request)
self.error(400)
Given some combination of web programming experience, reading the client source,
and creative editing/sub-classing/re-plugging new database storage methods
(anything models.*), we believe one could easily implement at least a basic
escrow service for other service backends in Python. This service could then run
in whatever type of environment is required for your organization.