ventilaar
/
twitter_zuil
Archived
1
Fork 0
This repository has been archived on 2021-06-10. You can view files and clone it, but cannot push or open issues or pull requests.
twitter_zuil/moderator_gui.py

317 lines
11 KiB
Python
Raw Normal View History

2020-10-31 14:07:19 +01:00
from flask import Flask, request, render_template, session, redirect, url_for, flash
from TwitterAPI import TwitterAPI
from api_keys import *
import database_connector
import hashlib
import secrets
import datetime
2020-10-31 14:07:19 +01:00
# TESTING
debug = True
# langere commands korter maken
2020-10-31 14:07:19 +01:00
conn = database_connector.conn
cur = database_connector.cur
# flask startup
2020-10-31 14:07:19 +01:00
app = Flask(__name__)
# genereert na elke opstart een andere secret key zodat usersessies ook invalidated worden
if debug == True:
app.secret_key = 'jdndhsyh83r90hfeqwf' # dit is om live te testen
else:
app.secret_key = secrets.token_hex(32)
2020-10-31 14:07:19 +01:00
def func_check_login(uname, pword):
2020-10-31 14:07:19 +01:00
hashedpass = hashlib.sha256(pword.encode('UTF-8') + 'saltandpepper'.encode('UTF-8')).hexdigest()
cur.execute("SELECT * FROM moderators WHERE naam = (%s);", [uname])
sqlreturn = cur.fetchone()
if sqlreturn == None:
flash('Gebruiker niet gevonden')
2020-10-31 14:07:19 +01:00
return False
elif hashedpass != sqlreturn[2]:
flash('Uw wachtwoord is fout')
2020-10-31 14:07:19 +01:00
return False
elif sqlreturn[3] != True:
flash('Dit account mag niet meer inloggen')
return False
2020-10-31 14:07:19 +01:00
else:
return True
def func_listmoderators(limit, page):
cur.execute('SELECT * FROM moderators LIMIT (%s) OFFSET (%s)', (limit, page))
allmoderators = cur.fetchall()
cur.execute('SELECT COUNT(*) FROM moderators')
countmoderators = cur.fetchone()
return (allmoderators, countmoderators)
def func_addmoderator(uname, pword, pword2):
username = uname.lower()
password = pword
password2 = pword2
if len(password) < 4:
flash('Wachtwoord lengte is te weinig, gebruik minimaal 4 tekens!')
return False
elif password != password2:
flash('Wachtwoorden zijn niet hetzelfde!')
return False
if len(username) > 64 or len(username) < 3:
flash('Gebruikersnaam lengte is ongeldig, gebruik minimaal 3 en maximaal 64 tekens!')
return False
elif ' ' in username:
flash('Gebruikersnaam bevat spatie, dat mag niet')
return False
cur.execute("SELECT naam FROM moderators WHERE naam = (%s);", (username,))
sqlreturn = cur.fetchone()
if sqlreturn == None:
hashedpass = hashlib.sha256(password.encode('UTF-8') + 'saltandpepper'.encode('UTF-8')).hexdigest()
cur.execute("INSERT INTO moderators(naam, hash, maylogin) VALUES (%s, %s, 'true')", (username, hashedpass))
conn.commit()
flash('Account voor ' + username + ' aangemaakt!')
return True
else:
flash('Probleem met de database, bestaat de gebruiker al?')
return False
def func_removemoderator(moderatorid):
try:
cur.execute('DELETE FROM moderators WHERE moderatorid = (%s)', [moderatorid])
conn.commit()
flash('Moderator account verwijdert')
return True
except:
conn.rollback()
try:
cur.execute('UPDATE moderators SET maylogin = false WHERE moderatorid = (%s)', [moderatorid])
conn.commit()
flash('Account kan niet verwijdert worden, account nu mag niet meer inloggen')
return True
except:
conn.rollback()
flash('Probleem opgetreden bij het aanpassen van moderator account')
return False
def func_listberichten(limit, page):
cur.execute('SELECT berichten.berichtid, berichten.bericht, berichten.datumontvangen, berichten.naamposter, '
'berichten.datumgekeurd, locaties.naam, moderators.naam, statuses.status, berichten.twitterid '
'FROM berichten '
'LEFT OUTER JOIN statuses ON berichten.statusid = statuses.statusid '
'LEFT OUTER JOIN locaties ON berichten.locatieid = locaties.locatieid '
'LEFT OUTER JOIN moderators ON berichten.moderatorid = moderators.moderatorid '
'ORDER BY datumontvangen DESC LIMIT (%s) OFFSET (%s)', (limit, page))
allberichten = cur.fetchall()
cur.execute('SELECT COUNT(*) FROM berichten')
countberichten = cur.fetchone()
return (allberichten, countberichten)
def func_querybericht(berichtid):
cur.execute('SELECT berichten.berichtid, berichten.bericht, berichten.datumontvangen, berichten.naamposter, '
'berichten.datumgekeurd, locaties.naam, moderators.naam, statuses.status, berichten.twitterid '
'FROM berichten '
'LEFT OUTER JOIN statuses ON berichten.statusid = statuses.statusid '
'LEFT OUTER JOIN locaties ON berichten.locatieid = locaties.locatieid '
'LEFT OUTER JOIN moderators ON berichten.moderatorid = moderators.moderatorid '
'WHERE berichtid = (%s)', [berichtid])
return cur.fetchone()
def func_autoqueuebericht(moderatornaam):
cur.execute('SELECT berichten.berichtid, berichten.bericht, berichten.datumontvangen, berichten.naamposter, '
'locaties.naam, statuses.status '
'FROM berichten '
'LEFT OUTER JOIN statuses ON berichten.statusid = statuses.statusid '
'LEFT OUTER JOIN locaties ON berichten.locatieid = locaties.locatieid '
'LEFT OUTER JOIN moderators ON berichten.moderatorid = moderators.moderatorid '
'WHERE berichten.statusid = 1 ORDER BY datumontvangen LIMIT 1')
bericht = cur.fetchone()
if bericht == None:
flash('Er zijn geen berichten meer om te keuren, probeer het later opnieuw')
return False
cur.execute('SELECT moderatorid FROM moderators WHERE naam = (%s)', [moderatornaam])
moderatorid = cur.fetchone()[0]
cur.execute('UPDATE berichten SET statusid = 2, moderatorid = (%s) WHERE berichtid = (%s)', (moderatorid, bericht[0]))
conn.commit()
return bericht
def func_unlockbericht(berichtid):
cur.execute("UPDATE berichten SET statusid = 1, moderatorid = NULL WHERE berichtid = (%s)", [berichtid])
conn.commit()
return True
def func_messageaccept(berichtid):
date = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
QUERY = "UPDATE berichten SET statusid = 4, datumgekeurd = (%s) WHERE berichtid = (%s)"
DATA = (date, berichtid)
cur.execute(QUERY, DATA)
conn.commit()
return True
def func_messagereject(berichtid):
date = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
QUERY = "UPDATE berichten SET statusid = 3, datumgekeurd = (%s) WHERE berichtid = (%s)"
DATA = (date, berichtid)
cur.execute(QUERY, DATA)
conn.commit()
return True
def func_publish_twitter(berichtid):
return True
2020-10-31 14:07:19 +01:00
@app.route('/')
def root():
return render_template('root.html')
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
if func_check_login(request.form['uname'], request.form['pword']):
2020-10-31 14:07:19 +01:00
session['username'] = request.form['uname']
return redirect(url_for('home'))
else:
return render_template('login.html')
else:
if 'username' in session:
session.pop('username', None)
flash('You logged out!')
return render_template('login.html')
@app.route('/home')
def home():
if 'username' in session:
return render_template('home.html', username=session['username'])
else:
flash('You are not logged in!')
return redirect(url_for('login'))
@app.route('/moderators')
def moderators():
if 'username' in session:
if request.args.get('maxitems'):
maxitems = int(request.args.get('maxitems'))
else:
maxitems = 10
if request.args.get('pagenum'):
pagenum = int(request.args.get('pagenum')) - 1
else:
pagenum = 0
2020-10-31 14:07:19 +01:00
page = maxitems * pagenum
2020-10-31 14:07:19 +01:00
listreturn = func_listmoderators(maxitems, page)
moderators = listreturn[0]
moderatorcount = listreturn[1][0]
2020-10-31 14:07:19 +01:00
return render_template('moderators.html', moderators=moderators, moderatorcount=moderatorcount)
else:
flash('You are not logged in!')
return redirect(url_for('login'))
@app.route('/moderators/addmoderator', methods=['POST'])
def addmoderator():
if 'username' in session:
if func_addmoderator(request.form['uname'], request.form['pword'], request.form['pword2']):
return redirect(url_for('moderators'))
else:
return redirect(url_for('moderators'))
else:
flash('You are not logged in!')
return redirect(url_for('login'))
2020-10-31 14:07:19 +01:00
@app.route('/moderators/removemoderator', methods=['POST'])
def listmoderators():
if 'username' in session:
if func_removemoderator(request.form['delete']):
return redirect(url_for('moderators'))
else:
return redirect(url_for('moderators'))
else:
flash('You are not logged in!')
return redirect(url_for('login'))
2020-10-31 14:07:19 +01:00
@app.route('/berichten')
def berichten():
if 'username' in session:
if request.args.get('maxitems'):
maxitems = int(request.args.get('maxitems'))
else:
maxitems = 10
if request.args.get('pagenum'):
pagenum = int(request.args.get('pagenum')) - 1
else:
pagenum = 0
page = maxitems * pagenum
listreturn = func_listberichten(maxitems, page)
berichten = listreturn[0]
berichtcount = listreturn[1][0]
return render_template('berichten.html', berichten=berichten, berichtcount=berichtcount)
else:
flash('You are not logged in!')
return redirect(url_for('login'))
@app.route('/bericht/<berichtid>')
def bericht(berichtid):
if 'username' in session:
bericht = func_querybericht(berichtid)
return render_template('bericht.html', bericht=bericht)
else:
flash('You are not logged in!')
return redirect(url_for('login'))
@app.route('/autoqueue', methods=['GET', 'POST'])
def autoqueue():
if 'username' in session:
if request.method == 'POST':
if func_unlockbericht(request.form['stop']):
return redirect(url_for('home'))
else:
flash('probleem met het unlocken van het bericht')
return redirect(url_for('home'))
else:
bericht = func_autoqueuebericht(session['username'])
if bericht == False:
return redirect(url_for('home'))
return render_template('autoqueue.html', bericht=bericht)
else:
flash('You are not logged in!')
return redirect(url_for('login'))
@app.route('/autoqueue/accept', methods=['POST'])
def autoqueue_accept():
if 'username' in session:
if func_messageaccept(request.form['good']):
return redirect(url_for('autoqueue'))
else:
return redirect(url_for('autoqueue'))
else:
flash('You are not logged in!')
return redirect(url_for('login'))
@app.route('/autoqueue/reject', methods=['POST'])
def autoqueue_reject():
if 'username' in session:
if func_messagereject(request.form['bad']):
return redirect(url_for('autoqueue'))
else:
return redirect(url_for('autoqueue'))
else:
flash('You are not logged in!')
return redirect(url_for('login'))
2020-10-31 14:07:19 +01:00
if __name__ == "__main__":
app.run('0.0.0.0', debug=debug)