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.Sie dürfen keine Anhänge an diese Seite anhängen!