Changeset - 72962eef0d3a
[Not reviewed]
default
0 2 0
Dennis Fink - 11 years ago 2013-11-18 21:12:48
dennis.fink@c3l.lu
updated ennstatus
2 files changed with 8 insertions and 1 deletions:
0 comments (0 inline, 0 general)
ennstatus/__init__.py
Show inline comments
 
from flask import Flask
 
from flask import Flask, redirect, url_for
 
from flask_bootstrap import Bootstrap
 
from flask.ext.compress import Compress
 
#from flask_sslify import SSLify
 

	
 
from ennstatus.log import init_logging
 

	
 
app = Flask(__name__)
 
app.config.from_envvar('ENNSTATUS_SETTINGS')
 

	
 
Bootstrap(app)
 
Compress(app)
 
#SSLify(app, permanent=True)
 

	
 
from ennstatus.views import root_page
 
from ennstatus.api.views import api_page
 
from ennstatus.donate.views import donate_page
 
from ennstatus.status.views import status_page
 
from ennstatus.stats.views import stats_page
 

	
 
app.register_blueprint(root_page)
 
app.register_blueprint(api_page, url_prefix='/api')
 
app.register_blueprint(donate_page, url_prefix='/donate')
 
app.register_blueprint(status_page, url_prefix='/status')
 
app.register_blueprint(stats_page, url_prefix='/stats')
 

	
 

	
 
@app.errorhandler(404)
 
def page_not_found(e):
 
    return redirect(url_for('donate.index'))
 

	
 
init_logging(app)
 

	
 
application = app
ennstatus/api/views.py
Show inline comments
 
@@ -17,52 +17,54 @@ def update():
 
    else:
 
        accepted_ips = current_app.config.get('ENNSTATUS_ACCEPTED_IPS', [])
 

	
 
    json = request.get_json()
 
    if json is None:
 
        current_app.logger.info('No JSON data supplied!')
 
        return 'No JSON data supplied!\n', 400, {'Content-Type': 'text/plain'}
 

	
 
    try:
 
        check_json_format(json)
 
    except ValueError as e:
 
        current_app.logger.warning(' '.join([str(e), str(json)]))
 
        return str(e), 409, {'Content-Type': 'text/plain'}
 

	
 
    if 'ip' in json:
 
        ip = json['ip']
 
    else:
 
        ip = request.remote_addr
 

	
 
    if request.remote_addr not in accepted_ips:
 
        current_app.logger.warn("Unallowed IP %s tried to update data!"
 
                                % ip)
 
        return 'IP not allowed!\n', 403, {'Content-Type': 'text/plain'}
 

	
 
    current_app.logger.info(str(json))    
 
    server = update_server(server=json, ip=ip)
 

	
 
    if server:
 
        current_app.logger.info('Return result')
 
        current_app.logger.info(str(server))
 
        return (jsonify(server), 201,
 
                {'Location': '/api/export/json/single?server_name=%s'
 
                 % server['server_name']})
 

	
 
    else:
 
        current_app.logger.error("Unexpected error: %s" % server,
 
                                 exc_info=True)
 
        return abort(500)
 

	
 

	
 
@api_page.route('/export', defaults={'server_type': 'all',
 
                                     'export_format': 'json'})
 
@api_page.route('/export/<any("json", "xml"):export_format>',
 
                defaults={'server_type': 'all'})
 
@api_page.route(('/export/<any("json", "xml"):export_format>'
 
                 '/<any("all", "exit", "bridge", "relay", "single")'
 
                 ':server_type>'))
 
def export(export_format, server_type):
 

	
 
    current_app.logger.info('Handling export')
 
    if server_type == 'single':
 
        server_name = request.args.get('server_name', None)
 
        if server_name is not None:
 
            server = single_server(server_name)
0 comments (0 inline, 0 general)