diff --git a/powerdnsadmin/routes/__init__.py b/powerdnsadmin/routes/__init__.py index 829f110..b22324b 100644 --- a/powerdnsadmin/routes/__init__.py +++ b/powerdnsadmin/routes/__init__.py @@ -1,11 +1,14 @@ -from .base import login_manager, handle_bad_request, handle_unauthorized_access, handle_access_forbidden, handle_page_not_found, handle_internal_server_error +from .base import ( + login_manager, handle_bad_request, handle_unauthorized_access, + handle_access_forbidden, handle_page_not_found, handle_internal_server_error +) from .index import index_bp from .user import user_bp from .dashboard import dashboard_bp from .domain import domain_bp from .admin import admin_bp -from .api import api_bp +from .api import api_bp, apilist_bp def init_app(app): @@ -17,6 +20,7 @@ def init_app(app): app.register_blueprint(domain_bp) app.register_blueprint(admin_bp) app.register_blueprint(api_bp) + app.register_blueprint(apilist_bp) app.register_error_handler(400, handle_bad_request) app.register_error_handler(401, handle_unauthorized_access) diff --git a/powerdnsadmin/routes/api.py b/powerdnsadmin/routes/api.py index e37b2ae..036912b 100644 --- a/powerdnsadmin/routes/api.py +++ b/powerdnsadmin/routes/api.py @@ -36,6 +36,7 @@ import secrets import string api_bp = Blueprint('api', __name__, url_prefix='/api/v1') +apilist_bp = Blueprint('apilist', __name__, url_prefix='/') apikey_schema = ApiKeySchema(many=True) apikey_single_schema = ApiKeySchema() @@ -47,6 +48,7 @@ user_detailed_schema = UserDetailedSchema() account_schema = AccountSchema(many=True) account_single_schema = AccountSchema() + def get_user_domains(): domains = db.session.query(Domain) \ .outerjoin(DomainUser, Domain.id == DomainUser.domain_id) \ @@ -177,6 +179,11 @@ def before_request(): })) +@apilist_bp.route('/api', methods=['GET']) +def index(): + return '[{"url": "/api/v1", "version": 1}]', 200 + + @api_bp.route('/pdnsadmin/zones', methods=['POST']) @api_basic_auth @api_can_create_domain @@ -294,7 +301,6 @@ def api_login_delete_zone(domain_name): domain_id=domain_id) history.add() - except Exception as e: current_app.logger.error('Error: {0}'.format(e)) abort(500) @@ -1087,7 +1093,7 @@ def api_zone_forward(server_id, zone_id): if 200 <= status < 300: current_app.logger.debug("Request to powerdns API successful") if Setting().get('enable_api_rr_history'): - if request.method in ['POST', 'PATCH'] : + if request.method in ['POST', 'PATCH']: data = request.get_json(force=True) for rrset_data in data['rrsets']: history = History(msg='{0} zone {1} record of {2}'.format( @@ -1160,8 +1166,10 @@ def api_get_zones(server_id): return jsonify(domain_schema.dump(domain_obj_list)), 200 else: resp = helper.forward_request() - if (g.apikey.role.name not in ['Administrator', 'Operator'] - and resp.status_code == 200): + if ( + g.apikey.role.name not in ['Administrator', 'Operator'] + and resp.status_code == 200 + ): domain_list = [d['name'] for d in domain_schema.dump(g.apikey.domains)] @@ -1182,6 +1190,7 @@ def api_server_forward(): resp = helper.forward_request() return resp.content, resp.status_code, resp.headers.items() + @api_bp.route('/servers/', methods=['GET']) @apikey_auth def api_server_config_forward(server_id):