Revision: 6856 Author: russblau Date: 2009-05-07 19:03:06 +0000 (Thu, 07 May 2009)
Log Message: ----------- Implement SSL connections (somewhat different implementation than used in trunk); default is to use SSL (if available) for login actions only, but user can configure bot to use SSL never or always.
Modified Paths: -------------- branches/rewrite/pywikibot/comms/http.py branches/rewrite/pywikibot/config2.py branches/rewrite/pywikibot/data/api.py branches/rewrite/pywikibot/family.py
Property Changed: ---------------- branches/rewrite/pywikibot/config2.py branches/rewrite/pywikibot/family.py
Modified: branches/rewrite/pywikibot/comms/http.py =================================================================== --- branches/rewrite/pywikibot/comms/http.py 2009-05-07 18:27:55 UTC (rev 6855) +++ branches/rewrite/pywikibot/comms/http.py 2009-05-07 19:03:06 UTC (rev 6856) @@ -76,25 +76,32 @@ atexit.register(_flush)
# export cookie_jar to global namespace -import pywikibot pywikibot.cookie_jar = cookie_jar
-def request(site, uri, *args, **kwargs): +def request(site, uri, ssl=False, *args, **kwargs): """Queue a request to be submitted to Site.
All parameters not listed below are the same as L{httplib2.Http.request}, but the uri is relative
@param site: The Site to connect to + @param uri: the URI to retrieve (relative to the site's scriptpath) + @param ssl: Use https connection @return: The received data (a unicode string). + """ - baseuri = "%s://%s/" % (site.protocol(), site.hostname()) - uri = urlparse.urljoin(baseuri, uri) + if ssl: + proto = "https" + host = site.ssl_hostname() + else: + proto = "http" + host = site.hostname() + full_uri = "%(proto)s://%(host)s%(uri)s" % locals()
# set default user-agent string kwargs.setdefault("headers", {}) kwargs["headers"].setdefault("user-agent", useragent) - request = threadedhttp.HttpRequest(uri, *args, **kwargs) + request = threadedhttp.HttpRequest(full_uri, *args, **kwargs) http_queue.put(request) request.lock.acquire()
Modified: branches/rewrite/pywikibot/config2.py =================================================================== --- branches/rewrite/pywikibot/config2.py 2009-05-07 18:27:55 UTC (rev 6855) +++ branches/rewrite/pywikibot/config2.py 2009-05-07 19:03:06 UTC (rev 6856) @@ -50,7 +50,7 @@ gdab_namespaces = {}
# Solve captchas in the webbrowser. Setting this to False will result in the -# exception CaptchaError be thrown if a captcha is encountered. +# exception CaptchaError being thrown if a captcha is encountered. solve_captcha = True
# Some sites will require password identication to access the HTML pages at @@ -67,6 +67,19 @@ # 2. You must use the hostname of the site, not its family/language pair authenticate = {}
+# +# Security Connection for Wikimedia Projects +# +use_SSL_onlogin = True # if available, use SSL when logging in +use_SSL_always = False # if available, use SSL for all API queries + +# Available security projects +available_ssl_project = [ + u'wikipedia', u'wikinews', u'wikisource', u'wiktionary', u'wikibooks', + u'wikiquote', u'wikiversity', u'meta', u'mediawiki', u'commons', + u'species', u'incubator' +] + # password_file = ".passwd" # A password file with default passwords. For more information, please # see LoginManager.readPassword in login.py. @@ -150,7 +163,10 @@ #we get "StdioOnnaStick instance has no attribute 'encoding'" console_encoding = None
-# The encoding in which textfiles are stored, which contain lists of page titles. +# The encoding in which textfiles are stored, which contain lists of page +# titles. The most used is: 'utf-8'. 'utf-8-sig' recognizes BOM but it is +# available on Python 2.5 or higher. For a complete list please see: +# http://docs.python.org/library/codecs.html#standard-encodings textfile_encoding = 'utf-8'
# tkinter isn't yet ready @@ -163,7 +179,7 @@ # Currently only works if interface 'terminal' is set. transliterate = True
-# Should the system bell be ringed if the bot expects user input? +# Should the system bell ring if the bot expects user input? ring_bell = False
# Colorization can be used to markup important text parts of the output. @@ -220,6 +236,7 @@ # log = [] # Per default, logging of interwiki.py is enabled because its logfiles can # be used to generate so-called warnfiles. +# This setting can be overridden by the -log or -nolog command-line arguments. log = ['interwiki'] # filename defaults to modulename-bot.log logfilename = None @@ -337,7 +354,7 @@ # That can do very ugly results. deIndentTables = True # table2wiki.py works quite stable, so you might switch to True -table2wikiAskOnlyWarnngs = True +table2wikiAskOnlyWarnings = True table2wikiSkipWarnings = False
############## WEBLINK CHECKER SETTINGS ##############
Property changes on: branches/rewrite/pywikibot/config2.py ___________________________________________________________________ Modified: svn:mergeinfo - /trunk/pywikipedia/config.py:6734-6801 + /trunk/pywikipedia/config.py:6734-6801,6810-6854
Modified: branches/rewrite/pywikibot/data/api.py =================================================================== --- branches/rewrite/pywikibot/data/api.py 2009-05-07 18:27:55 UTC (rev 6855) +++ branches/rewrite/pywikibot/data/api.py 2009-05-07 19:03:06 UTC (rev 6856) @@ -194,7 +194,13 @@ self.site.throttle(write=write) uri = self.site.scriptpath() + "/api.php" try: - rawdata = http.request(self.site, uri, method="POST", + ssl = False + if self.site.family.name in config.available_ssl_project: + if action == "login" and config.use_SSL_onlogin: + ssl = True + elif config.use_SSL_always: + ssl = True + rawdata = http.request(self.site, uri, ssl, method="POST", headers={'Content-Type': 'application/x-www-form-urlencoded'}, body=params)
Modified: branches/rewrite/pywikibot/family.py =================================================================== --- branches/rewrite/pywikibot/family.py 2009-05-07 18:27:55 UTC (rev 6855) +++ branches/rewrite/pywikibot/family.py 2009-05-07 19:03:06 UTC (rev 6856) @@ -670,6 +670,7 @@ redirect = { 'af': [u'aanstuur'], 'als': [u'weiterleitung'], + 'an': [u'redirección'], 'ar': [u'تحويل'], 'arz': [u'تحويل'], 'av': [u'перенаправление'], @@ -677,6 +678,7 @@ 'be-tarask': [u'перанакіраваньне'], 'be-x-old': [u'перанакіраваньне'], 'bg': [u'виж', u'пренасочване'], + 'bug': [u'alih'], 'br': [u'adkas'], 'bs': [u'preusmjeri'], 'cs': [u'přesměruj'], @@ -723,17 +725,20 @@ 'oc': [u'redireccion'], 'pdc': [u'weiterleitung'], 'pl': [u'redirect', u'patrz', u'tam', u'przekieruj'], + 'qu': [u'redirección'], 'ro': [u'redirecteaza'], 'ru': [u'redirect', u'перенаправление', u'перенапр'], 'sa': [u'#पुनर्निदेशन'], + 'sah': [u'перенаправление'], 'si': [u'යළියොමුව'], 'sk': [u'presmeruj'], 'sq': [u'ridrejto'], 'sr': [u'преусмери', u'преусмери'], 'srn': [u'stir'], + 'stq': [u'weiterleitung'], 'su': [u'redirected', u'alih'], 'sv': [u'omdirigering'], - 'szl': [u'redirect', u'tam'], + 'szl': [u'redirect', u'tam', u'patrz'], 'ta': [u'வழிமாற்று'], 'te': [u'దారిమార్పు'], 'th': [u'เปลี่ยนทาง'], @@ -767,7 +772,7 @@ def pagenamecodes(self,code): pos = ['PAGENAME'] pos2 = [] - if code in self.pagename.keys(): + if code in self.pagename: pos = pos + self.pagename[code] elif code == 'als': return self.pagenamecodes('de') @@ -780,7 +785,7 @@ def pagename2codes(self,code): pos = ['PAGENAME'] pos2 = [] - if code in self.pagenamee.keys(): + if code in self.pagenamee: pos = pos + self.pagenamee[code] elif code == 'als': return self.pagename2codes('de') @@ -799,8 +804,13 @@ return 'http'
def hostname(self, code): + """The hostname to use for standard http connections.""" return self.langs[code]
+ def ssl_hostname(self, code): + """The hostname to use for SSL connections.""" + return "secure.wikimedia.org/%s/%s" % (self.name, code) + def scriptpath(self, code): """The prefix used to locate scripts on this wiki.
Property changes on: branches/rewrite/pywikibot/family.py ___________________________________________________________________ Modified: svn:mergeinfo - /trunk/pywikipedia/family.py:6057-6649 + /trunk/pywikipedia/family.py:6057-6854