# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2006 The Trustees of Princeton University
#
-# $Id: Persons.py,v 1.29 2007/01/08 16:34:12 tmack Exp $
+# $Id: Persons.py,v 1.32 2007/01/11 05:37:55 mlhuang Exp $
#
from types import StringTypes
'bio': Parameter(str, "Biography", max = 254, nullok = True),
'enabled': Parameter(bool, "Has been enabled"),
'password': Parameter(str, "Account password in crypt() form", max = 254),
- 'verification_key': Parameter(str, "Reset password key", max = 254),
- 'verification_expires': Parameter(int, "Date and time when verification_key expires"),
+ 'verification_key': Parameter(str, "Reset password key", max = 254, nullok = True),
+ 'verification_expires': Parameter(int, "Date and time when verification_key expires", nullok = True),
'last_updated': Parameter(int, "Date and time of last update", ro = True),
'date_created': Parameter(int, "Date and time when account was created", ro = True),
'role_ids': Parameter([int], "List of role identifiers"),
rest = email[at_sign+1:]
domain = rest.split('.')
- # This means local, unqualified addresses, are no allowed
+ # This means local, unqualified addresses, are not allowed
if not domain:
raise invalid_email
if len(domain) < 2:
self['site_ids'].remove(site_id)
self['site_ids'].insert(0, site_id)
- def send_initiate_password_reset_email(self):
- # email user next step instructions
- to_addr = {}
- to_addr[self['email']] = "%s %s" % \
- (self['first_name'], self['last_name'])
- from_addr = {}
- from_addr[self.api.config.PLC_MAIL_SUPPORT_ADDRESS] = \
- "%s %s" % ('Planetlab', 'Support')
-
- # fill in template
- messages = Messages(self.api, ['ASSWORD_RESET_INITIATE'])
- if not messages:
- print >> log, "No such message template"
- return 1
-
- message = messages[0]
- subject = message['subject']
- template = message['template'] % \
- (self.api.config.PLC_WWW_HOST,
- self['verification_key'], self['person_id'],
- self.api.config.PLC_MAIL_SUPPORT_ADDRESS,
- self.api.config.PLC_WWW_HOST)
-
- self.api.mailer.mail(to_addr, None, from_addr, subject, template)
-
- def send_account_registered_email(self, site):
- to_addr = {}
- cc_addr = {}
- from_addr = {}
- from_addr[self.api.config.PLC_MAIL_SUPPORT_ADDRESS] = \
- "%s %s" % ('Planetlab', 'Support')
-
- # email user
- user_full_name = "%s %s" % (self['first_name'], self['last_name'])
- to_addr[self['email']] = "%s" % user_full_name
-
- # if the account had a admin role or a pi role, email support.
- if set(['admin', 'pi']).intersection(self['roles']):
- to_addr[self.api.config.PLC_MAIL_SUPPORT_ADDRESS] = \
- "%s %s" % ('Planetlab', 'Support')
-
- # cc site pi's
- site_persons = Persons(self.api, site['person_ids'])
- for person in site_persons:
- if 'pi' in person['roles'] and not person['email'] in to_addr.keys():
- cc_addr[person['email']] = "%s %s" % \
- (person['first_name'], person['last_name'])
-
- # fill in template
- messages = Messages(self.api, ['ACCOUNT_REGISTERED'])
- if not messages:
- print >> log, "No such message template"
- return 1
-
- message = messages[0]
- subject = message['subject'] % (user_full_name, site['name'])
- template = message['template'] % \
- (user_full_name, site['name'], ", ".join(self['roles']),
- self.api.config.PLC_WWW_HOST, self['person_id'],
- self.api.config.PLC_MAIL_SUPPORT_ADDRESS,
- self.api.config.PLC_WWW_HOST)
-
- self.api.mailer.mail(to_addr, cc_addr, from_addr, subject, template)
-
def delete(self, commit = True):
"""
Delete existing user.
database.
"""
- def __init__(self, api, person_filter = None, columns = None, peer_id = None):
+ def __init__(self, api, person_filter = None, columns = None):
Table.__init__(self, api, Person, columns)
sql = "SELECT %s FROM view_persons WHERE deleted IS False" % \
", ".join(self.columns)
- if peer_id is None:
- sql += " AND peer_id IS NULL"
- elif isinstance(peer_id, (int, long)):
- sql += " AND peer_id = %d" % peer_id
-
if person_filter is not None:
if isinstance(person_filter, (list, tuple, set)):
# Separate the list into integers and strings
elif isinstance(person_filter, dict):
person_filter = Filter(Person.fields, person_filter)
sql += " AND (%s)" % person_filter.sql(api, "AND")
+
self.selectall(sql)