diff --git a/app.py b/app.py index 6391de2..8ed97fd 100755 --- a/app.py +++ b/app.py @@ -22,6 +22,7 @@ import hashlib import json import os import locale +import socket locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') user_agent = 'Mozilla/5.0 (X11; Linux i586; rv:32.0) Gecko/20160101 Firefox/32.0' @@ -112,6 +113,20 @@ def init_profile(): def global_user(): g.user = wikidata_oauth.get_username() +@app.before_request +def get_blocks(): + hostname = app.config.get('HOSTNAME') + if not hostname: + return + g.server_ip = socket.gethostbyname(hostname) + try: + g.local_blocks = mediawiki.get_list('blocks', + bkip=g.server_ip) + g.global_blocks = mediawiki.get_list('globalblocks', + bgip=g.server_ip) + except Exception: + pass + @app.route('/find_more_setting') def flip_find_more(): session['no_find_more'] = not session.get('no_find_more') @@ -1058,6 +1073,10 @@ def wikidata_query_list(): q = WikidataQuery.query.order_by(WikidataQuery.start_time.desc()) return render_template('query_list.html', q=q) +@app.route('/report/blocks') +def server_block_report(): + return render_template('block_report.html') + if __name__ == "__main__": app.debug = True diff --git a/depicts/mediawiki.py b/depicts/mediawiki.py index d01b669..deb99f9 100644 --- a/depicts/mediawiki.py +++ b/depicts/mediawiki.py @@ -23,6 +23,10 @@ def api_call(params, api_url=wikidata_url): r = requests.get(api_url, params=call_params, timeout=5) return r +def get_list(list_name, **params): + r = api_call({'action': 'query', 'list': list_name, **params}) + return r.json()['query'][list_name] + def get_entity(qid, redirects=False): json_data = api_call({'action': 'wbgetentities', 'ids': qid, diff --git a/templates/base.html b/templates/base.html index faf83ae..748ab68 100644 --- a/templates/base.html +++ b/templates/base.html @@ -12,9 +12,16 @@ {% block style %}{% endblock %} {% from "navbar.html" import navbar with context %} +{% from "block_alert.html" import local_block_alert, global_block_alert with context %}
{% block nav %}{{ navbar() }}{% endblock %} + +Editing is currently unavailable due to a block of the server that hosts this tool.
+ {% if request.endpoint != 'server_block_report' %} +See the block report for more details.
+ {% endif %} +Editing is currently unavailable due to a block of the server that hosts this tool.
+ {% if request.endpoint != 'server_block_report' %} +See the block report for more details.
+ {% endif %} +This report shows IP blocks on Wikidata that will prevent changes being saved.
+ +There are no local blocks for the server IP address on Wikidata
+ {% endif %} + +There are no global blocks for the server IP address
+ {% endif %} + +