Skip to content

Commit

Permalink
-> python3; vylepšený výpisu hesel
Browse files Browse the repository at this point in the history
  • Loading branch information
MarrekNozka committed Feb 11, 2022
1 parent 5a55076 commit e365a6f
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 68 deletions.
4 changes: 2 additions & 2 deletions dev_server.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
#!/bin/sh
# File: dev_server.sh
# Task: Bottle framework develompent wrapper
############################################################

python -m bottle --bind=localhost:8899 --debug --reload webpwgen
python3 -m bottle --bind=localhost:8899 --debug --reload webpwgen
21 changes: 6 additions & 15 deletions look/styles.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 11 additions & 6 deletions views/base.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<meta name="keywords" content="pwgen, password generátor, zapamatovatelné heslo"/>
<link href="{{root}}look/styles.css" rel="stylesheet" type="text/css" />
<link href="{{root}}look/favico.png" rel="shortcut icon" type="image/png" />
<title>webPWgen</title>
<title>webpwgen</title>
</head>

<body>
Expand All @@ -17,7 +17,7 @@

<div id="head">

<h1 class="sideL"><a href="{{root}}">webPWgen</a></h1>
<h1 class="sideL"><a href="{{root}}">webpwgen</a></h1>
<p class=sideR><span class="sideR">
% if lang=='cs':
Čeština
Expand All @@ -43,7 +43,12 @@
% elif lang=='en':
<p>How long password do you want? (number from 5 to 40)<br />
% end
<input name="length" type="text" /><input value="Generuj" type="submit" />
<input name="length" type="number" />
% if lang=='cs':
<input value="Generuj" type="submit" />
% else:
<input value="Generate" type="submit" />
% end
</p>
</form>
% if lang=='cs':
Expand All @@ -56,9 +61,9 @@
<p>Lenght of the passwords is {{length}} characters:</p>
% end

<p class="pswd"><kbd>
{{passwords}}
</kbd></p>
% for password in passwords:
<p class="pswd"><kbd>{{ !password }}</kbd></p>
%end
</div>

<div id="foot">
Expand Down
162 changes: 117 additions & 45 deletions webpwgen.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,75 +7,145 @@
############################################################################


from bottle import run, route, request, redirect, response, \
template, view, error, \
static_file, default_app, BaseTemplate
from bottle import (
# run,
route,
request,
redirect,
response,
template,
# view,
error,
static_file,
default_app,
BaseTemplate,
)
import subprocess

############################################################################

app = default_app()
BaseTemplate.defaults['getURL'] = app.get_url
BaseTemplate.defaults["getURL"] = app.get_url
getURL = app.get_url


@route('/look/<filepath:path>')
@route("/look/<filepath:path>")
def server_static(filepath):
return static_file(filepath, root='./look')
return static_file(filepath, root="./look")


@route('/')
@route('/<length:int>')
@route('/<length:int>/')
@route("/")
@route("/<length:int>")
@route("/<length:int>/")
def choselang(length=8):
if request.get_cookie("lang"):
lang = request.get_cookie("lang")
else:
languages = acceptLanguages(request.headers['Accept-Language'])
languages.reverse()
try:
cs = languages.index('cs')
except:
cs = -1
try:
en = languages.index('en')
except:
en = -1
lang = 'cs' if cs > en else 'en'
redirect(getURL('/')+lang+'/'+str(length))


@route('/<lang:re:cs|en>')
@route('/<lang:re:cs|en>/')
fromBrowser = request.headers.get("Accept-Language")
if fromBrowser:
languages = acceptLanguages(fromBrowser)
languages.reverse()
try:
cs = languages.index("cs")
except ValueError:
cs = -1
try:
en = languages.index("en")
except ValueError:
en = -1
lang = "cs" if cs > en else "en"
else:
lang = "en"
redirect(getURL("/") + lang + "/" + str(length))


@route("/<lang:re:cs|en>")
@route("/<lang:re:cs|en>/")
def golang(lang):
redirect(getURL('/')+lang+'/8')
redirect(getURL("/") + lang + "/8")


@route('/<lang:re:cs|en>/<length:int>')
@route('/<lang:re:cs|en>/<length:int>/')
@route("/<lang:re:cs|en>/<length:int>")
@route("/<lang:re:cs|en>/<length:int>/")
def pwgen(lang, length):
response.set_cookie("lang", lang, path=getURL('/'))
response.set_cookie("lang", lang, path=getURL("/"))
if request.query.length:
length = request.query.length
try:
length = int(length)
length = 8 if length < 5 or length > 40 else length
except:
except ValueError:
length = 8
if request.query.length:
redirect(getURL('/')+lang+'/'+str(length))
pswd = subprocess.check_output(['pwgen', '-Ccn', str(length), ])
return template('base', passwords=pswd, length=length, lang=lang)
redirect(getURL("/") + lang + "/" + str(length))
passwords = []
passwords.append(
"<nobr>"
+ "</nobr> <nobr>".join(
subprocess.check_output(
[
"pwgen",
"-Ccn",
str(length),
]
)
.decode("ascii")
.split()
)
+ "</nobr>"
)
passwords.append(
"<nobr>"
+ "</nobr> <nobr>".join(
subprocess.check_output(
[
"pwgen",
"-Ccny",
str(length),
]
)
.decode("ascii")
.replace("&", "&amp;")
.replace("<", "&lt;")
.replace(">", "&gt;")
.replace('"', "&quot;")
.split()
)
+ "</nobr>"
)
passwords.append(
"<nobr>"
+ "</nobr> <nobr>".join(
subprocess.check_output(
[
"pwgen",
"-Ccnys",
str(length),
]
)
.decode("ascii")
.replace("&", "&amp;")
.replace("<", "&lt;")
.replace(">", "&gt;")
.replace('"', "&quot;")
.split()
)
+ "</nobr>"
)
return template("base", passwords=passwords, length=length, lang=lang)


############################################################################


@error(404)
def notFound(error):
return template('404', status=error.status, body=error.body)
return template("404", status=error.status, body=error.body)


############################################################################
### https://gist.github.com/filippo/1106488
# https://gist.github.com/filippo/1106488


def acceptLanguages(browser_pref_langs):
"""Parses the request and return language list.
Expand All @@ -85,7 +155,8 @@ def acceptLanguages(browser_pref_langs):
slightly modified.
Taken from tweetengine http:https://github.com/Arachnid/tweetengine/
"""
browser_pref_langs = browser_pref_langs.split(',')
# print(browser_pref_langs)
browser_pref_langs = browser_pref_langs.split(",")
i = 0
langs = []
length = len(browser_pref_langs)
Expand All @@ -95,29 +166,30 @@ def acceptLanguages(browser_pref_langs):
# If no quality string is given then the list order
# is used as quality indicator
for lang in browser_pref_langs:
lang = lang.strip().lower().replace('_', '-')
lang = lang.strip().lower().replace("_", "-")
if lang:
l = lang.split(';', 2)
l = lang.split(";", 2)
quality = []
if len(l) == 2:
try:
q = l[1]
if q.startswith('q='):
q = q.split('=', 2)[1]
if q.startswith("q="):
q = q.split("=", 2)[1]
quality = float(q)
except:
pass
if quality == []:
quality = float(length-i)
quality = float(length - i)
language = l[0]
langs.append((quality, language))
if '-' in language:
baselanguage = language.split('-')[0]
langs.append((quality-0.001, baselanguage))
if "-" in language:
baselanguage = language.split("-")[0]
langs.append((quality - 0.001, baselanguage))
i = i + 1
# Sort and reverse it
langs.sort()
langs.reverse()
# Filter quality string
langs = map(lambda x: x[1], langs)
langs = list(map(lambda x: x[1], langs))
# print(langs)
return langs

0 comments on commit e365a6f

Please sign in to comment.