From 33b3dcae9d1612cfb422edeb374eab9bc5c2bbb0 Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Thu, 2 Apr 2015 14:04:55 +0200 Subject: [PATCH] Adds celery, adds copy hash cmd, settings update --- README | 2 +- .../management/commands/copy_hashes.py | 18 ++++++++++++++++++ neuf_userinfo/tasks.py | 9 +++++++++ neuf_userinfo/utils.py | 2 +- neuf_userinfo/views.py | 9 +++++++-- requirements.txt | 1 + userinfosite/__init__.py | 2 ++ userinfosite/celery.py | 15 +++++++++++++++ userinfosite/settings.py | 15 ++++++++++++--- 9 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 neuf_userinfo/management/commands/copy_hashes.py create mode 100644 neuf_userinfo/tasks.py create mode 100644 userinfosite/celery.py diff --git a/README b/README index 1449e9b..b9ecfbd 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ # Installation - apt-get install libldap2-dev python-dev libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev ldap-utils + apt-get install libldap2-dev python-dev libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev ldap-utils redis-server virtualenv venv . venv/bin/activate pip install -r requirements.txt diff --git a/neuf_userinfo/management/commands/copy_hashes.py b/neuf_userinfo/management/commands/copy_hashes.py new file mode 100644 index 0000000..23037ff --- /dev/null +++ b/neuf_userinfo/management/commands/copy_hashes.py @@ -0,0 +1,18 @@ +# coding: utf-8 +from __future__ import unicode_literals +from django.core.management.base import BaseCommand + +from inside.models import InsideUser +from neuf_ldap.models import LdapUser + + +class Command(BaseCommand): + """ Copy all LDAP users password hashes from to Inside users without one """ + def handle(self, *args, **options): + ldap_user_passwords = dict(LdapUser.objects.values_list('username', 'password')) + inside_users = InsideUser.objects.filter(ldap_password=None).exclude(ldap_username=None) + for u in inside_users: + ldap_password = ldap_user_passwords.get(u.ldap_username) + if ldap_password is not None: + u.ldap_password = ldap_password + u.save() diff --git a/neuf_userinfo/tasks.py b/neuf_userinfo/tasks.py new file mode 100644 index 0000000..27d463f --- /dev/null +++ b/neuf_userinfo/tasks.py @@ -0,0 +1,9 @@ +from __future__ import absolute_import + +from celery import shared_task + + +@shared_task +def add_new_user(user): + from neuf_userinfo.utils import add_new_user_sync + add_new_user_sync(user) \ No newline at end of file diff --git a/neuf_userinfo/utils.py b/neuf_userinfo/utils.py index 14a6f30..8a1b09f 100644 --- a/neuf_userinfo/utils.py +++ b/neuf_userinfo/utils.py @@ -12,7 +12,7 @@ import logging logger = logging.getLogger(__name__) -def add_new_user(user): +def add_new_user_sync(user): """ - Create new user in LDAP (username, first_name, last_name, email) - Add to groups (usergroup, dns-alle), it not exists, create diff --git a/neuf_userinfo/views.py b/neuf_userinfo/views.py index c3adfe5..bbb6720 100644 --- a/neuf_userinfo/views.py +++ b/neuf_userinfo/views.py @@ -18,7 +18,8 @@ import logging from inside.models import InsideUser from neuf_userinfo.forms import NewUserForm -from neuf_userinfo.utils import add_new_user +from neuf_userinfo.tasks import add_new_user +from neuf_userinfo.utils import add_new_user_sync logger = logging.getLogger(__name__) @@ -125,7 +126,11 @@ class AddNewUserView(View): user = form.cleaned_data logger.debug('Adding user \'{}\'.'.format(user['username'])) - add_new_user(user) + + if settings.INSIDE_USERSYNC_RUN_SYNC: + add_new_user_sync(user) + else: + add_new_user.delay(user) # Async return JsonResponse({'results': 'success'}) diff --git a/requirements.txt b/requirements.txt index daa8a48..68e385f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,4 @@ Fabric==1.10.1 mysqlclient==1.3.5 passlib==1.6.2 python-ldap==2.4.15 +celery[redis]==3.1.17 diff --git a/userinfosite/__init__.py b/userinfosite/__init__.py index e69de29..ba87500 100644 --- a/userinfosite/__init__.py +++ b/userinfosite/__init__.py @@ -0,0 +1,2 @@ +from __future__ import absolute_import +from .celery import app as celery_app \ No newline at end of file diff --git a/userinfosite/celery.py b/userinfosite/celery.py new file mode 100644 index 0000000..a222e08 --- /dev/null +++ b/userinfosite/celery.py @@ -0,0 +1,15 @@ +from __future__ import absolute_import + +import os +from celery import Celery +from django.conf import settings + +# set the default Django settings module for the 'celery' program. +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'userinfosite.settings') + +app = Celery('userinfosite') + +# Using a string here means the worker will not have to +# pickle the object when using Windows. +app.config_from_object('django.conf:settings') +app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) \ No newline at end of file diff --git a/userinfosite/settings.py b/userinfosite/settings.py index a6b2af1..61ee79e 100644 --- a/userinfosite/settings.py +++ b/userinfosite/settings.py @@ -144,9 +144,9 @@ EMAIL_PORT = 25 DEFAULT_FROM_EMAIL = 'noreply@neuf.no' AUTHENTICATION_BACKENDS = ( - # 'inside.authentication.InsideBackend', - 'neuf_userinfo.backends.LDAPEmailBackend', - 'neuf_userinfo.backends.LDAPUsernameBackend', + 'inside.authentication.InsideBackend', + # 'neuf_userinfo.backends.LDAPEmailBackend', + # 'neuf_userinfo.backends.LDAPUsernameBackend', 'django.contrib.auth.backends.ModelBackend', ) # No cleaningladies. @@ -209,8 +209,10 @@ INSIDE_USER_FLAGS_SYNC = { # "is_superuser": "edbadmin" } INSIDE_GROUPS_SYNC_DELETE = True # When user logs in, groups are synced (locally in Django), this deletes aswell + INSIDE_USERSYNC_API_KEY = '' INSIDE_USERSYNC_ENC_KEY = '' +INSIDE_USERSYNC_RUN_SYNC = True # Home dir FILESERVER_HOST = "localhost" @@ -232,6 +234,13 @@ REST_FRAMEWORK = { 'PAGINATE_BY': 10 } +# CELERY SETTINGS +BROKER_URL = 'redis://localhost:6379/0' +CELERY_ACCEPT_CONTENT = ['json'] +CELERY_TASK_SERIALIZER = 'json' +CELERY_RESULT_SERIALIZER = 'json' + + try: from local_settings import * except ImportError: