""" User class for MURSAT1 Mission Dashboard """ import hashlib import smtplib import time from cgi import parse_qs, escape from MmdDb import Db from MmdLocation import Location class User: def __init__ (self, email = 'Anonymous'): self.db = Db () self.email = email def create (self, user_id, firstname, lastname, email, callsign, longitude, latitude, password): password_hash = hashlib.sha1 (password).hexdigest () code = hashlib.sha1 ('{0}{1}{2}{3}'.format (user_id, firstname, lastname, email)).hexdigest () regtimeout = int (time.strftime ('%s')) + (3600 * 24) if not self.db.userCreate (user_id, firstname, lastname, email, callsign, password_hash, code, regtimeout): return False self.email = email self.firstname = firstname self.lastname = lastname return code def findPending (self, code): u = self.db.userFindPending (code) if not u: return False if int (u['regtimeout']) < int (time.strftime ('%s')): return False return True def confirm (self, code): u = self.db.userFindPending (code) if not u: return False if int (u['regtimeout']) < int (time.strftime ('%s')): return False self.db.userConfirm (code) self.email = u['email'] self.firstname = u['firstname'] self.lastname = u['lastname'] return True def load (self, email): u = self.db.userFindEmail (email) if not u: return False self.email = email self.firstname = u['firstname'] self.lastname = u['lastname'] self.password = u['password'] # include loading of location data here return True def checkPassword (self, password): if hashlib.sha1 (password).hexdigest () == self.password: return True return False def cancel (self, code): self.db.userCancel (code) def sendEmail (self, message): server = smtplib.SMTP ('localhost') try: server.sendmail ('noreply@mur.at', self.email, message) server.quit () return True except (smtplib.SMTPRecipientsRefused, smtplib.SMTPHeloError, smtplib.SMTPSenderRefused, smtplib.SMTPDataError): server.quit () return False if __name__ == "__main__": user = User () try: assert user, 'no user object' code = user.create (1, 'jogi', 'hofmueller', 'jogi@mur.at', '', 14.4, 47.2, 'blah') assert code, 'could not create user' assert user.load ('jogi@mur.at'), 'could not load user data from db' print 'passed all tests' except AssertionError as error: print 'Test failed: {0}'.format (error) # vim: tw=0 ts=2 expandtab # EOF