#!/usr/bin/python3 from flask import Response, request from markupsafe import escape import requests, time, json import ythdd_api_v1, ythdd_globals def api_greeting(): string = {'status': 200, 'msg': f"ok (ythdd {ythdd_globals.version})", 'latest_api': f"v{ythdd_globals.apiVersion}"} string = json.dumps(string) return Response(string, mimetype='application/json') def api_global_catchall(received_request): ythdd_globals.apiRequests += 1 if request.environ['REMOTE_ADDR'] != "127.0.0.1" or (ythdd_globals.isProxied and request.environ['X-Forwarded-For'] != "127.0.0.1"): ythdd_globals.outsideApiHits += 1 request_list = received_request.split('/') api_version = request_list[0] if request_list[0] == 'v1': # use v1 api del request_list[0] # v1 # if list is empty, aka /api/v1/ if request_list == ['']: return api_greeting() try: status, received, data = ythdd_api_v1.lookup(request_list) except Exception as e: ythdd_globals.apiFailedRequests += 1 status, received, data = 500, f"internal server error: call ended in failure: {e}", [] else: ythdd_globals.apiFailedRequests += 1 status, received, data = 405, f'error: unsupported api version: "{request_list[0]}". try: "v{ythdd_globals.apiVersion}".', [] response = {'status': status, 'msg': received, 'data': data} return Response(json.dumps(response), mimetype='application/json', status=status)