Skip to content
Snippets Groups Projects
api.py 2.85 KiB
from flask import jsonify, render_template
from sqlite3 import connect
from makeqr import makeQR

def apiGet(request, url_scheme, s, sAPI, passwordProtected):
    try:
        userID = sAPI.dumps(s.loads(request.cookies.get('userID')))
    except:
        userID = ""

    return render_template("apiDocs.html", apikey=userID, domain=request.headers['Host'], url_scheme=url_scheme, passwordProtected=passwordProtected)

def apiPost(request, url_scheme, domain, sAPI, passwordProtected, password):
    username = "error"
    try:
        username = sAPI.loads(request.form['apikey'])
        print(username)
    except:
        pass

    try:
        short = request.form['short']
    except:
        return jsonify(
            status="1",
            message="short link missing"
        )
    
    try:
        longURL = request.form['long']
    except:
        return jsonify(
            status="2",
            message="link to short is missing"
        )

    domain_ = short.split("/")[0]
    if not domain_ in domain:
        return jsonify(
            status="3",
            message="domain for short link is not in allowed domain list"
        )
    
    if passwordProtected:
        try:
            pw = request.form["password"]
            if( pw != password):
                return jsonify(
                    status="5",
                    message="Wrong password."
                )      
        except:
            return jsonify(
                status="5",
                message="Wrong password."
            )   

    
    with connect('db/urls.db') as conn: #Check if another user already used the short link
        cursor = conn.cursor()
        res = cursor.execute('SELECT LONG_URL FROM WEB_URL WHERE SHORT_URL=?', [short])
        try:
            short2 = res.fetchone()
            already_used = False
            if short2 is not None:
                already_used = True
        except:
            pass

        if not already_used: #If short link wasn't used before, insert the link in the Database.
            res = cursor.execute(
                'INSERT INTO WEB_URL (LONG_URL, SHORT_URL, USERNAME) VALUES (?, ?, ?)',
                [longURL, short, username]
            )
            try:
                request.form['qr']
                qr64 = "data:image/jpeg;base64," + makeQR(url_scheme + "://" + short)
                
                return jsonify(
                    status="0",
                    message="ok",
                    qr=qr64
                )
            except:
                return jsonify(
                    status="0",
                    message="ok"
                )
        else:
            return jsonify(
                status="4",
                message="short url already in use"
            )
            
if (__name__ == "__main__"):
    print("This file is not made fore direct call, please run the main.py")
    exit()