diff --git a/src/memberdb/account.py b/src/memberdb/account.py index 216358c0b7800039f28efb10d317affe828a34ff..bb1b683829c1514353391665d218c31ebe5c487f 100644 --- a/src/memberdb/account.py +++ b/src/memberdb/account.py @@ -9,7 +9,7 @@ from formtools.wizard.views import SessionWizardView from .models import Member from .forms import MyModelForm, MyForm from .views import MyUpdateView, MyWizardView -from memberdb.account_backend import validate_username, create_ad_user +from memberdb.account_backend import validate_username, create_ad_user, make_home @@ -127,8 +127,8 @@ class AccountView(MyWizardView): form_dict['0'].save() make_home(self.get_cleaned_data_for_step('1'), self.object) - make_dispense_account(self.object.username, self.get_cleaned_data_for_step('2')['pin']) - subscribe_to_list(self.object) + #make_dispense_account(self.object.username, self.get_cleaned_data_for_step('2')['pin']) + #subscribe_to_list(self.object) except Exception as e: messages.error(self.request,'Account creation failed for %s', self.object) messages.error(self.request, e) diff --git a/src/memberdb/account_backend.py b/src/memberdb/account_backend.py index bcfffeddfc6f2de6353e28698025e2e7edf6855a..9910eab02e8693f9adbf3f947508f91280592dce 100644 --- a/src/memberdb/account_backend.py +++ b/src/memberdb/account_backend.py @@ -1,51 +1,45 @@ -import logging - -from django.conf import settings -from django.core.exceptions import ImproperlyConfigured, ValidationError -from django.utils.translation import gettext_lazy as _ - +from datetime import date +from django.conf import settings +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ +from ldap3 import ( Server, Connection, + MODIFY_REPLACE, MODIFY_ADD ) +from ldap3.core.exceptions import * +from ldap3.core.results import RESULT_SUCCESS +from subprocess import CalledProcessError + +# stdlib +import os import re +import requests +import shutil import socket -from ldap3 import Server, Connection, MODIFY_REPLACE,MODIFY_ADD -from ldap3.core.results import RESULT_SUCCESS -from ldap3.core.exceptions import * - - import subprocess -from subprocess import CalledProcessError, TimeoutExpired -import memberdb.models -from datetime import date from squarepay import dispense - -import shutil -import os - +import memberdb.models log = logging.getLogger('ldap') # load config -ldap_uri = getattr(settings, 'AUTH_LDAP_SERVER_URI') -ldap_user_dn = getattr(settings, 'LDAP_USER_SEARCH_DN') -ldap_base_dn = getattr(settings, 'LDAP_BASE_DN') -ldap_bind_dn = getattr(settings, 'AUTH_LDAP_BIND_DN') -ldap_bind_secret = getattr(settings, 'AUTH_LDAP_BIND_PASSWORD') -make_home_cmd = ["sudo", "/services/uccportal/src/memberdb/root_actions.py"] -make_mail_cmd = 'ssh -i %s root@mooneye "/usr/local/mailman/bin/add_members" -r- ucc-announce <<< %s@ucc.asn.au' -make_mail_key = './mooneye.key' +ldap_base_dn = getattr(settings, 'LDAP_BASE_DN') +ldap_user_dn = getattr(settings, 'LDAP_USER_SEARCH_DN') +make_home_cmd = ['sudo','/services/uccportal/src/memberdb/root_actions.py'] +make_mail_cmd = 'ssh -i %s root@mooneye "/usr/local/mailman/bin/add_members" -r- ucc-announce <<< %s@ucc.asn.au' +make_mail_key = './mooneye.key' -maxuid_dn = "CN=uccdomayne,CN=ypservers,CN=ypServ30,CN=RpcServices,CN=System,"+ldap_base_dn +uid_rel_base_dn = "CN=ypservers,CN=ypServ30,CN=RpcServices,CN=System," +maxuid_dn = "CN=uccdomayne," + uid_rel_base_dn + ldap_base_dn #initalise ldap instace _ldap_inst = Connection( - Server(ldap_uri), - client_strategy='SYNC', - user=ldap_bind_dn, - password=ldap_bind_secret, - raise_exceptions=True, - + Server(getattr(settings, 'AUTH_LDAP_SERVER_URI')) + user = getattr(settings, 'AUTH_LDAP_BIND_DN'), + password = getattr(settings, 'AUTH_LDAP_BIND_PASSWORD'), + client_strategy ='SYNC', + raise_exceptions = True, ) # get the ldap instance and bind if required @@ -81,8 +75,9 @@ def get_ldap_attrs(dn, filter, limit, attrs): return entries; def get_user_attrs(username, attrs): + ld = get_ldap_instance() # find the user - filter = "(cn=" + username + ')' + filter = '(cn=%s)' % username result = get_ldap_attrs(ldap_user_dn, filter, 1, attrs) @@ -236,7 +231,7 @@ def create_ad_user(form_data, member): # sanity check: make sure the uid is free if subprocess.call(["id", newuid], stderr=subprocess.DEVNULL) == 0: - log.error("LDAP: uid already taken") + log.error("LDAP: UID Conflict UID %s already assigned" % newuid) raise ValueError # create the new user struct @@ -273,6 +268,7 @@ def create_ad_user(form_data, member): return True; def make_home(formdata, member): + user = member.username mail = formdata['email_address'] if formdata['forward'] else "" result = subprocess.call(make_home_cmd + [user, mail]) @@ -282,6 +278,10 @@ def make_home(formdata, member): raise CalledProcessError def subscribe_to_list(member): + # TODO: when (if) we upgrade to mailman 3 we should switch to the new + # mailman REST API. + + # aweful hack result = os.system(make_mail_cmd % (make_mail_key, member.username)) if result == 0: return True