This commit is contained in:
b3yond 2018-03-29 02:00:28 +02:00
commit 10fb150c21
5 changed files with 46 additions and 33 deletions

View file

@ -21,7 +21,7 @@ class MastodonBot(Bot):
m = Mastodon(*user.get_masto_credentials())
try:
notifications = m.notifications()
except: # mastodon.Mastodon.MastodonAPIError is unfortunately not in __init__.py
except Exception:
logger.error("Unknown Mastodon API Error.", exc_info=True)
return mentions
for status in notifications:

View file

@ -4,7 +4,7 @@ import active_bots
from config import config
from db import db
import logging
import sendmail
from sendmail import sendmail
import time
@ -30,12 +30,9 @@ if __name__ == '__main__':
for bot2 in bots:
bot2.post(user, status)
time.sleep(60) # twitter rate limit >.<
except:
logger.error('Shutdown', exc_info=True)
mailer = sendmail.Mailer()
try:
mailer.send('', config['web']['contact'],
'Ticketfrei Crash Report',
attachment=config['logging']['logpath'])
except:
logger.error('Mail sending failed', exc_info=True)
except Exception:
logger.error('Shutdown.', exc_info=True)
try:
sendmail(config['web']['contact'], 'Ticketfrei Shutdown')
except Exception:
logger.error('Could not inform admin.', exc_info=True)

2
db.py
View file

@ -123,7 +123,7 @@ class DB(object):
return None # invalid token
if 'passhash' in json.keys():
# create user
self.execute("INSERT INTO user (passhash) VALUES(?, ?);",
self.execute("INSERT INTO user (passhash) VALUES(?);",
(json['passhash'], ))
uid = self.cur.lastrowid
else:

View file

@ -5,9 +5,8 @@ from config import config
from db import db
import logging
import tweepy
import sendmail
from sendmail import sendmail
from session import SessionPlugin
import smtplib
from mastodon import Mastodon
@ -28,18 +27,19 @@ def register_post():
if db.by_email(email):
return dict(error='Email address already in use.')
# send confirmation mail
confirm_link = request.url + "/../confirm/" + db.user_token(email, password)
send_confirmation_mail(confirm_link, email)
return dict(info='Confirmation mail sent.')
def send_confirmation_mail(confirm_link, email):
m = sendmail.Mailer()
try:
m.send("Complete your registration here: " + confirm_link, email,
"[Ticketfrei] Confirm your account")
except smtplib.SMTPRecipientsRefused:
return "Please enter a valid E-Mail address."
sendmail(
email,
"[Ticketfrei] Confirm your account",
"Complete your registration here: %s://%s/confirm/%s" % (
request.urlparts.scheme,
request.urlparts.netloc,
db.user_token(email, password)
)
)
return dict(info='Confirmation mail sent.')
except Exception:
return dict(error='Could not send confirmation mail.')
@get('/confirm/<token>')
@ -56,10 +56,14 @@ def confirm(token):
@view('template/login.tpl')
def login_post():
# check login
if db.by_email(request.forms.get('email', '')) \
.check_password(request.forms.get('pass', '')):
return redirect('/settings')
return dict(error='Authentication failed.')
try:
if db.by_email(request.forms.get('email', '')) \
.check_password(request.forms.get('pass', '')):
return redirect('/settings')
except AttributeError:
pass
finally:
return dict(error='Authentication failed.')
@get('/settings')
@ -146,7 +150,7 @@ def login_mastodon(user):
return dict(
info='Thanks for supporting decentralized social networks!'
)
except:
except Exception:
logger.error('Login to Mastodon failed.', exc_info=True)
return dict(error='Login to Mastodon failed.')

View file

@ -1,12 +1,13 @@
#!/usr/bin/env python3
import smtplib
import ssl
from config import config
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
import logging
from getpass import getuser
import smtplib
from socket import getfqdn
import ssl
logger = logging.getLogger(__name__)
@ -68,6 +69,17 @@ class Mailer(object):
return "Sent mail to " + recipient + ": " + subject
def sendmail(to, subject, body=''):
msg = MIMEMultipart()
msg['From'] = '%s@%s' % (getuser(), getfqdn())
msg['To'] = to
msg['Subject'] = subject
msg.attach(MIMEText(body))
with smtplib.SMTP('localhost') as smtp:
smtp.send_message(msg)
# For testing:
if __name__ == '__main__':
m = Mailer()