diff --git a/gvaldap/gvaldap/celery.py b/gvaldap/gvaldap/celery.py new file mode 100644 index 0000000..fd9a616 --- /dev/null +++ b/gvaldap/gvaldap/celery.py @@ -0,0 +1,21 @@ +from __future__ import absolute_import + +import os + +from celery import Celery + +from django.conf import settings + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', + 'gvaldap.settings.production') + + +app = Celery('gvaldap') + +app.config_from_object('django.conf:settings') +app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) + + +@app.task(bind=True) +def debug_task(self): + print('Request: {0!r}'.format(self.request)) diff --git a/gvaldap/gvaldap/settings/base.py b/gvaldap/gvaldap/settings/base.py index 17ddf14..525fd78 100644 --- a/gvaldap/gvaldap/settings/base.py +++ b/gvaldap/gvaldap/settings/base.py @@ -217,6 +217,7 @@ DJANGO_APPS = ( # Apps specific for this project go here. LOCAL_APPS = ( 'ldapentities', + 'osusers', ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps @@ -278,3 +279,12 @@ INSTALLED_APPS += ( # Don't need to use South when setting up a test database. SOUTH_TESTS_MIGRATE = False ########## END SOUTH CONFIGURATION + + +########## CELERY CONFIGURATION +BROKER_URL = get_env_setting('GVALDAP_BROKER_URL') +CELERY_RESULT_BACKEND = 'amqp' +CELERY_RESULT_PERSISTENT = True +CELERY_TASK_RESULT_EXPIRES = None +CELERY_ACCEPT_CONTENT = ['pickle'] +########## END CELERY CONFIGURATION diff --git a/gvaldap/osusers/__init__.py b/gvaldap/osusers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gvaldap/osusers/admin.py b/gvaldap/osusers/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/gvaldap/osusers/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/gvaldap/osusers/models.py b/gvaldap/osusers/models.py new file mode 100644 index 0000000..e1c641f --- /dev/null +++ b/gvaldap/osusers/models.py @@ -0,0 +1,42 @@ +from django.db import models +from django.utils.encoding import python_2_unicode_compatible +from django.utils.translation import ugettext as _ + +from model_utils.models import TimeStampedModel + + +@python_2_unicode_compatible +class Group(TimeStampedModel, models.Model): + groupname = models.CharField( + _('Group name'), max_length=16, unique=True) + gid = models.PositiveSmallIntegerField( + _('Group ID'), unique=True, primary_key=True) + descr = models.TextField(_('Description'), blank=True) + passwd = models.CharField( + _('Group password'), max_length=128, blank=True) + + class Meta: + verbose_name = _('Group') + verbose_name_plural = _('Groups') + + def __str__(self): + return '{0} ({1})'.format(self.groupname, self.gid) + + +@python_2_unicode_compatible +class User(TimeStampedModel, models.Model): + username = models.CharField( + _('User name'), max_length=64, unique=True) + uid = models.PositiveSmallIntegerField( + _('User ID'), unique=True, primary_key=True) + group = models.ForeignKey(Group, verbose_name=_('Group')) + gecos = models.CharField(_('Gecos field'), max_length=128, blank=True) + homedir = models.CharField(_('Home directory'), max_length=256) + shell = models.CharField(_('Login shell'), max_length=64) + + class Meta: + verbose_name = _('User') + verbose_name_plural = _('Users') + + def __str__(self): + return '{0} ({1})'.format(self.username, self.uid) diff --git a/gvaldap/osusers/tasks.py b/gvaldap/osusers/tasks.py new file mode 100644 index 0000000..f0b6fbc --- /dev/null +++ b/gvaldap/osusers/tasks.py @@ -0,0 +1,28 @@ +from __future__ import absolute_import + +from celery import shared_task +from ldapentities.models import ( + LdapGroup, + LdapUser, +) + + +@shared_task +def create_ldap_group(group): + ldapgroup = LdapGroup(gid=group.gid, name=group.groupname) + ldapgroup.save() + return ldapgroup.dn + + +@shared_task +def create_ldap_user(user, password): + ldapuser = LdapUser( + uid=user.uid, group=user.group.gid, gecos=user.gecos, + home_directory=user.homedir, login_shell=user.shell, + username=user.username, common_name=user.username) + ldapuser.set_password(password) + ldapgroup = LdapGroup.objects.get(gid=ldapuser.group) + ldapgroup.members.append(ldapuser.username) + ldapgroup.save() + ldapuser.save() + return ldapuser.dn diff --git a/gvaldap/osusers/tests.py b/gvaldap/osusers/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/gvaldap/osusers/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/requirements/base.txt b/requirements/base.txt index f3ed2c7..3f694fb 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -7,3 +7,6 @@ logutils==0.3.3 South==0.8.4 celery==3.1.11 passlib==1.6.2 +billiard==3.3.0.17 +kombu==3.0.16 +pytz==2014.3