1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/usr/bin/env python
import errno
import os
from argparse import ArgumentParser
from sys import stdout
from twisted.internet import reactor
from twisted.python import log
from twisted.web.resource import Resource
from twisted.web.server import Site
from leap.soledad.server._blobs import BlobsResource
def mkdir_p(path):
try:
os.makedirs(path)
except OSError as exc: # Python >2.5
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else:
raise
def parse_args():
parser = ArgumentParser()
parser.add_argument('dir', type=str,
help="The directory to store blobs.")
parser.add_argument('port', type=int,
help="The port in which to listen.")
args = parser.parse_args()
return args
class DummyResource(Resource):
def render_GET(self, request):
return ''
class RootResource(Resource):
def __init__(self, port, *args, **kwargs):
Resource.__init__(self, *args, **kwargs)
self.prefix = str(port) + "-"
self.blob_id = 0
def getChildWithDefault(self, path, request):
if path == 'blobs' and len(request.postpath) == 2:
blob_id = "{}{}".format(self.prefix, str(self.blob_id))
request.postpath[1] = blob_id
self.blob_id += 1
return Resource.getChildWithDefault(self, path, request)
def start_server(dir, port):
resource = RootResource(port)
resource.putChild("", DummyResource())
resource.putChild("blobs", BlobsResource("filesystem", dir))
site = Site(resource)
reactor.listenTCP(port, site)
def main(dir, port):
mkdir_p(dir)
log.startLogging(stdout)
start_server(dir, port)
reactor.run()
if __name__ == "__main__":
args = parse_args()
main(args.dir, args.port)
|