Unverified Commit 805fcb20 authored by TheTechRobo's avatar TheTechRobo
Browse files

improve error messages and make things a tad more modular

parent aecf1c0b
Loading
Loading
Loading
Loading
+18 −15
Original line number Diff line number Diff line
import re
import lostmediafinder

from flask import *
from flask import Flask, render_template, request, abort

app = Flask(__name__)

@app.route("/find/<id>")
async def find(id):
async def youtube(id):
    if not re.match(r"^[A-Za-z0-9_-]{10}[AEIMQUYcgkosw048]$", id):
        return {"status": "bad.id", "true": True, "id": None}, 400
    return (await lostmediafinder.Response.generateAsync(id)).json()
    return (await lostmediafinder.YouTubeResponse.generateAsync(id)).json()

@app.route("/api/v<int:v>/<site>/<id>")
@app.route("/api/v<int:v>/<id>")
async def findapi(v, id, site="query"):
    if v == 1:
        return "This API version is no longer supported.", 410
    if v != 2:
        return "Unrecognised API version", 404
    if site == "query":
        site = request.args.get("site") or abort(400)
    if site == "youtube":
        return await youtube(id)
    return "Unrecognised site", 404

@app.route("/")
async def ui():
async def index():
    return render_template("init.html")

@app.route("/api")
async def api():
    responseDocstring = lostmediafinder.Response.__doc__
    responseDocstring = lostmediafinder.YouTubeResponse.__doc__
    serviceDocstring = lostmediafinder.Service.__doc__
    # TODO: Parse that
    # This works fine for now tho
    return render_template("api.html", fields=responseDocstring, services=serviceDocstring, type=type)

@app.route("/nojs")
async def formsubmit():
    vid = request.args.get("vid") or abort(400)
    return render_template("fid.html", data=(await find(vid)), vid=vid, nonoscript=True)

@app.route("/ui/fid")
async def fid():
    vid = request.args.get("vid") or abort(400)
    return render_template("fid.html", data=find(vid), vid=vid)
+17 −4
Original line number Diff line number Diff line
@@ -102,9 +102,22 @@ button {
        let url = "{{ url_for('static', filename='ab79a231234507.564a1d23814ef.gif') }}";
        let src = "https://www.behance.net/gallery/31234507/Open-source-Loading-GIF-Icons-Vol-1/modules/199929391";
        document.getElementById("data").innerHTML = `<img src="${url}" width="25" height="25" /> Loading could take up to 30 seconds.`;
        fetch(`find/${vid}`)
          .then((response) => response.json())
        fetch(`api/v2/youtube/${vid}`)
                .then((response) => {
                        if (response.status == 410 || response.status == 404) {
                                document.getElementById("data").innerHTML = `<span style="color: red;">api version is not supported - this should never happen</span>`;
                                return null;
                        }
                        if (response.status == 500) {
                          document.getElementById("data").innerHTML = `<span style="color: red;">internal server error - this is not your fault, please try again</span>`;
                          return null;
                        }
                        return response.json();
                      })
          .then((data) => {
                  if (data === null) {
                    return;
                  }
            let write = "<ul>";
            let keys = data.keys;
            keys.forEach((wbm) => {
@@ -132,7 +145,7 @@ button {
            document.getElementById("but").innerHTML = "Search for Captures";
          })
          .catch((e) => {
              document.getElementById("data").innerHTML = '<span class="red" style="background-color: #FFFFFF;">An error has occured.</span>';
              document.getElementById("data").innerHTML = '<span class="red" style="background-color: #FFFFFF;">an error occured - check your internet connection</span>';
              throw (e);
          });
        }
@@ -141,7 +154,7 @@ button {
                return finish(data);
              }
              catch {
                document.getElementById("data").innerHTML = "<span class='red'>An error has occured.</span>";
                document.getElementById("data").innerHTML = "<span class='red'>this code should be unreachable - please report this issue and provide a way to reproduce</span>";
              }
      }
    </script>