summaryrefslogtreecommitdiffstats
path: root/accounts/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'accounts/models.py')
-rw-r--r--accounts/models.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/accounts/models.py b/accounts/models.py
new file mode 100644
index 0000000..9e0c45e
--- /dev/null
+++ b/accounts/models.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+
+class Account(object):
+ """
+ An Account represents a complex ldap tree entry for spline users.
+ For each service a spline user can have a different password.
+ """
+
+ def __init__(self, uid, mail, services=[], dn=None, password=None):
+ self.uid = uid.encode('utf8') if isinstance(uid, unicode) else uid
+ self.services = services
+ self.dn = dn
+ self.password = password.encode('utf8') if isinstance(password, unicode) else password
+ self.new_password_root = None
+ self.new_password_services = {}
+ self.attributes = {}
+
+ self._set_attribute('mail', mail)
+
+ def __repr__(self):
+ return "<Account uid=%s>" % self.uid
+
+
+ def reset_password(self, service):
+ self.new_password_services[service] = (None, None)
+
+ def change_password(self, new_password, old_password='', service=None):
+ """
+ Changes a password for a given service. You have to use the
+ AccountService class to make the changes permanent. If no service is
+ given, the root password will be changed.
+ """
+
+ if isinstance(new_password, unicode):
+ new_password = new_password.encode('utf8')
+
+ if isinstance(old_password, unicode):
+ old_password = old_password.encode('utf8')
+
+ if not service:
+ self.new_password_root = (old_password, new_password)
+ else:
+ self.new_password_services[service] = (old_password, new_password)
+
+ def _set_attribute(self, key, value):
+ if isinstance(value, unicode):
+ value = value.encode('utf8')
+
+ self.attributes[key] = value
+
+ def change_email(self, new_mail):
+ """
+ Changes the mail address of an account. You have to use the
+ AccountService class to make changes permanent.
+ """
+ self._set_attribute('mail', new_mail)
+
+ def __getattr__(self, name):
+ if name in self.attributes:
+ return self.attributes[name]
+
+ raise AttributeError("'%s' object has no attribute '%s'" %
+ (self.__class__.__name__, name))
+
+
+class Service(object):
+ def __init__(self, id, name, url):
+ self.id = id
+ self.name = name
+ self.url = url
+ self.changed = None # used by settings view
+
+ def __repr__(self):
+ return '<Service %s>' % self.id