from datetime import datetime, timedelta
from passlib.hash import bcrypt
from graphdb_connector import connector
from graphdb_builder.builder import create_user
driver = connector.getGraphDatabaseConnectionConfiguration()
[docs]class User:
def __init__(self, username, name=None, surname=None, acronym=None, affiliation=None, email=None, alternative_email=None, phone=None, image=None, expiration_date=365, role='reader'):
self.id = None
self.username = username
self.name = name
self.surname = surname
self.acronym = acronym
self.affiliation = affiliation
self.email = email
self.secondary_email = alternative_email
self.phone_number = phone
self.image = image
self.password = self.generate_initial_password()
self.expiration_date = datetime.today() + timedelta(days=expiration_date)
self.rolename = role
[docs] def to_dict(self):
return {'ID': self.id,
'username': self.username,
'password': self.password,
'name': self.name,
'surname': self.surname,
'acronym': self.acronym,
'affiliation': self.affiliation,
'email': self.email,
'secondary_email': self.email,
'phone_number': self.phone_number,
'image': self.image,
'expiration_date': self.expiration_date,
'rolename': self.rolename
}
[docs] def generate_initial_password(self):
return bcrypt.encrypt(self.username)
[docs] def find(self):
user = connector.find_node(driver, node_type="User", username=self.username)
return user
[docs] def validate_user(self):
user = connector.find_node(driver, node_type="User", username=self.username)
email = connector.find_node(driver, node_type="User", email=self.email)
return user is None and email is None
[docs] def register(self):
result = False
if self.find():
result = "error_exists"
elif self.validate_user():
result = create_user.create_user_from_dict(driver, self.to_dict())
if result is not None:
result = 'ok'
else:
result = 'error_database'
else:
result = 'error_email'
return result
[docs] def verify_password(self, password):
user = self.find()
if user:
return bcrypt.verify(password, user['password'])
else:
return False