From 806cce10f7c321e3ba8c10e98d11033a44e196d2 Mon Sep 17 00:00:00 2001
From: Jonas Leder <jonas@jonasled.de>
Date: Mon, 28 Feb 2022 20:56:11 +0100
Subject: [PATCH] add function generate random string
---
app/newurl.py | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/app/newurl.py b/app/newurl.py
index e0f4c21..1d34a72 100644
--- a/app/newurl.py
+++ b/app/newurl.py
@@ -2,6 +2,9 @@
from grecaptcha_verify import grecaptcha_verify
from flask import render_template
from sqlite3 import connect
+import string
+import random
+
def newurl(request, skipCaptcha, recaptchaPrivateKey, recaptchaPublicKey, builddate, domain_prepared, domain_to_index, showDomainSelect, cookieNotice, s, url_scheme, loginEnabled, passwordProtected, password):
try:
userID = s.loads(request.cookies.get('userID'))
@@ -9,6 +12,7 @@ def newurl(request, skipCaptcha, recaptchaPrivateKey, recaptchaPublicKey, buildd
except:
userID = "null"
loginbar = '<a href="/user/login" >login</a>'
+ short = request.form.get('short')
if not grecaptcha_verify(request, skipCaptcha, recaptchaPrivateKey):
return render_template('home.html', builddate=builddate, domain=domain_prepared, snackbar="There was an error validating, that you are a human, please try again.", long_url_prefilled=request.form.get('url'), short_url_prefilled=request.form.get('short').lower(), domain_prefilled=domain_to_index[request.form.get('domain')], recaptchaPublicKey=recaptchaPublicKey, showDomainSelect=showDomainSelect, loginEnabled=loginEnabled, loginbar=loginbar, cookieNotice=cookieNotice, passwordProtected=passwordProtected) #return the user the prefilled form with an error message, because recaptcha failed
if passwordProtected and (request.form.get("password") != password):
@@ -16,8 +20,8 @@ def newurl(request, skipCaptcha, recaptchaPrivateKey, recaptchaPublicKey, buildd
if (request.form.get('url').replace(" ", "") == ""):
return render_template('home.html', builddate=builddate, domain=domain_prepared, snackbar="Please enter a url to short, before submitting this form", long_url_prefilled=request.form.get('url'), short_url_prefilled=request.form.get('short').lower(), domain_prefilled=domain_to_index[request.form.get('domain')], recaptchaPublicKey=recaptchaPublicKey, showDomainSelect=showDomainSelect, loginEnabled=loginEnabled, loginbar=loginbar, cookieNotice=cookieNotice, passwordProtected=passwordProtected) #return the user the prefilled form with an error message, because no url to short was provided
if (request.form.get('short').replace(" ", "") == ""):
- return render_template('home.html', builddate=builddate, domain=domain_prepared, snackbar="Please enter a short name, before submitting this form", long_url_prefilled=request.form.get('url'), short_url_prefilled=request.form.get('short').lower(), domain_prefilled=domain_to_index[request.form.get('domain')], recaptchaPublicKey=recaptchaPublicKey, showDomainSelect=showDomainSelect, loginEnabled=loginEnabled, loginbar=loginbar, cookieNotice=cookieNotice, passwordProtected=passwordProtected) #return the user the prefilled form with an error message, because no short link was provided
- shorturl = (request.form.get('domain') + "/" + request.form.get('short').replace(" ", "_").replace("/", "").replace("?","")).lower()
+ short = gen_short(request.form.get('domain'))
+ shorturl = (request.form.get('domain') + "/" + short.replace(" ", "_").replace("/", "").replace("?","")).lower()
url = request.form.get('url')
with connect('db/urls.db') as conn: #Check if another user already used the short link
@@ -40,6 +44,24 @@ def newurl(request, skipCaptcha, recaptchaPrivateKey, recaptchaPublicKey, buildd
else:
return render_template('home.html', builddate=builddate, recaptchaPublicKey=recaptchaPublicKey, domain=domain_prepared, snackbar="URL already used, please try another one", long_url_prefilled=request.form.get('url'), short_url_prefilled=request.form.get('short').lower(), domain_prefilled=domain_to_index[request.form.get('domain')], showDomainSelect=showDomainSelect, loginbar=loginbar, cookieNotice=cookieNotice, loginEnabled=loginEnabled) #return the user the prefilled form with an error message, because the url was already used
+def gen_short(domain):
+ """
+ This function generates a random.
+ """
+ short = ''.join(random.choices(string.ascii_uppercase +
+ string.digits, k = 5))
+ 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=?', [domain + "/" + short])
+ try:
+ dbResponse = res.fetchone()
+ if dbResponse is not None:
+ return gen_short(domain)
+ return short
+ except:
+ return gen_short(domain)
+
+
if (__name__ == "__main__"):
print("This file is not made for direct call, please run the main.py")
exit()
\ No newline at end of file
--
GitLab