commit 0ac4efd6608ce799bb7f9c0b65a9bcac9d8b9390
parent 30d57f1368012efe5ae01c83ae32da814a6f12c1
Author: rbckman <rob@tarina.org>
Date: Sun, 2 Aug 2026 17:48:45 +0300
half way
Diffstat:
| M | server.py | | | 110 | ++++++++++++++++++------------------------------------------------------------- |
1 file changed, 24 insertions(+), 86 deletions(-)
diff --git a/server.py b/server.py
@@ -31,18 +31,8 @@ from PIL import ImageSequence
import settings
urls = (
- '/shop?', 'index',
- '/?', 'almost',
- '/putinbag/(.*)', 'putinbag',
- '/dropitem/(.*)?', 'dropitem',
- '/paymobile/(.*)', 'paymobile',
- '/goodies/(.*)', 'goodies',
+ '/?','heartranked',
"/stats?", "stats",
- '/payment/(.*)', 'payment',
- '/orders?', 'orders',
- '/checkout?', 'checkout',
- '/pending', 'pending',
- '/thankyou', 'thankyou',
"/login?", "login",
"/logout", "logout",
"/invites?", "invites",
@@ -53,22 +43,12 @@ urls = (
"/forgotpass?", "forgotpass",
"/register?", "register",
"/tuning?", "tuning",
- '/products/(.*)?', 'products',
- '/bigpic/(.*)?', 'bigpic',
- '/categories?', 'categories',
- '/op', 'op',
- '/shipping/(.*)', 'shipping',
- '/propaganda?', 'propaganda',
'/editor?', 'editor',
- '/heartranked?','heartranked',
- '/save', 'save',
+ '/save', 'savepost',
'/upload', 'upload',
'/rendered', 'rendered',
'/uploads?', 'uploads',
'/config', 'config',
- '/payments?', 'payments',
-
-bag = ''
#Load from settings
@@ -104,7 +84,7 @@ class creatpost:
self.value = value
return self
-def load(thename):
+def load(basedir+thename):
with open(thename, 'r') as f:
settings = json.load(f)
for key, i in settings.items():
@@ -149,7 +129,7 @@ def adduser(name, password, mail):
def adminlevel(user):
#level = db.query("SELECT adminlevel FROM rymdadmin WHERE name='"+user+"';")[0]
- level=load(basedir+'users', user)
+ level=load('users', user)
#1 session logout, web.py bug
#2 rights to see pics and comment
#3 rights to upoload
@@ -160,7 +140,7 @@ def adminlevel(user):
def stopresetpass(mail):
t = None
if os.path.exists(basedir+'stopresetpass/'+mail) == True:
- t=load(basedir+'stopresetpass/'+mail)
+ t=load('stopresetpass/'+mail)
else:
savedict={'timeadded':time.time()}
save('stopresetpass/'+mail, savedict)
@@ -178,7 +158,7 @@ def stopresetpass(mail):
def stopflood(ip,referer):
t = None
if os.path.exists(basedir+'stopflood/'+ip) == True:
- t=load(basedir+'stopflood/'+ip)
+ t=load('stopflood/'+ip)
else:
savedict={'timeadded':time.time()}
save('stopflood/'+ip, savedict)
@@ -194,7 +174,7 @@ def stopflood(ip,referer):
return False
def getinvitation(secretinvitation):
- invite=load(basedir+'invites/'+secretinvitation)
+ invite=load('invites/'+secretinvitation)
if invitation == secretinvitation:
if invite == '':
return True
@@ -343,7 +323,7 @@ class like:
user = i.user
uniqueunicorn = i.uniqueunicorn
#l = db.query("SELECT * FROM likes WHERE bild='"+uniqueunicorn+"' AND user='"+session.user+"';")
- l = load(basedir+'posts/'+uniqueunicorn+'/likes/'+session.user)
+ l = load('posts/'+uniqueunicorn+'/likes/'+session.user)
print(session.user)
if l:
user_likes = True
@@ -390,7 +370,7 @@ class user():
#soundlink = hashlib.md5(str(random.getrandbits(256)).encode('utf-8')).hexdigest()
#db.insert('sound', soundlink=soundlink, filename=soundname, sort=filetype, title=soundname, uploaddate=datetime.datetime.now(), uppladdare=user, lastmod=datetime.datetime.now(), moddedby=user)
#usersounds = db.query("SELECT * FROM published WHERE creator='"+user+"' ORDER BY timeadded DESC;")
- usersound=load(basedir+'posts/')
+ usersound=load('posts/')
#sounds = db.select('published')
sounds=os.listdir(basedir+'posts/')
creditsounds = []
@@ -412,9 +392,9 @@ class invites():
def GET(self):
if session.login > 2:
#user = db.select('rymdadmin', where='name="'+session.user+'"')[0]
- user = load(basedir+'users/'+session.user)
+ user = load('users/'+session.user)
#invites = db.select('invites', where='createdby="'+session.user+'"')
- invites = load(basedir+'invites/'+session.user)
+ invites = load('invites/'+session.user)
tuningform = self.form()
w = web.input(epost=None, render=None)
formfail = ''
@@ -429,7 +409,7 @@ class invites():
def POST(self):
if session.login > 2:
#user = db.select('rymdadmin', where='name="'+session.user+'"')[0]
- user = load(basedir+'users/'+session.user)
+ user = load('users/'+session.user)
tuningform = self.form()
i = web.input()
if i.mail == '':
@@ -456,7 +436,7 @@ class tuning():
if session.login > 2:
print('asdfasdfasdf')
#user = db.select('rymdadmin', where='name="'+session.user+'"')[0]
- user = load(basedir+'users/'+session.user)
+ user = load('users/'+session.user)
tuningform = self.form()
w = web.input(namn=None,epost=None,fail=None,upd=None)
print('asdfasdfasdfkdakkakka')
@@ -655,31 +635,23 @@ def safe_filename(name: str, max_length: int = 100, replacement: str = "-") -> s
"""
if not name:
return "file"
-
- # Normalize unicode (é → e, etc.)
+ #Normalize unicode (é → e, etc.)
name = unicodedata.normalize('NFKD', name)
name = name.encode('ascii', 'ignore').decode('ascii')
-
- # Replace spaces and common separators with the replacement char
+ #Replace spaces and common separators with the replacement char
name = re.sub(r'[\s_]+', replacement, name)
-
- # Remove any character that is not alphanumeric, hyphen, underscore, or dot
+ #Remove any character that is not alphanumeric, hyphen, underscore, or dot
name = re.sub(r'[^a-zA-Z0-9.\-_]', '', name)
-
- # Replace multiple replacement chars with single one
+ #Replace multiple replacement chars with single one
name = re.sub(re.escape(replacement) + r'+', replacement, name)
-
- # Remove leading/trailing replacement chars and dots
+ #Remove leading/trailing replacement chars and dots
name = name.strip(replacement + '.')
-
- # Prevent empty or hidden files
+ #Prevent empty or hidden files
if not name or name.startswith('.'):
name = "file" + name
-
- # Enforce max length (leave room for extension)
+ #Enforce max length (leave room for extension)
if len(name) > max_length:
name = name[:max_length]
-
return name.lower()
#-------------Get files and sort em by date modified---------------
@@ -691,12 +663,10 @@ def get_files_by_modtime(directory: str = ".", newest_first: bool = True):
- newest_first=True → Newest files first (most recent modification)
- newest_first=False → Oldest files first
"""
- path = Path(directory)
-
- # Get all files (exclude directories and hidden files if you want)
+ path = Path(directory)
+ #Get all files (exclude directories and hidden files if you want)
files = [f for f in path.iterdir() if f.is_file()]
-
- # Sort by modification time
+ #Sort by modification time
sorted_files = sorted(
files,
key=lambda f: f.stat().st_mtime, # last modified timestamp
@@ -705,7 +675,6 @@ def get_files_by_modtime(directory: str = ".", newest_first: bool = True):
# Return just the file names (as strings)
return [f.name for f in sorted_files]
-
def getfiles(filmfolder):
#get a list of films, in order of settings.p file last modified
films_sorted = []
@@ -722,36 +691,6 @@ def getfiles(filmfolder):
films_sorted = sorted(films_sorted, key=lambda tup: tup[2], reverse=True)
return films_sorted
-def getmacaroon():
- with open(basedir+'access.macaroon', 'rb') as f:
- m = f.read()
- #m = binascii.hexlify(m).decode()
- m = base64.b64encode(m).decode()
- return m
-
-def createinvoice(amount, description, label):
- #Cents to EUR
- amount = str(amount*1000)
- invoice_details = {"amount":amount, "description": description, "label": label}
- print(invoice_details)
- macaroon = getmacaroon()
- headers = {'macaroon': macaroon}
- resp = requests.post(rtl+'invoice/genInvoice', json=invoice_details, headers=headers,verify=False)
- print(resp.json())
- return resp.json()
-
-def getinvoice(label):
- macaroon = getmacaroon()
- headers = {'macaroon': macaroon}
- resp = requests.get(rtl+'invoice/listInvoices?label='+label, headers=headers, verify=False)
- return resp.json()['invoices'][0]
-
-def getnewaddr():
- macaroon = getmacaroon()
- headers = {'macaroon': macaroon}
- resp = requests.get(rtl+'invoice/newaddr', headers=headers, verify=False)
- return resp.json()['address'][0]
-
def callsubprocess(cmd):
subprocess.call(cmd.split())
@@ -1214,7 +1153,6 @@ class editor:
else:
text = ''
text2 = ''
-
if i.new == 'yes':
session.soundlink = ''
raise web.seeother('/editor')
@@ -1269,7 +1207,7 @@ class editor:
#db.insert('pawning', pawning=i.remix, name=session.user, timeadded=datetime.datetime.now())
return rendersplash.editor(storage, text, text2, markdown, safe_filename, session.soundlink, i.public, logged(), session.user, i.combine, i.remix)
-class save:
+class savepost:
def POST(self):
data = json.loads(web.data())
text = data.get("text", "")