mirror of
https://github.com/GSA/notifications-admin.git
synced 2025-12-16 01:53:56 -05:00
This commit only deals with acceptance by users who are already in system. Changed invite client to return invited user objects instead of dictionaries. Added commented out test. fixed up fixtures to return invited user object for invites
128 lines
3.4 KiB
Python
128 lines
3.4 KiB
Python
from flask.ext.login import (UserMixin, login_fresh)
|
|
|
|
|
|
class User(UserMixin):
|
|
def __init__(self, fields, max_failed_login_count=3):
|
|
self._id = fields.get('id')
|
|
self._name = fields.get('name')
|
|
self._email_address = fields.get('email_address')
|
|
self._mobile_number = fields.get('mobile_number')
|
|
self._password_changed_at = fields.get('password_changed_at')
|
|
self._permissions = fields.get('permissions')
|
|
self._failed_login_count = 0
|
|
self._state = fields.get('state')
|
|
self.max_failed_login_count = max_failed_login_count
|
|
|
|
def get_id(self):
|
|
return self.id
|
|
|
|
def is_active(self):
|
|
return self.state == 'active'
|
|
|
|
def is_authenticated(self):
|
|
# To handle remember me token renewal
|
|
if not login_fresh():
|
|
return False
|
|
return super(User, self).is_authenticated()
|
|
|
|
@property
|
|
def id(self):
|
|
return self._id
|
|
|
|
@id.setter
|
|
def id(self, id):
|
|
self._id = id
|
|
|
|
@property
|
|
def name(self):
|
|
return self._name
|
|
|
|
@name.setter
|
|
def name(self, name):
|
|
self._name = name
|
|
|
|
@property
|
|
def email_address(self):
|
|
return self._email_address
|
|
|
|
@email_address.setter
|
|
def email_address(self, email_address):
|
|
self._email_address = email_address
|
|
|
|
@property
|
|
def mobile_number(self):
|
|
return self._mobile_number
|
|
|
|
@mobile_number.setter
|
|
def mobile_number(self, mobile_number):
|
|
self._mobile_number = mobile_number
|
|
|
|
@property
|
|
def password_changed_at(self):
|
|
return self._password_changed_at
|
|
|
|
@password_changed_at.setter
|
|
def password_changed_at(self, password_changed_at):
|
|
self._password_changed_at = password_changed_at
|
|
|
|
@property
|
|
def state(self):
|
|
return self._state
|
|
|
|
@state.setter
|
|
def state(self, state):
|
|
self._state = state
|
|
|
|
@property
|
|
def permissions(self):
|
|
return self._permissions
|
|
|
|
@permissions.setter
|
|
def permissions(self, permissions):
|
|
raise AttributeError("Read only property")
|
|
|
|
def has_permissions(self, service_id, permissions):
|
|
return True
|
|
|
|
@property
|
|
def failed_login_count(self):
|
|
return self._failed_login_count
|
|
|
|
@failed_login_count.setter
|
|
def failed_login_count(self, num):
|
|
self._failed_login_count += num
|
|
|
|
def is_locked(self):
|
|
return self.failed_login_count >= self.max_failed_login_count
|
|
|
|
def serialize(self):
|
|
dct = {"id": self.id,
|
|
"name": self.name,
|
|
"email_address": self.email_address,
|
|
"mobile_number": self.mobile_number,
|
|
"password_changed_at": self.password_changed_at,
|
|
"state": self.state,
|
|
"failed_login_count": self.failed_login_count,
|
|
"permissions": [x for x in self._permissions]}
|
|
if getattr(self, '_password', None):
|
|
dct['password'] = self._password
|
|
return dct
|
|
|
|
def set_password(self, pwd):
|
|
self._password = pwd
|
|
|
|
|
|
class InvitedUser(object):
|
|
|
|
def __init__(self, id, service, from_user, email_address, permissions, status, created_at):
|
|
self.id = id
|
|
self.service = str(service)
|
|
self.from_user = from_user
|
|
self.email_address = email_address
|
|
self.permissions = permissions.split(',')
|
|
self.status = status
|
|
self.created_at = created_at
|
|
|
|
def has_permissions(self, permission):
|
|
return permission in self.permissions
|