From 56ffaffe865f78438dad0c2be0d2b8dea6855233 Mon Sep 17 00:00:00 2001 From: Brian Wiborg Date: Mon, 25 Nov 2013 22:45:42 +0100 Subject: [PATCH] pop_members.py - this closes #22 --- pop_members.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 pop_members.py diff --git a/pop_members.py b/pop_members.py new file mode 100644 index 0000000..e50fcb5 --- /dev/null +++ b/pop_members.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python2.7 +# -*- coding: utf8 -*- +"""Synchronize all members from LDAP and populate the database + +This script fetches all active members from the LDAP database and populates the +Django database with all discovered members, and groups. + +https://github.com/c-base/cbmi/issues/22 +""" + +import ldap +from django_auth_ldap.backend import LDAPBackend +from cbmi import settings + +# some config vars +ldap_server = settings.AUTH_LDAP_SERVER_URI +ldap_baseDN = 'ou=crew,dc=c-base,dc=org' +ldap_search_scope = ldap.SCOPE_SUBTREE +ldap_retrieve_attrs = None +ldap_search_filter = 'memberOf=cn=crew,ou=groups,dc=c-base,dc=org' + +def connect(): + """connect to ldap server and return connection object""" + l = ldap.initialize(ldap_server) + l.protocol_version = ldap.VERSION3 + return l + +def query_members(l): + """query for all members and return the raw result data-structure""" + ldap_result_id = l.search(ldap_baseDN, ldap_search_scope, ldap_search_filter, ldap_retrieve_attrs) + result_set = [] + while 1: + result_type, result_data = l.result(ldap_result_id, 0) + if result_data == []: + break + else: + result_set.append(result_data) + return result_set + +def all_members(): + """fetch result data-structure and return striped uid's""" + connection = connect() + results = query_members(connection) + members = set() + for r in results: + uid = r[0][1]['uid'][0] + members.add(uid) + return members + +def populate_members(): + """fetch all members, sort them and populate the Django database""" + for m in sorted(all_members()): + member = LDAPBackend().populate_user(m) + if member: + print 'Populated: %s' % member + else: + print 'Not found: %s' % m