File: models.py

package info (click to toggle)
django-ldapdb 1.5.1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 440 kB
  • sloc: python: 1,994; makefile: 40
file content (113 lines) | stat: -rw-r--r-- 3,586 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# -*- coding: utf-8 -*-
# This software is distributed under the two-clause BSD license.
# Copyright (c) The django-ldapdb project

from django.db.models import Manager

import ldapdb.models
from ldapdb.models import fields


class LdapUser(ldapdb.models.Model):
    """
    Class for representing an LDAP user entry.
    """
    # LDAP meta-data
    base_dn = "ou=people,dc=example,dc=org"
    object_classes = ['posixAccount', 'shadowAccount', 'inetOrgPerson']
    last_modified = fields.DateTimeField(db_column='modifyTimestamp', editable=False)

    # inetOrgPerson
    first_name = fields.CharField(db_column='givenName', verbose_name="Prime name")
    last_name = fields.CharField("Final name", db_column='sn')
    full_name = fields.CharField(db_column='cn')
    email = fields.CharField(db_column='mail')
    phone = fields.CharField(db_column='telephoneNumber', blank=True)
    mobile_phone = fields.CharField(db_column='mobile', blank=True)
    photo = fields.ImageField(db_column='jpegPhoto')

    # posixAccount
    uid = fields.IntegerField(db_column='uidNumber', unique=True)
    group = fields.IntegerField(db_column='gidNumber')
    gecos = fields.CharField(db_column='gecos')
    home_directory = fields.CharField(db_column='homeDirectory')
    login_shell = fields.CharField(db_column='loginShell', default='/bin/bash')
    username = fields.CharField(db_column='uid', primary_key=True)
    password = fields.CharField(db_column='userPassword')

    # shadowAccount
    last_password_change = fields.TimestampField(db_column='shadowLastChange')

    def __str__(self):
        return self.username

    def __unicode__(self):
        return self.full_name


class LdapGroup(ldapdb.models.Model):
    """
    Class for representing an LDAP group entry.
    """
    # LDAP meta-data
    base_dn = "ou=groups,dc=example,dc=org"
    object_classes = ['posixGroup']

    # posixGroup attributes
    gid = fields.IntegerField(db_column='gidNumber', unique=True)
    name = fields.CharField(db_column='cn', max_length=200, primary_key=True)
    usernames = fields.ListField(db_column='memberUid')

    def __str__(self):
        return self.name

    def __unicode__(self):
        return self.name


class LdapMultiPKRoom(ldapdb.models.Model):
    """
    Class for representing a room, using a composite primary key.
    """
    # LDAP meta-data
    base_dn = "ou=rooms,dc=example,dc=org"
    object_classes = ['room']

    # room attributes
    name = fields.CharField(db_column='cn', max_length=200, primary_key=True)
    number = fields.CharField(db_column='roomNumber', max_length=10, primary_key=True)
    phone = fields.CharField(db_column='telephoneNumber', max_length=20, blank=True, null=True)

    def __str__(self):
        return "%s (%s)" % (self.name, self.number)


class AbstractGroup(ldapdb.models.Model):
    class Meta:
        abstract = True

    object_classes = ['posixGroup']
    gid = fields.IntegerField(db_column='gidNumber', unique=True)
    name = fields.CharField(db_column='cn', max_length=200, primary_key=True)
    usernames = fields.ListField(db_column='memberUid')

    def __str__(self):
        return self.name

    def __unicode__(self):
        return self.name


class ConcreteGroup(AbstractGroup):
    base_dn = "ou=groups,dc=example,dc=org"


class FooNamePrefixManager(Manager):
    def get_queryset(self):
        return super(FooNamePrefixManager, self).get_queryset().filter(
            name__startswith='foo')


class FooGroup(AbstractGroup):
    base_dn = "ou=groups,dc=example,dc=org"
    objects = FooNamePrefixManager()