[Checkins] SVN: zopyx.smartprintng.server/trunk/ merge
Andreas Jung
andreas at andreas-jung.com
Mon Sep 14 12:49:28 EDT 2009
Log message for revision 103970:
merge
Changed:
A zopyx.smartprintng.server/trunk/buildout.cfg
U zopyx.smartprintng.server/trunk/docs/HISTORY.txt
U zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/models.py
A zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/nullauth.py
U zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/run.py
U zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/tests.py
U zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/views.py
-=-
Copied: zopyx.smartprintng.server/trunk/buildout.cfg (from rev 103965, zopyx.smartprintng.server/branches/calibre-integration/buildout.cfg)
===================================================================
--- zopyx.smartprintng.server/trunk/buildout.cfg (rev 0)
+++ zopyx.smartprintng.server/trunk/buildout.cfg 2009-09-14 16:49:27 UTC (rev 103970)
@@ -0,0 +1,16 @@
+[buildout]
+parts = instance
+
+find-links = http://dist.repoze.org/bfgsite/simple
+
+eggs = zopyx.smartprintng.server
+
+
+[instance]
+recipe = repoze.recipe.egg:scripts
+find-links = http://dist.repoze.org/bfg/1.0/simple
+ http://dist.repoze.org/bfgsite/simple
+ http://pypi.python.org/simple
+eggs = repoze.bfg
+ repoze.bfg.xmlrpc
+ ${buildout:eggs}
Modified: zopyx.smartprintng.server/trunk/docs/HISTORY.txt
===================================================================
--- zopyx.smartprintng.server/trunk/docs/HISTORY.txt 2009-09-14 16:47:17 UTC (rev 103969)
+++ zopyx.smartprintng.server/trunk/docs/HISTORY.txt 2009-09-14 16:49:27 UTC (rev 103970)
@@ -9,6 +9,16 @@
------------------
* adjusted to newest zopyx.convert2 version
+
+0.6.0 (2009/09/15)
+------------------
+* added authentication and authorization support
+
+0.5.2 (2009/09/05)
+------------------
+* adjusted to newest zopyx.convert2 version
+
+>>>>>>> .merge-right.r103965
0.5.1 (2009/08/01)
------------------
Modified: zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/models.py
===================================================================
--- zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/models.py 2009-09-14 16:47:17 UTC (rev 103969)
+++ zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/models.py 2009-09-14 16:49:27 UTC (rev 103970)
@@ -36,6 +36,11 @@
if not os.path.exists(self.temp_directory):
os.makedirs(self.temp_directory)
+ self.spool_directory = os.path.join(tempfile.gettempdir(),
+ 'zopyx.smartprintng.server-spool')
+ if not os.path.exists(self.spool_directory):
+ os.makedirs(self.spool_directory)
+
def countRequest(self):
self._lock.acquire()
self.num_requests += 1
Copied: zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/nullauth.py (from rev 103965, zopyx.smartprintng.server/branches/calibre-integration/zopyx/smartprintng/server/nullauth.py)
===================================================================
--- zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/nullauth.py (rev 0)
+++ zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/nullauth.py 2009-09-14 16:49:27 UTC (rev 103970)
@@ -0,0 +1,15 @@
+##########################################################################
+# zopyx.smartprintng.server
+# (C) 2008, 2009, ZOPYX Ltd & Co. KG, Tuebingen, Germany
+##########################################################################
+
+def authenticateRequest(username, password):
+ """ Anonymous authentication """
+
+ return True
+
+
+def authorizeRequest(auth_token):
+ """ Anonymous authorization """
+
+ return True
Modified: zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/run.py
===================================================================
--- zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/run.py 2009-09-14 16:47:17 UTC (rev 103969)
+++ zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/run.py 2009-09-14 16:49:27 UTC (rev 103970)
@@ -6,6 +6,7 @@
import os
from repoze.bfg.router import make_app
import mail_util
+from views import have_authentication
def app(global_config, **kw):
""" This function returns a repoze.bfg.router.Router object. It
@@ -17,7 +18,6 @@
import zopyx.smartprintng.server
from models import root
from logger import LOG
- from views import spool_directory
if 'mail_config' in global_config:
mail_config = os.path.abspath(global_config['mail_config'])
@@ -27,6 +27,11 @@
LOG.info(config)
LOG.info('SmartPrintNG server started')
LOG.info('Temp directory: %s' % root.temp_directory)
- LOG.info('Spool directory: %s' % spool_directory)
+ LOG.info('Spool directory: %s' % root.spool_directory)
+ if have_authentication:
+ LOG.info('Authentication module found - server requires authentication')
+ else:
+ LOG.info('No auth module found - serving for anonymous')
+
return make_app(get_root, zopyx.smartprintng.server, options=kw)
Modified: zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/tests.py
===================================================================
--- zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/tests.py 2009-09-14 16:47:17 UTC (rev 103969)
+++ zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/tests.py 2009-09-14 16:49:27 UTC (rev 103970)
@@ -122,7 +122,7 @@
request = testing.DummyRequest(headers=headers, post=True)
zip_archive = os.path.join(os.path.dirname(__file__), 'test_data', 'test.zip')
zip_data = file(zip_archive, 'rb').read()
- params = xmlrpclib.dumps((base64.encodestring(zip_data), 'pdf-prince'))
+ params = xmlrpclib.dumps(('', base64.encodestring(zip_data), 'pdf-prince'))
request.body = xml2 % params
result = convertZIP(context, request)
self.assertEqual(result.status, '200 OK')
@@ -142,7 +142,7 @@
request = testing.DummyRequest(headers=headers, post=True)
zip_archive = os.path.join(os.path.dirname(__file__), 'test_data', 'test.zip')
zip_data = file(zip_archive, 'rb').read()
- params = xmlrpclib.dumps((base64.encodestring(zip_data), 'pdf-prince'))
+ params = xmlrpclib.dumps(('', base64.encodestring(zip_data), 'pdf-prince'))
request.body = xml3 % params
result = convertZIPandRedirect(context, request)
self.assertEqual(result.status, '200 OK')
Modified: zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/views.py
===================================================================
--- zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/views.py 2009-09-14 16:47:17 UTC (rev 103969)
+++ zopyx.smartprintng.server/trunk/zopyx/smartprintng/server/views.py 2009-09-14 16:49:27 UTC (rev 103970)
@@ -19,12 +19,15 @@
from models import Server
from logger import LOG
+try:
+ from zopyx.smartprintng.authentication import authenticateRequest, authorizeRequest
+ have_authentication = True
+except ImportError:
+ from nullauth import authenticateRequest, authorizeRequest
+ have_authentication = False
+
static_view = static('templates/static')
-spool_directory = os.path.join(tempfile.gettempdir(),
- 'zopyx.smartprintng.server-spool')
-if not os.path.exists(spool_directory):
- os.makedirs(spool_directory)
##################
# HTTP views
@@ -55,13 +58,13 @@
filename = request.params['filename']
prefix = request.params.get('prefix')
- dest_filename = os.path.abspath(os.path.join(spool_directory, filename))
+ dest_filename = os.path.abspath(os.path.join(context.spool_directory, filename))
# various (security) checks
if not os.path.exists(dest_filename):
return Response(status=404)
- if not dest_filename.startswith(spool_directory):
+ if not dest_filename.startswith(context.spool_directory):
return Response(status=404)
if time.time() - os.stat(dest_filename)[ST_CTIME] >= context.delivery_max_age:
@@ -83,10 +86,29 @@
# XMLRPC views
##################
+ at bfg_view(name='authenticate', for_=Server)
+ at xmlrpc_view
+def authenticate(context, username, password):
+ if not have_authentication:
+ return True
+
+ try:
+ return authenticateRequest(username, password)
+ except Exception, e:
+ msg = 'Authentication failed (%s)' % e
+ LOG.error(msg, exc_info=True)
+ return xmlrpclib.Fault(123, msg)
+
@bfg_view(name='convertZIP', for_=Server)
@xmlrpc_view
-def convertZIP(context, zip_archive, converter_name='pdf-prince'):
+def convertZIP(context, auth_token, zip_archive, converter_name='pdf-prince'):
+
+ if not authorizeRequest(auth_token):
+ msg = 'Authorization failed'
+ LOG.error(msg, exc_info=True)
+ return xmlrpclib.Fault(123, msg)
+
try:
return context.convertZIP(zip_archive, converter_name)
except Exception, e:
@@ -97,7 +119,13 @@
@bfg_view(name='convertZIPEmail', for_=Server)
@xmlrpc_view
-def convertZIPEmail(context, zip_archive, converter_name='pdf-prince', sender=None, recipient=None, subject=None, body=None):
+def convertZIPEmail(context, auth_token, zip_archive, converter_name='pdf-prince', sender=None, recipient=None, subject=None, body=None):
+
+ if not authorizeRequest(auth_token):
+ msg = 'Authorization failed'
+ LOG.error(msg, exc_info=True)
+ return xmlrpclib.Fault(123, msg)
+
try:
return context.convertZIPEmail(zip_archive, converter_name, sender, recipient, subject, body)
except Exception, e:
@@ -108,7 +136,7 @@
@bfg_view(name='convertZIPandRedirect', for_=Server)
@xmlrpc_view
-def convertZIPandRedirect(context, zip_archive, converter_name='prince-pdf', prefix=None):
+def convertZIPandRedirect(context, auth_token, zip_archive, converter_name='prince-pdf', prefix=None):
""" This view appects a ZIP archive through a POST request containing all
relevant information (similar to the XMLRPC API). However the converted
output file is not returned to the caller but delivered "directly" through
@@ -119,6 +147,11 @@
view (in order to avoid redudant code).)
"""
+ if not authorizeRequest(auth_token):
+ msg = 'Authorization failed'
+ LOG.error(msg, exc_info=True)
+ return xmlrpclib.Fault(123, msg)
+
try:
output_archivename, output_filename = context._processZIP(zip_archive, converter_name)
output_ext = os.path.splitext(output_filename)[1]
@@ -127,8 +160,8 @@
ident = os.path.splitext(os.path.basename(output_archivename))[0]
# move output file to spool directory
- dest_filename = os.path.join(spool_directory, '%s%s' % (ident, output_ext))
- rel_output_filename = dest_filename.replace(spool_directory + os.sep, '')
+ dest_filename = os.path.join(context.spool_directory, '%s%s' % (ident, output_ext))
+ rel_output_filename = dest_filename.replace(context.spool_directory + os.sep, '')
shutil.move(output_filename, dest_filename)
host = 'localhost'
port = 6543
More information about the checkins
mailing list