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()