diff --git a/active_bots/mastodonbot.py b/active_bots/mastodonbot.py index c0e0240..1a313dc 100755 --- a/active_bots/mastodonbot.py +++ b/active_bots/mastodonbot.py @@ -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: diff --git a/backend.py b/backend.py index 601e19a..040aac4 100755 --- a/backend.py +++ b/backend.py @@ -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) diff --git a/db.py b/db.py index 18e3bb3..d6c52bc 100644 --- a/db.py +++ b/db.py @@ -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: diff --git a/frontend.py b/frontend.py index ae706a3..adef914 100755 --- a/frontend.py +++ b/frontend.py @@ -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/') @@ -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.') diff --git a/sendmail.py b/sendmail.py index 992ff1a..9fd9676 100755 --- a/sendmail.py +++ b/sendmail.py @@ -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()