dfa3d41f26a5f8905877f9c5a3c79c6a7e75c8a8
[auf-auth-mysql.git] / django / bases / nssauth / models.py
1 # -*- coding: utf-8 -*-
2
3 from django.db import models
4
5 SHELLS = (
6 ('/bin/sh', 'Bash'),
7 ('/bin/false', 'Pas de shell'),
8 )
9
10 class Group(models.Model):
11 gid = models.AutoField(primary_key=True)
12 name = models.CharField(max_length=15, unique=True, db_index=True)
13 password = models.CharField(max_length=128, db_index=True, default='x')
14 class Admin:
15 pass
16
17 def __unicode__(self):
18 return self.name
19
20 class User(models.Model):
21 uid = models.AutoField(primary_key=True)
22 username = models.CharField(max_length=15, unique=True, db_index=True)
23 group = models.ForeignKey(Group, verbose_name='groupe de base', related_name='primary_group', db_column='gid')
24 groups = models.ManyToManyField(Group, verbose_name='groupes', blank=True)
25 gecos = models.CharField(max_length=128, blank=True)
26 homedir = models.CharField(max_length=128, default='/home/')
27 shell = models.CharField(max_length=128, default='/bin/sh', choices=SHELLS)
28 password = models.CharField(max_length=128, db_index=True, help_text='Si fourni en clair, il sera chiffré lors de l\'enregistrement')
29 lstchg = models.PositiveIntegerField(default=1, editable=False, help_text='nombre de jours, comptés à partir du 1er janvier 1970, depuis le dernier changement de mot de passe')
30 min = models.PositiveIntegerField(default=0, help_text='nombre de jours à attendre avant de pouvoir changer le mot de passe')
31 max = models.PositiveIntegerField(default=99999, help_text='nombre de jours après lesquels le mot de passe doit être changé')
32 warn = models.PositiveIntegerField(default=0, help_text='nombre de jours avant la fin de validité du mot de passe et pendant lesquels l´utilisateur est averti')
33 expire = models.IntegerField(default=-1, help_text='nombre de jours, comptés à partir du 1er janvier 1970, depuis que le compte est désactivé')
34 inact = models.PositiveIntegerField(default=0, help_text='nombre de jours après la fin de validité provoquant la désactivation du compte')
35 flag = models.PositiveIntegerField(default=0, editable=False)
36 is_active = models.BooleanField('active', default=True)
37 class Admin:
38 pass
39
40 def save(self):
41 super(User, self).save()
42 if self.uid:
43 if self.password and not self.password.startswith('$1$'):
44 import crypt,random
45 salt = ('$1$%s') % ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./0123456789', 8))
46 password = crypt.crypt(self.password, salt)
47 self.password = password
48 self.save()
49
50 def __unicode__(self):
51 return self.username
52