2020-10-19 17:58:20 +02:00
import hashlib
import getpass
import database_connector
2020-10-21 15:34:11 +02:00
from api_keys import *
2020-10-20 15:21:05 +02:00
import datetime
2020-10-21 15:34:11 +02:00
from TwitterAPI import TwitterAPI
2020-10-19 17:58:20 +02:00
conn = database_connector . conn
cur = database_connector . cur
def newaccount ( ) :
"""
2020-10-20 15:21:05 +02:00
Spreekt voorzich , dit was een test functie om sql een beetje onder de knie te krijgen
2020-10-19 17:58:20 +02:00
: returns True on success , False on error
"""
try :
username = input ( ' Gebruikers naam: ' )
if len ( username ) > 64 or len ( username ) < 3 :
print ( ' Gebruikersnaam lengte is ongeldig, gebruik minimaal 3 en maximaal 64 tekens! ' )
return False
except :
print ( ' Ongeldige invoer ' )
return False
try :
password1 = getpass . getpass ( ' Voer wachtwoord in: ' )
password2 = getpass . getpass ( ' Herhaal wachtwoord: ' )
if len ( password1 ) < 4 :
print ( ' Wachtwoord lengte is te weinig, gebruik minimaal 4 tekens! ' )
return False
elif password1 != password2 :
print ( ' Wachtwoorden zijn niet hetzelfde! ' )
except :
print ( ' Ongeldige invoer ' )
return False
cur . execute ( " SELECT naam FROM moderators WHERE naam = ( %s ); " , ( username , ) )
sqlreturn = cur . fetchone ( )
if sqlreturn == None :
"""
2020-10-20 15:21:05 +02:00
password1 appenden met ' saltedlol ' an beide encoden als utf8 ( ja ik weet het , zo werkt salting niet )
2020-10-19 17:58:20 +02:00
daarna hashen met sha256 ( ja ik weet het er zijn betere manieren )
na al dat gedoe , in de database inserten met gebruikersnaam en hash
"""
hashedpass = hashlib . sha256 ( password1 . encode ( ' UTF-8 ' ) + ' saltandpepper ' . encode ( ' UTF-8 ' ) ) . hexdigest ( )
try :
cur . execute ( " INSERT INTO moderators(naam, hash) VALUES ( %s , %s ) " , ( username , hashedpass ) )
conn . commit ( )
print ( ' Account aangemaakt! ' )
return True
except :
print ( ' Fout bij het aanmaken van account! ' )
return False
else :
print ( ' Gebruiker bestaat al! ' )
return False
2020-10-20 15:21:05 +02:00
def publishtwit ( berichtid ) :
2020-10-19 17:58:20 +02:00
"""
ontvangt lokaal bericht id en published dat bericht naar twitter
na het publishen , de functie pakt dan de twitter uniek id en zet het in de twitter berichten table met alle
waarden die twitter mee heeft gegeven zoals : id , tijd , datum
2020-10-20 15:21:05 +02:00
na het successfol publishen gaat de bericht status naar published ( 5 )
"""
2020-10-21 15:34:11 +02:00
twitter_API = TwitterAPI ( TWITTER_APIKEY , TWITTER_APISECRET , TWITTER_ACCESSTOKEN , TWITTER_ACCESSSECRET )
cur . execute ( " SELECT * FROM berichten WHERE berichtid = ( %s ) " , [ berichtid ] )
bericht = cur . fetchone ( )
cur . execute ( " SELECT naam FROM locaties WHERE locatieid = ( %s ) " , [ bericht [ 9 ] ] )
locatie = cur . fetchone ( )
formatted = str ( bericht [ 1 ] + ' | Door ' + bericht [ 4 ] + ' op ' + locatie [ 0 ] )
if len ( formatted ) < 180 :
response = twitter_API . request ( ' statuses/update ' , { ' status ' : formatted } )
jsonresponse = response . json ( )
if response . status_code == 200 :
# vul tabel twitterberichten eerst in
QUERY = ' INSERT INTO twitterberichten(twitterid, datumpublished) VALUES ( %s , %s ) '
DATA = ( jsonresponse [ ' id ' ] , jsonresponse [ ' created_at ' ] )
cur . execute ( QUERY , DATA )
# link twitterberichten met bericht in berichten tabel
QUERY = ' UPDATE berichten SET twitterid = ( %s ) WHERE berichtid = ( %s ) '
DATA = ( jsonresponse [ ' id ' ] , berichtid )
cur . execute ( QUERY , DATA )
conn . commit ( )
return True
else :
print ( ' Probleem met het publishen naar twitter ' )
return False
else :
print ( ' bericht is te lang ' )
return False
2020-10-20 15:21:05 +02:00
def getmessage ( moderatorid ) :
"""
vraagt de outste bericht op en zet het bericht gelijk op moderator lock ( 2 )
returnt een tuple met de oudste bericht met de status 1 ( pending moderation )
de tuple ziet er alsvolgt uit : ( berichtid int , berichtinhoud str , datum date , tijd time , naam str )
"""
cur . execute ( " SELECT berichtid, bericht, datumontvangen, tijdontvangen, naamposter FROM berichten WHERE statusid = 1 ORDER BY datumontvangen, tijdontvangen LIMIT 1 " )
gottuple = cur . fetchone ( )
if gottuple == None :
return False
2020-10-20 15:26:07 +02:00
cur . execute ( " UPDATE berichten SET statusid = 2, moderatorid = ( %s ) WHERE berichtid = ( %s ) " , ( moderatorid , gottuple [ 0 ] ) )
2020-10-20 15:21:05 +02:00
conn . commit ( )
return gottuple
def unlockmessage ( berichtid ) :
cur . execute ( " UPDATE berichten SET statusid = 1, moderatorid = NULL WHERE berichtid = ( %s ) " , [ berichtid ] )
conn . commit ( )
return True
def acceptmessage ( berichtid , moderatorid ) :
time = datetime . datetime . utcnow ( ) . strftime ( " % H: % M: % S " )
date = datetime . datetime . utcnow ( ) . strftime ( " % Y- % m- %d " )
QUERY = " UPDATE berichten SET statusid = 4, datumgekeurd = ( %s ), tijdgekeurd = ( %s ), moderatorid = ( %s ) WHERE berichtid = ( %s ) "
2020-10-20 15:26:07 +02:00
DATA = ( date , time , moderatorid , berichtid )
2020-10-20 15:21:05 +02:00
cur . execute ( QUERY , DATA )
conn . commit ( )
return True
def rejectmessage ( berichtid , moderatorid ) :
time = datetime . datetime . utcnow ( ) . strftime ( " % H: % M: % S " )
date = datetime . datetime . utcnow ( ) . strftime ( " % Y- % m- %d " )
QUERY = " UPDATE berichten SET statusid = 3, datumgekeurd = ( %s ), tijdgekeurd = ( %s ), moderatorid = ( %s ) WHERE berichtid = ( %s ) "
2020-10-20 15:26:07 +02:00
DATA = ( date , time , moderatorid , berichtid )
2020-10-20 15:21:05 +02:00
cur . execute ( QUERY , DATA )
conn . commit ( )
return True
def moderateloop ( ) :
"""
deze functie stop alleen als de gebruiker het aangeeft met : q
deze functie vraagt ten eerste de outste bericht door getmessage ( )
daarna weergeven de bericht , naam , tijd en datum .
als de moderator het bericht goedkeurt de status van bericht veranderen naar moderator accepted ( 4 )
als de bericht wordt afgewezen verander de status naar moderator rejected ( 3 ) en loop weer verder
nadat de bericht is goedgekeurt direct de functie publishtwit ( berichtid ) en loopt weer verder
2020-10-19 17:58:20 +02:00
"""
2020-10-20 15:21:05 +02:00
2020-10-20 15:26:07 +02:00
moderatorid = 1
2020-10-20 15:21:05 +02:00
while True :
exitvar = False
2020-10-20 15:26:07 +02:00
bericht = getmessage ( moderatorid )
2020-10-20 15:21:05 +02:00
if bericht == False :
print ( ' Er zijn geen berichten meer om te weergeven, probeer het later opnieuw ' )
return True
print ( " Op " + str ( bericht [ 2 ] ) + " " + str ( bericht [ 3 ] ) + " heeft " + str ( bericht [ 4 ] ) + " een bericht achtergelaten " )
print ( str ( bericht [ 0 ] ) + " " + str ( bericht [ 1 ] ) )
while exitvar != True :
try :
modinput = input ( ' r = reject, a = accept, q = quit: ' ) . lower ( )
if modinput == ' r ' :
2020-10-21 15:34:11 +02:00
if rejectmessage ( bericht [ 0 ] , moderatorid ) :
print ( ' Moderatie opgeslagen ' )
else :
print ( ' Probleem met het opslaan van de moderatie ' )
2020-10-20 15:21:05 +02:00
exitvar = True
elif modinput == ' a ' :
2020-10-21 15:34:11 +02:00
if acceptmessage ( bericht [ 0 ] , moderatorid ) :
print ( ' Bericht successvol opgeslagen in database ' )
else :
print ( ' Probleem met het opslaan van de moderatie. ' )
if publishtwit ( bericht [ 0 ] ) :
print ( ' Bericht is successvol gepubliceerd op twitter ' )
else :
print ( ' Probleem met het publiceren op twitter ' )
2020-10-20 15:21:05 +02:00
exitvar = True
elif modinput == ' q ' :
unlockmessage ( bericht [ 0 ] )
return True
except :
2020-10-20 15:26:07 +02:00
print ( ' Ongeldige invoer ' )
moderateloop ( )