From 3c235ac654bd5504faab15d696f1bcbe4a623da2 Mon Sep 17 00:00:00 2001 From: Theo Chatzimichos Date: Wed, 10 Jul 2013 16:03:45 +0200 Subject: Add LDAPUser model, from django-ldapdb It is in very early stage, plus it has many hardcoded things, but it provides the API we want to get LDAP accounts as python objects. TODO list regarding LDAPUser and django-ldapdb can be found at: https://github.com/gentoo/identity.gentoo.org/wiki/TODO_tampakrap#django-ldapdb Example: >>> alice = LDAPUser.objects.get(username='alice') >>> developers = LDAPUser.objects.filter(ACL__contains='dev.group') PS Since it is in early stage, and the final form of it is not fully defined yet, I'm skipping the tests for now till we have a final design --- okupy/accounts/models.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) (limited to 'okupy/accounts/models.py') diff --git a/okupy/accounts/models.py b/okupy/accounts/models.py index 190137a..976c26f 100644 --- a/okupy/accounts/models.py +++ b/okupy/accounts/models.py @@ -1,6 +1,9 @@ # vim:fileencoding=utf8:et:ts=4:sts=4:sw=4:ft=python +from django.conf import settings from django.db import models +from ldapdb.models.fields import CharField, IntegerField, ListField +import ldapdb.models class Queue(models.Model): @@ -11,8 +14,57 @@ class Queue(models.Model): email = models.EmailField(max_length=254, unique=True) token = models.CharField(max_length=40) -# Models for OpenID data store +class LDAPUser(ldapdb.models.Model): + """ Class representing an LDAP user entry """ + # LDAP metadata + base_dn = settings.AUTH_LDAP_USER_BASE_DN + object_classes = settings.AUTH_LDAP_USER_OBJECTCLASS + \ + settings.AUTH_LDAP_DEV_OBJECTCLASS + # person + last_name = CharField(db_column='sn') + full_name = CharField(db_column='cn') + description = CharField(db_column='description') + phone = CharField(db_column='telephoneNumber', blank=True) + password = ListField(db_column='userPassword') + # inetOrgPerson + first_name = CharField(db_column='givenName') + email = ListField(db_column='mail') + username = CharField(db_column='uid', primary_key=True) + # posixAccount + uid = IntegerField(db_column='uidNumber', unique=True) + gid = IntegerField(db_column='gidNumber') + gecos = CharField(db_column='gecos') + home_directory = CharField(db_column='homeDirectory') + login_shell = CharField(db_column='loginShell', default='/bin/bash') + # ldapPublicKey + ssh_key = ListField(db_column='sshPublicKey') + # gentooGroup + ACL = ListField(db_column='gentooACL') + birthday = CharField(db_column='birthday') + gentoo_join_date = ListField(db_column='gentooJoin') + gentoo_retire_date = ListField(db_column='gentooRetire') + developer_bug = ListField(db_column='gentooDevBug') + gpg_fingerprint = ListField(db_column='gentooGPGFingerprint') + gpg_key = ListField(db_column='gentooGPGKey') + latitude = IntegerField(db_column='gentooLatitude') + longitude = IntegerField(db_column='gentooLongitude') + location = CharField(db_column='gentooLocation') + mentor = ListField(db_column='gentooMentor') + im = ListField(db_column='gentooIM') + # gentooDevGroup + roles = CharField(db_column='gentooRoles') + alias = ListField(db_column='gentooAlias') + spf = ListField(db_column='gentooSPF') + + def __str__(self): + return self.username + + def __unicode__(self): + return self.username + + +# Models for OpenID data store class OpenID_Nonce(models.Model): server_uri = models.URLField(max_length=2048) -- cgit v1.2.3-65-gdbad