Files
@ e701f9a8e606
Branch filter:
Location: FVDE/ennstatus/ennstatus/api/views.py
e701f9a8e606
4.2 KiB
text/x-python
Added missing whitespace in wiretransfer.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | import ipaddress
from flask import (Blueprint, request, current_app, jsonify, render_template,
abort)
from ennstatus.api.functions import check_json_format, update_server
from ennstatus.status.functions import (single_server, all_servers,
all_servers_by_type)
api_page = Blueprint('api', __name__)
@api_page.route('/update', methods=('POST',))
def update():
current_app.logger.info('Handling update')
if current_app.debug:
accepted_ips = ['127.0.0.1']
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']
elif 'ip6' in json:
ip = json['ip6']
else:
ip = request.remote_addr
try:
ip = ipaddress.ip_address(ip)
except ipaddress.AddressValueError:
return 'IP not allowed!\n', 403, {'Content-Type': 'text/plain'}
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)
if server:
if export_format == 'json':
current_app.logger.info('Returning server as json!')
return jsonify(server)
else:
current_app.logger.info('Returning server as xml!')
return (
render_template(
'api/export/xml/single_server.xml',
server=server),
200, {'Content-Type': 'text/xml'})
else:
current_app.logger.warning('Server not found!')
return ('Server not found!\n',
404, {'Content-Type': 'text/plain'})
else:
current_app.logger.warning('No server_name specified!')
return ('No server_name specified!\n',
400, {'Content-Type': 'text/plain'})
else:
if server_type == 'all':
current_app.logger.info('Getting all servers!')
servers = list(all_servers())
else:
current_app.logger.info('Getting all %s!' % server_type)
servers = list(all_servers_by_type(server_type.capitalize()))
if export_format == 'json':
response = {'enn_network': servers}
current_app.logger.info('Returning as json!')
return jsonify(response)
else:
current_app.logger.info('Returning as xml!')
return (render_template('api/export/xml/network.xml',
servers=servers),
200, {'Content-Type': 'text/xml'})
|