admin django plus joli, en 5 ou 6 lignes
[auf-auth-mysql.git] / django / bases / nssauth / models.py
CommitLineData
970c90e9
TN
1# -*- coding: utf-8 -*-
2
3from django.db import models
4
5SHELLS = (
970c90e9 6 ('/bin/false', 'Pas de shell'),
417b6291
TN
7 ('/bin/bash', 'bash'),
8 ('/bin/sh', 'sh'),
9)
10
11NFS_SERVER = 'nfs.sn.auf.org'
970c90e9
TN
12
13class Group(models.Model):
14 gid = models.AutoField(primary_key=True)
15 name = models.CharField(max_length=15, unique=True, db_index=True)
16 password = models.CharField(max_length=128, db_index=True, default='x')
17 class Admin:
18 pass
19
20 def __unicode__(self):
21 return self.name
22
23class User(models.Model):
24 uid = models.AutoField(primary_key=True)
417b6291 25 username = models.CharField(max_length=15, unique=True, db_index=True, verbose_name='nom d\'utilisateur (login)')
970c90e9 26 group = models.ForeignKey(Group, verbose_name='groupe de base', related_name='primary_group', db_column='gid')
417b6291
TN
27 groups = models.ManyToManyField(Group, verbose_name='autres groupes', blank=True)
28 gecos = models.CharField(max_length=128, blank=True, verbose_name='nom complet et commentaires (information GECOS)')
29 homedir = models.CharField(max_length=128, default='/net/' + NFS_SERVER + '/', verbose_name='répertoire personnel ($HOME)')
30 shell = models.CharField(max_length=128, default='/bin/false', choices=SHELLS, verbose_name='interpréteur de commandes (shell)')
31 password = models.CharField(max_length=128, db_index=True, verbose_name='mot de passe', help_text='Si fourni en clair, il sera chiffré lors de l\'enregistrement')
970c90e9
TN
32 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')
33 min = models.PositiveIntegerField(default=0, help_text='nombre de jours à attendre avant de pouvoir changer le mot de passe')
34 max = models.PositiveIntegerField(default=99999, help_text='nombre de jours après lesquels le mot de passe doit être changé')
35 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')
36 expire = models.IntegerField(default=-1, help_text='nombre de jours, comptés à partir du 1er janvier 1970, depuis que le compte est désactivé')
37 inact = models.PositiveIntegerField(default=0, help_text='nombre de jours après la fin de validité provoquant la désactivation du compte')
38 flag = models.PositiveIntegerField(default=0, editable=False)
417b6291 39 is_active = models.BooleanField('Actif', default=True)
970c90e9
TN
40 class Admin:
41 pass
42
43 def save(self):
44 super(User, self).save()
45 if self.uid:
46 if self.password and not self.password.startswith('$1$'):
47 import crypt,random
48 salt = ('$1$%s') % ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./0123456789', 8))
49 password = crypt.crypt(self.password, salt)
50 self.password = password
51 self.save()
52
53 def __unicode__(self):
54 return self.username
55