Dateianhang 'svn-proxy-healer.py'

Herunterladen

   1 #!/usr/bin/python
   2 # Original: http://vanderwijk.info/Members/ivo/articles/ComplexSVNSetupFix
   3 # Zweck: subversion scheint Probleme mit der apache-ssl/apache2-Proxy-Konfiguration zu haben,
   4 # wenn Dateien bewegt werden sollen
   5 # dieses Skript "repariert" alle Adressen, die fehlerhafterweise mit "http" anstelle von "https" beginnen
   6 # unklar, ob subversion, oder apache schuld ist ...
   7 # Problem: das svn-Webinterface funktioniert mit diesem Skript nicht mehr
   8 
   9 from twisted.internet import protocol
  10 from twisted.internet import reactor
  11 from twisted.protocols import http
  12 from twisted.web import proxy, server, resource
  13 
  14 import re
  15 import urlparse
  16 
  17 """
  18   Hack to rewrite 'Destination: https' to 'Destination: http'. It seems
  19   in certain (proxied) configuration, svn gets confused by the mix of
  20   http and https, and refuses to perform COPY methods.
  21 
  22 """
  23 
  24 class ReverseProxyResource(resource.Resource):
  25 
  26   def __init__(self, host, port, path):
  27 	resource.Resource.__init__(self)
  28 	self.host = host
  29 	self.port = port
  30 	self.path = path
  31 
  32   def getChild(self, path, request):
  33 	return ReverseProxyResource(self.host, self.port, self.path+'/'+path)
  34 
  35   def render(self, request):
  36 	request.received_headers['host'] = self.host
  37 	request.content.seek(0, 0)
  38 
  39 	d = request.received_headers.get('destination', None)
  40 	if d:
  41 	    if d.startswith("https://systemausfall.org/") : ## <-- This is where https:// is rewritten
  42 		d = d.replace("https://systemausfall.org/", "http://svn.sao/")
  43 		request.received_headers['destination'] = d
  44 	    if d.startswith("https://svn.systemausfall.org/") : ## <-- This is where https:// is rewritten
  45 		d = d.replace("https://svn.systemausfall.org/", "http://svn.sao/")
  46 		request.received_headers['destination'] = d
  47 
  48 	request.content.seek(0, 0)
  49 
  50 	qs = urlparse.urlparse(request.uri)[4]
  51 	if qs:
  52 	    rest = self.path + '?' + qs
  53 	else:
  54 	    rest = self.path
  55 	clientFactory = proxy.ProxyClientFactory(request.method, rest,
  56 				     request.clientproto,
  57 				     request.getAllHeaders(),
  58 				     request.content.read(),
  59 				     request)
  60 	reactor.connectTCP(self.host, self.port, clientFactory)
  61 	return server.NOT_DONE_YET
  62 
  63 site = server.Site(ReverseProxyResource('localhost', 80, '/'))
  64 reactor.listenTCP(81, site)
  65 reactor.run()

Gespeicherte Dateianhänge

Um Dateianhänge in eine Seite einzufügen sollte unbedingt eine Angabe wie attachment:dateiname benutzt werden, wie sie auch in der folgenden Liste der Dateien erscheint. Es sollte niemals die URL des Verweises ("laden") kopiert werden, da sich diese jederzeit ändern kann und damit der Verweis auf die Datei brechen würde.
  • [laden | anzeigen] (2005-04-21 01:36:27, 2.2 KB) [[attachment:svn-proxy-healer.py]]
 Alle Dateien | Ausgewählte Dateien: löschen verschieben auf Seite copy to page

Sie dürfen keine Anhänge an diese Seite anhängen!


Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.