2013-01-08 16:12:19 +01:00
|
|
|
from twisted.internet import reactor
|
|
|
|
from twisted.web import proxy, server, http, resource, static
|
|
|
|
from posixpath import basename, dirname
|
|
|
|
|
|
|
|
import copy
|
|
|
|
import sys
|
|
|
|
import os
|
|
|
|
import pprint
|
|
|
|
|
|
|
|
#--------------------------------------------------------------------
|
|
|
|
|
|
|
|
def scriptDir ():
|
|
|
|
return os.path.dirname(sys.argv[0])
|
|
|
|
|
|
|
|
def projectBaseDir ():
|
|
|
|
return os.path.abspath(scriptDir() + '/../..')
|
|
|
|
|
|
|
|
def projectTargetDir():
|
|
|
|
return projectBaseDir() + '/target/'
|
|
|
|
|
|
|
|
#--------------------------------------------------------------------
|
|
|
|
|
|
|
|
class ClipperzTestSite(server.Site):
|
|
|
|
|
|
|
|
def __init__(self, resource, logPath=None, timeout=60 * 60 * 12):
|
|
|
|
server.Site.__init__(self, resource, logPath, timeout)
|
|
|
|
|
|
|
|
|
|
|
|
def getResourceFor(self, request):
|
2013-08-30 17:56:53 +02:00
|
|
|
uri = request.uri
|
|
|
|
uri = uri.split("?", 1)[0]
|
|
|
|
uri = uri.split("#", 1)[0]
|
|
|
|
if uri.startswith('/json') or uri.startswith('/dump'):
|
2013-01-08 16:12:19 +01:00
|
|
|
request.site = self
|
|
|
|
request.sitepath = copy.copy(request.prepath)
|
|
|
|
result = resource.getChildForRequest(self.resource, request)
|
|
|
|
|
|
|
|
else:
|
2013-08-30 17:56:53 +02:00
|
|
|
pathParts = uri.split('/')
|
2013-01-08 16:12:19 +01:00
|
|
|
version = pathParts[1]
|
|
|
|
|
|
|
|
if pathParts[2].startswith('index.'):
|
|
|
|
contentType = 'text/html'
|
|
|
|
absoluteFilePath = os.path.join(projectTargetDir(), 'dev', version, pathParts[2])
|
|
|
|
result = static.File(absoluteFilePath, contentType)
|
2013-08-30 17:56:53 +02:00
|
|
|
elif pathParts[2].endswith('.webapp'):
|
|
|
|
contentType = 'application/x-web-app-manifest+json'
|
|
|
|
# absoluteFilePath = os.path.join(projectTargetDir(), 'dev', version, pathParts[2])
|
|
|
|
absoluteFilePath = os.path.join(projectBaseDir(), 'frontend', version, 'properties', pathParts[2])
|
|
|
|
result = static.File(absoluteFilePath, contentType)
|
2013-01-08 16:12:19 +01:00
|
|
|
else:
|
|
|
|
# http://homer.local:8888/beta/css/clipperz/images/loginInfoBackground.png
|
|
|
|
# pathParts: ['', 'beta', 'css', 'clipperz', 'images', 'loginInfoBackground.png']
|
|
|
|
try:
|
|
|
|
imagePathIndex = pathParts.index('images')
|
|
|
|
resourceType = 'images'
|
|
|
|
for _ in range(2, imagePathIndex):
|
|
|
|
del pathParts[2]
|
|
|
|
except:
|
|
|
|
resourceType = pathParts[2]
|
|
|
|
|
|
|
|
basePath = projectBaseDir() + '/frontend'
|
|
|
|
if resourceType == 'images':
|
2013-08-30 17:56:53 +02:00
|
|
|
fileExtension = os.path.splitext(uri)[1]
|
2013-01-08 16:12:19 +01:00
|
|
|
if fileExtension == '.png':
|
|
|
|
contentType = 'image/png'
|
|
|
|
elif fileExtension == '.jpg':
|
|
|
|
contentType = 'image/jpeg'
|
|
|
|
elif fileExtension == '.gif':
|
|
|
|
contentType = 'image/gif'
|
|
|
|
else:
|
|
|
|
print "ERROR - unknown image extension: " + fileExtension
|
|
|
|
|
|
|
|
absoluteFilePath = basePath + '/'.join(pathParts)
|
|
|
|
else:
|
|
|
|
resourceType = pathParts[2]
|
|
|
|
|
|
|
|
if resourceType == 'css':
|
|
|
|
contentType = 'text/css'
|
|
|
|
elif resourceType == 'js':
|
|
|
|
contentType = 'text/javascript'
|
|
|
|
else:
|
|
|
|
contentType = 'text/html'
|
|
|
|
|
2013-08-30 17:56:53 +02:00
|
|
|
absoluteFilePath = basePath + uri
|
2013-01-08 16:12:19 +01:00
|
|
|
|
|
|
|
result = static.File(absoluteFilePath, contentType)
|
|
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main ():
|
2013-08-30 17:56:53 +02:00
|
|
|
site = ClipperzTestSite(proxy.ReverseProxyResource('localhost', 8080, '/java-backend'))
|
2013-01-08 16:12:19 +01:00
|
|
|
reactor.listenTCP(8888, site)
|
|
|
|
reactor.run()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|
|
|
|
|