heartranked

git clone https://git.tarina.org/heartranked
Log | Files | Refs | README

commit 58d3bdde0a11a991492d06b358c53a67dfa1a4a9
parent b464991c1f58899ea0292faf65da9f7ee34c98f2
Author: rbckman <rob@tarina.org>
Date:   Mon, 17 Aug 2026 16:47:46 +0300

yes, tested on newest debian stable, works with apache2.

Diffstat:
Mapache2install.sh | 15++++++++++-----
Mserver.py | 55+++++++++++++++++++++++++++++++++++--------------------
2 files changed, 45 insertions(+), 25 deletions(-)

diff --git a/apache2install.sh b/apache2install.sh @@ -1,5 +1,11 @@ #!/bin/bash +echo " THIS SCRIPT WILL INSTALL HEARTRANKED BEEING SERVED WITH APACHE2" +echo "" +echo " YOU MUST UNINSTALL ANY OLD DEBIAN python-webpy packages otherwise it won't update" +echo "" +echo "also you must install web.py as sudo so apache2 can run it. BLESS!" + ROOT_UID=0 # Root has $UID 0. if [ "$UID" -eq "$ROOT_UID" ] @@ -25,8 +31,8 @@ EOF echo "Installing all dependencies..." apt-get update -sudo apt install apache2 libapache2-mod-wsgi-py3 python3-pip python3-pil python3-bcrypt python3-webpy python3-markdown -pip3 install webpy-v.0.76.zip +sudo apt install apache2 libapache2-mod-wsgi-py3 python3-pip python3-pil python3-markdown +sudo pip3 install webpy-v.0.76.zip --break-system-packages DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" ACONF="/etc/apache2/sites-available/heartranked.conf" @@ -34,14 +40,13 @@ ACONF="/etc/apache2/sites-available/heartranked.conf" echo "Adding local site to /etc/apache2/sites-available/heartranked.conf" cat <<'EOF' > $ACONF <VirtualHost *:80> - ServerName localhost EOF echo " DocumentRoot $DIR" >> $ACONF echo " WSGIScriptAlias / $DIR/server.py" >> $ACONF echo " WSGIPassAuthorization On" >> $ACONF echo " AddType text/html .py" >> $ACONF -echo " Alias /static $DIR/public_html/" >> $ACONF -echo " <Directory $DIR/public_html>" >> $ACONF +echo " Alias /static $DIR/static/" >> $ACONF +echo " <Directory $DIR/>" >> $ACONF cat <<'EOF' >> $ACONF Options FollowSymlinks AllowOverride None diff --git a/server.py b/server.py @@ -17,7 +17,6 @@ import random import settings import markdown import re -import bcrypt import unicodedata import urllib from pathlib import Path @@ -163,8 +162,10 @@ def adduser(name, password, mail): originalname=name name=safe_filename(name[:12]) password = password.encode("utf-8") - salt = bcrypt.gensalt() - password_hashed = bcrypt.hashpw(password, salt).decode('utf-8') + #salt = bcrypt.gensalt() + salt=os.random(16) + #password_hashed = bcrypt.hashpw(password, salt).decode('utf-8') + password_hashed=hashlib.scrypt(password.encode(),salt=salt,n=16384,r=8,p=1) tot = len(os.listdir(basedir+'r/users/')) print(password_hashed) print('users alltsomallt: ' + str(tot)) @@ -172,7 +173,7 @@ def adduser(name, password, mail): adminlevel=3 else: adminlevel=5 - thedict={'name':name, 'displayname':originalname, 'password':password_hashed,'mail':mail,'adminlevel':adminlevel} + thedict={'name':name, 'displayname':originalname, 'password':salt+password_hashed,'mail':mail,'adminlevel':adminlevel} savejson('r/users/'+name, thedict) #savetext('r/user/'+name,password_hashed) print("new user added") @@ -180,10 +181,12 @@ def adduser(name, password, mail): def updateuser(displayname, password, mail): password = password.encode("utf-8") - salt = bcrypt.gensalt() - password_hashed = bcrypt.hashpw(password, salt).decode('utf-8') + #salt = bcrypt.gensalt() + salt = os.urandom(16) + #password_hashed = bcrypt.hashpw(password, salt).decode('utf-8') + password_hashed=hashlib.scrypt(password.encode(),salt=salt,n=16384,r=8,p=1) tot = len(os.listdir(basedir+'r/users/')) - thedict={'displayname':displayname, 'password':password_hashed,'mail':mail} + thedict={'displayname':displayname, 'password':salt+password_hashed,'mail':mail} savejson('r/users/'+session.user, thedict) print("user info updated") return @@ -346,11 +349,14 @@ class login(): # raise web.seeother('/register') for p in rymdadmins: if p['name'].lower() == i['user'].lower() or p['mail'].lower() == i['user'].lower(): - try: - encodepass = p['password'].encode("utf-8") - except: - encodepass = p['password'] - if bcrypt.checkpw(i['password'].encode('utf-8'), encodepass) == True: + #try: + # encodepass = p['password'].encode("utf-8") + #except: + # encodepass = p['password'] + salt=p['password'][:16] + passcode=p['password'][16:] + key=hashlib.scrypt(p['password'].encode(), salt=salt, n=16384, r=8, p=1) + if key == passcode: session.user = p['name'] adminlevel(p['name']) if session.login == 5: @@ -643,11 +649,15 @@ class tuning(): for p in rymdadmins: print(p) if p['name'] == session.user: - try: - encodepass = p['password'].encode("utf-8") - except: - encodepass = p['password'] - if bcrypt.checkpw(i['password'].encode('utf-8'), encodepass) == True: + #try: + # encodepass = p['password'].encode("utf-8") + #except: + # encodepass = p['password'] + #if bcrypt.checkpw(i['password'].encode('utf-8'), encodepass) == True: + salt=p['password'][:16] + passcode=p['password'][16:] + key=hashlib.scrypt(p['password'].encode(), salt=salt, n=16384, r=8, p=1) + if key == passcode: #check if display name taken for a in rymdadmins: if i.user in a['displayname'] and a['name'] != session.user: @@ -722,10 +732,15 @@ class forgotpass(): if passfilter == True: raise web.seeother('/forgotpass?error=stopresetpass') unencrypted_password = ('%06x' % random.randrange(16**6)) + #password = unencrypted_password.encode("utf-8") + #salt = bcrypt.gensalt() + #password_hashed = bcrypt.hashpw(password, salt) password = unencrypted_password.encode("utf-8") - salt = bcrypt.gensalt() - password_hashed = bcrypt.hashpw(password, salt) - thedict={'password':password_hashed} + #salt = bcrypt.gensalt() + salt = os.urandom(16) + #password_hashed = bcrypt.hashpw(password, salt).decode('utf-8') + password_hashed=hashlib.scrypt(password.encode(),salt=salt,n=16384,r=8,p=1) + thedict={'password':salt+password_hashed} savejson('r/users/'+p['name'], thedict) print("lösenordet uppdaterat!") msg = "Your new passcode is: " + unencrypted_password