-# $Id$
import random
import base64
import time
-import urllib
+import urllib.request, urllib.parse, urllib.error
-from PLC.Debug import log
+from PLC.Logger import logger
from PLC.Faults import *
from PLC.Method import Method
from PLC.Parameter import Parameter, Mixed
Auth(),
Mixed(Person.fields['person_id'],
Person.fields['email']),
- Person.fields['verification_key'],
+ Person.fields['verification_key'],
Person.fields['verification_expires']
]
returns = Parameter(int, '1 if verification_key is valid')
def call(self, auth, person_id_or_email, verification_key = None, verification_expires = None):
- # Get account information
+ # Get account information
persons = Persons(self.api, [person_id_or_email])
if not persons:
- raise PLCInvalidArgument, "No such account %r"%person_id_or_email
+ raise PLCInvalidArgument("No such account %r"%person_id_or_email)
person = persons[0]
if person['peer_id'] is not None:
- raise PLCInvalidArgument, "Not a local account %r"%person_id_or_email
+ raise PLCInvalidArgument("Not a local account %r"%person_id_or_email)
if person['enabled']:
- raise PLCInvalidArgument, "Account %r must be new (disabled)"%person_id_or_email
+ raise PLCInvalidArgument("Account %r must be new (disabled)"%person_id_or_email)
# Get the primary site name
person_sites = Sites(self.api, person['site_ids'])
site_name = "No Site"
# Generate 32 random bytes
- bytes = random.sample(xrange(0, 256), 32)
+ int8s = random.sample(range(0, 256), 32)
# Base64 encode their string representation
- random_key = base64.b64encode("".join(map(chr, bytes)))
+ random_key = base64.b64encode(bytes(int8s))
if verification_key is None or \
- (verification_key is not None and person['verification_expires'] and \
- person['verification_expires'] < time.time()):
- # Only allow one verification at a time
+ (verification_key is not None and person['verification_expires'] and \
+ person['verification_expires'] < time.time()):
+ # Only allow one verification at a time
if person['verification_expires'] is not None and \
person['verification_expires'] > time.time():
- raise PLCPermissionDenied, "Verification request already pending"
+ raise PLCPermissionDenied("Verification request already pending")
if verification_expires is None:
verification_expires = int(time.time() + (24 * 60 * 60))
message_id = 'Verify account'
- elif verification_key is not None:
+ elif verification_key is not None:
if person['verification_key'] is None or \
person['verification_expires'] is None:
- raise PLCPermissionDenied, "Invalid Verification key"
+ raise PLCPermissionDenied("Invalid Verification key")
elif person['verification_key'] != verification_key:
- raise PLCPermissionDenied, "Verification key incorrect"
+ raise PLCPermissionDenied("Verification key incorrect")
else:
person['verification_key'] = None
person['verification_expires'] = None
for site in person_sites:
person_ids.update(site['person_ids'])
persons = Persons(self.api, person_ids)
- pis = filter(lambda person: 'pi' in person['roles'] and person['enabled'], persons)
+ pis = [person for person in persons if 'pi' in person['roles'] and person['enabled']]
# Send e-mail to PI(s) and copy the user
To = [("%s %s" % (pi['first_name'], pi['last_name']), pi['email']) for pi in pis]
'PLC_WWW_SSL_PORT': self.api.config.PLC_WWW_SSL_PORT,
'person_id': person['person_id'],
# Will be used in a URL, so must quote appropriately
- 'verification_key': urllib.quote_plus(random_key),
+ 'verification_key': urllib.parse.quote_plus(random_key),
'site_name': site_name,
'first_name': person['first_name'],
'last_name': person['last_name'],
Subject = message['subject'] % params,
Body = message['template'] % params)
else:
- print >> log, "Warning: No message template '%s'" % message_id
+ logger.warning("No message template '%s'" % message_id)
- # Logging variables
+ # Logging variables
self.event_objects = {'Person': [person['person_id']]}
self.message = message_id
-
- if verification_key is not None and person['verification_expires'] and \
+
+ if verification_key is not None and person['verification_expires'] and \
person['verification_expires'] < time.time():
- raise PLCPermissionDenied, "Verification key has expired. Another email has been sent."
+ raise PLCPermissionDenied("Verification key has expired. Another email has been sent.")
return 1