Example #1
0
File: group.py Project: OpenCSI/lbe
 def create(self):
     print "In order to create a new group, we need some information."
     self.group = LBEGroup()
     self.group.name = "groups"
     self._setGroupName()
     print "---------------------------------------------------------"
     print "Enter the ID of the Object Template:"
     self._setObjectTemplate()
     print "---------------------------------------------------------"
     print "Enter the ID of script for the group:"
     self._setScript()
     print "---------------------------------------------------------"
     print "-                        \033[33mWARNING\033[0m                        -"
     print "---------------------------------------------------------"
     self.group.objectTemplate = self.objectTemplate
     self.group.script = self.script
     self.viewGroup()
     choice = raw_input("Do you want to create the new group? [Y/n]\033[0m")
     if choice == 'n':
         return False
     self.group.synced_at = django.utils.timezone.now()
     groupHelper = GroupInstanceHelper(self.group, LBEGroupInstance(self.group))
     groupHelper.createTemplate()
     self.group.save()
     print "\033[32mGroup Saved!\033[0m"
     return True
Example #2
0
File: group.py Project: OpenCSI/lbe
 def create(self):
     print "In order to create a new group, we need some information."
     self.group = LBEGroup()
     self.group.name = "groups"
     self._setGroupName()
     print "---------------------------------------------------------"
     print "Enter the ID of the Object Template:"
     self._setObjectTemplate()
     print "---------------------------------------------------------"
     print "Enter the ID of script for the group:"
     self._setScript()
     print "---------------------------------------------------------"
     print "-                        \033[33mWARNING\033[0m                        -"
     print "---------------------------------------------------------"
     self.group.objectTemplate = self.objectTemplate
     self.group.script = self.script
     self.viewGroup()
     choice = raw_input("Do you want to create the new group? [Y/n]\033[0m")
     if choice == 'n':
         return False
     self.group.synced_at = django.utils.timezone.now()
     groupHelper = GroupInstanceHelper(self.group,
                                       LBEGroupInstance(self.group))
     groupHelper.createTemplate()
     self.group.save()
     print "\033[32mGroup Saved!\033[0m"
     return True
Example #3
0
File: views.py Project: OpenCSI/lbe
def searchPattern(request, pattern):
    if request.is_ajax():
        if pattern == '':
            return HttpResponse('Please enter a query.')

        objectsTemplate = LBEObjectTemplate.objects.all()
        resultObjects = []
        groupsTemplate = LBEGroup.objects.all()
        resultGroups = []

        for ot in objectsTemplate:
            objectHelper = LBEObjectInstanceHelper(ot)
            result = objectHelper.searchPattern(pattern)
            if result:
                resultObjects.append(result)

        for gt in groupsTemplate:
            groupHelper = GroupInstanceHelper(gt)
            result = groupHelper.searchPattern(pattern)
            if result:
                resultGroups.append(result)

        return render_to_response("directory/default/search/result.html", {
            'objects': resultObjects,
            'groups': resultGroups
        },
                                  context_instance=RequestContext(request))
Example #4
0
File: views.py Project: OpenCSI/lbe
def viewGroup(request, group_id):
    groupList = []
    groupName = ""
    object_id = 0
    try:
        lbeGroup = LBEGroup.objects.get(id=group_id)
        groupInstance = GroupInstanceHelper(lbeGroup)
        groupValues = groupInstance.get()
        groupName = groupValues.name
        object_id = lbeGroup.objectTemplate.id
        if (
            not groupInstance.attributeName in groupValues.changes["set"]
            or groupValues.changes["set"][groupInstance.attributeName] == []
        ):
            groupList = groupValues.attributes[groupInstance.attributeName]
        else:
            groupList = groupValues.changes["set"][groupInstance.attributeName]
    except BaseException as e:
        print e
        groupValues = []
    return render_to_response(
        "directory/default/group/view.html",
        {"groupName": groupName, "groupList": groupList, "group_id": group_id, "object_id": object_id},
        context_instance=RequestContext(request),
    )
Example #5
0
File: views.py Project: OpenCSI/lbe
def manageGroup(request, group_id=None):
    try:
        form = []
        groups = LBEGroup.objects.all()
        group = LBEGroup.objects.get(id=group_id)
        oldObjectTemplate = group.objectTemplate
        oldNameObjectTemplate = group.displayName
        if request.method == "POST":
            POST = request.POST.copy()
            POST['synced_at'] = group.synced_at
            form = LBEGroupForm(POST, instance=group)
            if form.is_valid():
                form.save()
                # Manage it to the Backend
                groupHelper = GroupInstanceHelper(group, LBEGroupInstance(form.instance))
                groupHelper.modifyTemplate(oldObjectTemplate, oldNameObjectTemplate)
                messages.add_message(request, messages.SUCCESS, "Group saved")
            else:
                messages.add_message(request, messages.ERROR, "Error to save the Group.")
        else:
            form = LBEGroupForm(instance=group)
    except BaseException as e:
        print e
        try:
            form = LBEGroupForm(instance=groups[0])
            group_id = groups[0].id
        except BaseException:
            pass
    info_change_object = "By changing the Object Template, all employees's group will be removed."
    return render_to_response('config/group/modify.html',{'groupForm':form,'groups':groups,'group_id':group_id,
                                                          'info_change_object': info_change_object},
                              context_instance=RequestContext(request))
Example #6
0
File: views.py Project: OpenCSI/lbe
def manageGroup(request, group_id):
    try:
        lbeGroup = LBEGroup.objects.get(id=group_id)
        groupInstance = GroupInstanceHelper(lbeGroup)
        if request.method == "POST":
            form = groupInstance.form(request.POST)
            if form.is_valid():
                groupInstance.save()
                messages.add_message(request, messages.SUCCESS, "The Group is successfully saved.")
            else:
                messages.add_message(request, messages.ERROR, "Error to save the group '" + lbeGroup.displayName + "'")
        else:
            form = groupInstance.form()
    except BaseException as e:
        print e
    return render_to_response(
        "directory/default/group/manage.html",
        {
            "form": form,
            "group_id": group_id,
            "attributeName": lbeGroup.objectTemplate.instanceNameAttribute.displayName,
            "attributeMember": groupInstance.attributeName,
        },
        context_instance=RequestContext(request),
    )
Example #7
0
File: views.py Project: OpenCSI/lbe
def searchPattern(request, pattern):
    if request.is_ajax():
        if pattern == "":
            return HttpResponse("Please enter a query.")

        objectsTemplate = LBEObjectTemplate.objects.all()
        resultObjects = []
        groupsTemplate = LBEGroup.objects.all()
        resultGroups = []

        for ot in objectsTemplate:
            objectHelper = LBEObjectInstanceHelper(ot)
            result = objectHelper.searchPattern(pattern)
            if result:
                resultObjects.append(result)

        for gt in groupsTemplate:
            groupHelper = GroupInstanceHelper(gt)
            result = groupHelper.searchPattern(pattern)
            if result:
                resultGroups.append(result)

        return render_to_response(
            "directory/default/search/result.html",
            {"objects": resultObjects, "groups": resultGroups},
            context_instance=RequestContext(request),
        )
Example #8
0
File: views.py Project: OpenCSI/lbe
def viewGroup(request, group_id):
    groupList = []
    groupName = ''
    object_id = 0
    try:
        lbeGroup = LBEGroup.objects.get(id=group_id)
        groupInstance = GroupInstanceHelper(lbeGroup)
        groupValues = groupInstance.get()
        groupName = groupValues.name
        object_id = lbeGroup.objectTemplate.id
        if not groupInstance.attributeName in groupValues.changes[
                'set'] or groupValues.changes['set'][
                    groupInstance.attributeName] == []:
            groupList = groupValues.attributes[groupInstance.attributeName]
        else:
            groupList = groupValues.changes['set'][groupInstance.attributeName]
    except BaseException as e:
        print e
        groupValues = []
    return render_to_response('directory/default/group/view.html', {
        'groupName': groupName,
        'groupList': groupList,
        'group_id': group_id,
        'object_id': object_id
    },
                              context_instance=RequestContext(request))
Example #9
0
File: views.py Project: OpenCSI/lbe
def deleteGroup(request, group_id):
    try:
        group = LBEGroup.objects.get(id=group_id)
        instanceHelper = GroupInstanceHelper(group)
        instanceHelper.remove()
        messages.add_message(request, messages.SUCCESS, "group '" + group.name + "' removed.")
    except BaseException as e:
        print e
        pass
    return HttpResponseRedirect("/directory/group")
Example #10
0
File: views.py Project: OpenCSI/lbe
def deleteGroup(request, group_id):
    try:
        group = LBEGroup.objects.get(id=group_id)
        instanceHelper = GroupInstanceHelper(group)
        instanceHelper.remove()
        messages.add_message(request, messages.SUCCESS,
                             "group '" + group.name + "' removed.")
    except BaseException as e:
        print e
        pass
    return HttpResponseRedirect('/directory/group')
Example #11
0
File: views.py Project: OpenCSI/lbe
def viewAllGroup(request):
    groups = LBEGroup.objects.all()
    groupsInstance = []
    for group in groups:
        groupInstance = GroupInstanceHelper(group)
        try:
            groupsInstance.append(groupInstance.get())
        except BaseException as e:
            print e
            pass
    return render_to_response('directory/default/group/index.html',
                              {'groups': groupsInstance},
                              context_instance=RequestContext(request))
Example #12
0
File: views.py Project: OpenCSI/lbe
def viewAllGroup(request):
    groups = LBEGroup.objects.all()
    groupsInstance = []
    for group in groups:
        groupInstance = GroupInstanceHelper(group)
        try:
            groupsInstance.append(groupInstance.get())
        except BaseException as e:
            print e
            pass
    return render_to_response(
        "directory/default/group/index.html", {"groups": groupsInstance}, context_instance=RequestContext(request)
    )
Example #13
0
File: views.py Project: OpenCSI/lbe
def addGroup(request):
    if request.method == "POST":
        POST = request.POST.copy()
        POST['synced_at'] = django.utils.timezone.now()
        form = LBEGroupForm(POST)
        if form.is_valid():
            # Create it to the Backend
            groupHelper = GroupInstanceHelper(form.instance, LBEGroupInstance(form.instance))
            groupHelper.createTemplate()
            # Save it to LBE
            form.save()
            messages.add_message(request,messages.SUCCESS, "Group saved")
        else:
            messages.add_message(request,messages.ERROR, "Error to save the Group.")
    else:
        form = LBEGroupForm()
    return render_to_response('config/group/create.html', {'groupForm': form},
                              context_instance=RequestContext(request))
Example #14
0
File: views.py Project: OpenCSI/lbe
def addGroup(request):
    if request.method == "POST":
        POST = request.POST.copy()
        POST['synced_at'] = django.utils.timezone.now()
        form = LBEGroupForm(POST)
        if form.is_valid():
            # Create it to the Backend
            groupHelper = GroupInstanceHelper(form.instance,
                                              LBEGroupInstance(form.instance))
            groupHelper.createTemplate()
            # Save it to LBE
            form.save()
            messages.add_message(request, messages.SUCCESS, "Group saved")
        else:
            messages.add_message(request, messages.ERROR,
                                 "Error to save the Group.")
    else:
        form = LBEGroupForm()
    return render_to_response('config/group/create.html', {'groupForm': form},
                              context_instance=RequestContext(request))
Example #15
0
 def _notExistObjectLBE(self):
     print '  Checking for Objects which do not exist into LBE but in LDAP Server:'
     for objectTemplate in LBEObjectTemplate.objects.all():
         print "  - \033[35m" + objectTemplate.name + '\033[0m...'
         objHelper = LBEObjectInstanceHelper(objectTemplate)
         try:
             scope = objHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         objTarget = self.target.searchObjects(objectTemplate, scope)
         objBackend = self.backend.searchObjects(objectTemplate)
         number = 0
         for ot in objTarget:
             exist = False
             for ob in objBackend:
                 if ot.name == ob.name:
                     exist = True
                     break
             if not exist:
                 number += 1
                 print "    " + ot.name
         if number == 0:
             print '    \033[91m<None>\033[0m'
     print ""
     print '  Checking for Groups which do not exist into LBE but in LDAP Server:'
     number = 0
     for groupTemplate in LBEGroup.objects.all():
         grpHelper = GroupInstanceHelper(groupTemplate)
         try:
             scope = grpHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         grpTarget = self.target.searchObjects(
             groupTemplate, scope, '(cn=' + groupTemplate.displayName + ')')
         grpBackend = self.backend.searchObjectsByPattern(
             groupTemplate, groupTemplate.displayName)
         if not grpBackend:
             print "   - \033[36m" + groupTemplate.displayName + "\033[0m does not exists."
             number += 1
     if number == 0:
         print '    \033[91m<None>\033[0m'
Example #16
0
File: views.py Project: OpenCSI/lbe
def deleteObjectInstance(request, lbeObject_id, objectName):
    backend = BackendHelper()
    lbeObject = LBEObjectTemplate.objects.get(id=lbeObject_id)
    # change status code user:
    instanceHelper = LBEObjectInstanceHelper(lbeObject)

    # Remove the object from groups if exists:
    for group in LBEGroup.objects.all():
        groupHelper = GroupInstanceHelper(group)
        try:
            groupHelper.removeObjectInstance(lbeObject, objectName)
        except KeyError:
            pass  # same values

    # Set to Delete for object Instance
    instanceHelper.remove(objectName)
    # Current page from the object deleted:
    position = backend.positionObject(lbeObject.name, objectName)
    lengthMax = 10
    page = int(math.ceil(position / float(lengthMax)))
    return HttpResponseRedirect('/directory/' + lbeObject_id + "/1")
Example #17
0
File: views.py Project: OpenCSI/lbe
def deleteObjectInstance(request, lbeObject_id, objectName):
    backend = BackendHelper()
    lbeObject = LBEObjectTemplate.objects.get(id=lbeObject_id)
    # change status code user:
    instanceHelper = LBEObjectInstanceHelper(lbeObject)

    # Remove the object from groups if exists:
    for group in LBEGroup.objects.all():
        groupHelper = GroupInstanceHelper(group)
        try:
            groupHelper.removeObjectInstance(lbeObject, objectName)
        except KeyError:
            pass  # same values

    # Set to Delete for object Instance
    instanceHelper.remove(objectName)
    # Current page from the object deleted:
    position = backend.positionObject(lbeObject.name, objectName)
    lengthMax = 10
    page = int(math.ceil(position / float(lengthMax)))
    return HttpResponseRedirect("/directory/" + lbeObject_id + "/1")
Example #18
0
File: views.py Project: OpenCSI/lbe
def manageGroup(request, group_id):
    try:
        lbeGroup = LBEGroup.objects.get(id=group_id)
        groupInstance = GroupInstanceHelper(lbeGroup)
        if request.method == "POST":
            form = groupInstance.form(request.POST)
            if form.is_valid():
                groupInstance.save()
                messages.add_message(request, messages.SUCCESS,
                                     "The Group is successfully saved.")
            else:
                messages.add_message(
                    request, messages.ERROR,
                    "Error to save the group '" + lbeGroup.displayName + "'")
        else:
            form = groupInstance.form()
    except BaseException as e:
        print e
    return render_to_response(
        'directory/default/group/manage.html', {
            'form': form,
            'group_id': group_id,
            'attributeName':
            lbeGroup.objectTemplate.instanceNameAttribute.displayName,
            'attributeMember': groupInstance.attributeName
        },
        context_instance=RequestContext(request))
Example #19
0
File: debug.py Project: OpenCSI/lbe
 def _notExistObjectLBE(self):
     print '  Checking for Objects which do not exist into LBE but in LDAP Server:'
     for objectTemplate in LBEObjectTemplate.objects.all():
         print "  - \033[35m" + objectTemplate.name + '\033[0m...'
         objHelper = LBEObjectInstanceHelper(objectTemplate)
         try:
             scope = objHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         objTarget = self.target.searchObjects(objectTemplate, scope)
         objBackend = self.backend.searchObjects(objectTemplate)
         number = 0
         for ot in objTarget:
             exist = False
             for ob in objBackend:
                 if ot.name == ob.name:
                     exist = True
                     break
             if not exist:
                 number += 1
                 print "    " + ot.name
         if number == 0:
             print '    \033[91m<None>\033[0m'
     print ""
     print '  Checking for Groups which do not exist into LBE but in LDAP Server:'
     number = 0
     for groupTemplate in LBEGroup.objects.all():
         grpHelper = GroupInstanceHelper(groupTemplate)
         try:
             scope = grpHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         grpTarget = self.target.searchObjects(groupTemplate, scope, '(cn=' + groupTemplate.displayName + ')')
         grpBackend = self.backend.searchObjectsByPattern(groupTemplate, groupTemplate.displayName)
         if not grpBackend:
             print "   - \033[36m" + groupTemplate.displayName + "\033[0m does not exists."
             number += 1
     if number == 0:
         print '    \033[91m<None>\033[0m'
Example #20
0
File: views.py Project: OpenCSI/lbe
def manageGroup(request, group_id=None):
    try:
        form = []
        groups = LBEGroup.objects.all()
        group = LBEGroup.objects.get(id=group_id)
        oldObjectTemplate = group.objectTemplate
        oldNameObjectTemplate = group.displayName
        if request.method == "POST":
            POST = request.POST.copy()
            POST['synced_at'] = group.synced_at
            form = LBEGroupForm(POST, instance=group)
            if form.is_valid():
                form.save()
                # Manage it to the Backend
                groupHelper = GroupInstanceHelper(
                    group, LBEGroupInstance(form.instance))
                groupHelper.modifyTemplate(oldObjectTemplate,
                                           oldNameObjectTemplate)
                messages.add_message(request, messages.SUCCESS, "Group saved")
            else:
                messages.add_message(request, messages.ERROR,
                                     "Error to save the Group.")
        else:
            form = LBEGroupForm(instance=group)
    except BaseException as e:
        print e
        try:
            form = LBEGroupForm(instance=groups[0])
            group_id = groups[0].id
        except BaseException:
            pass
    info_change_object = "By changing the Object Template, all employees's group will be removed."
    return render_to_response('config/group/modify.html', {
        'groupForm': form,
        'groups': groups,
        'group_id': group_id,
        'info_change_object': info_change_object
    },
                              context_instance=RequestContext(request))
Example #21
0
File: views.py Project: OpenCSI/lbe
def modifyObject(request, obj_id=None, instance_id=None):
    objectForm = None
    lbeObjectTemplate = LBEObjectTemplate.objects.get(id=obj_id)
    if request.method == 'POST':
        # we can't modify the Synced_at value
        POST = request.POST.copy()
        POST['synced_at'] = lbeObjectTemplate.synced_at
        # POST modification
        objectForm = LBEObjectTemplateForm(POST, instance=lbeObjectTemplate)
        oldNAttribute = lbeObjectTemplate.instanceNameAttribute.name
        oldDNAttribute = lbeObjectTemplate.instanceDisplayNameAttribute.id
        if objectForm.is_valid():
            # change the _id value if changed:
            if not oldNAttribute == request.POST['instanceNameAttribute']:
                changeID = True
            else:
                changeID = False
                # change the displayName value if changed:
            if not oldDNAttribute == int(request.POST['instanceDisplayNameAttribute']):
                DN = True
            else:
                DN = False
            if changeID or DN:
                if changeID is True:
                    objectForm.instance.instanceNameBeforeAttribute = LBEAttribute.objects.get(
                        name__iexact=oldNAttribute)
                    objectForm.instance.needReconciliationRDN = True
                backend = BackendHelper()
                ob = backend.searchObjects(lbeObjectTemplate)
                try:
                    for o in ob:
                        if changeID:
                            # change the _id value
                            backend.update_id(lbeObjectTemplate, o,
                                              o.attributes[request.POST['instanceNameAttribute']][0])
                            # the RDN Attribute from Target Server is replace into the Reconciliation
                        if DN:
                            attribute = LBEAttribute.objects.get(id=request.POST['instanceDisplayNameAttribute'])
                            backend.modifyDisplayName(lbeObjectTemplate, o.name, o.attributes[attribute.name][0])
                    # Groups
                    if changeID:
                        groups = LBEGroup.objects.filter(objectTemplate=lbeObjectTemplate)
                        for group in groups:
                            InstanceHelper = GroupInstanceHelper(group)
                            InstanceHelper.changeIDObjects()
                except KeyError:
                    messages.add_message(request, messages.ERROR, 'Error while saving object, "' + request.POST[
                        'instanceNameAttribute'] + '" does not exist for the Object.')
                    return redirect('/config/object/modify/' + obj_id)
            objectForm.save()
            messages.add_message(request, messages.SUCCESS, 'Object saved')
            return redirect('/config/object/modify/' + obj_id)
        else:
            messages.add_message(request, messages.ERROR, 'Error while saving object.')
    else:
        if obj_id is None:
            messages.add_message(request, messages.INFO, 'Object id is missing.')
            return render_to_response('config/object/list.html', {'objects': LBEObjectTemplate.objects.all()})
        else:
            objectForm = LBEObjectTemplateForm(instance=lbeObjectTemplate)
    attForm = LBEAttributeInstanceForm()
    instances = LBEAttributeInstance.objects.filter(lbeObjectTemplate=lbeObjectTemplate).order_by('position')
    # which attribute have ajax request:
    ajaxAttribute = 'instanceNameAttribute'
    defaultValue = lbeObjectTemplate.instanceNameAttribute.name
    # Ajax function to call (js):
    ajaxFunction = 'selectFrom(\'' + reverse('config.views.showAttributeAJAX')[:-1] + '\',\'' + ajaxAttribute + '\');'
    info_missing_policy = "Variable used for setting if the Object is deleted into the Target or <br> if we need to add "
    info_missing_policy += " to the Backend"
    info_different_policy = "Variable enables to set which Server, we need to upgrade values:<br> If the value is TARGET"
    info_different_policy += ", then the Backend object will replace the Target object <br>else, the opposite."
    if lbeObjectTemplate.instanceNameBeforeAttribute is not None:
        attributeBefore = lbeObjectTemplate.instanceNameBeforeAttribute.name
    else:
        attributeBefore = lbeObjectTemplate.instanceNameAttribute.name
    return render_to_response('config/object/modify.html',
                              {'attributeInstances': instances, 'lbeObject': lbeObjectTemplate,
                               'objectForm': objectForm, 'attributeForm': attForm, 'ajaxAttribute': ajaxAttribute,
                               'ajaxFunction': ajaxFunction, 'defaultValue': defaultValue,
                               'info_missing_policy': info_missing_policy,
                               'info_different_policy': info_different_policy,
                               'attributeInstanceBefore': attributeBefore},
                              context_instance=RequestContext(request))
Example #22
0
    def searchObjects(self,
                      lbeObjectTemplate,
                      SCOPE,
                      filter=None,
                      start=0,
                      page=0):
        result_set = []
        # Call methods from object's script to get basedn and objectClass
        objectHelper = LBEObjectInstanceHelper(lbeObjectTemplate)
        if filter is None:
            filter = '(&'
            for oc in objectHelper.callScriptClassMethod('object_classes'):
                filter += '(objectClass=' + oc + ')'
            filter += ')'  #(modifyTimestamp>'+str(calendar.timegm(lbeObjectTemplate.synced_at.utctimetuple()))+'Z))'

        # Search in object's basedn
        if SCOPE != 0 and SCOPE != 1 and SCOPE != 2:
            SCOPE = 0  # BASE

        for dn, entry in self.handler.search(
                objectHelper.callScriptClassMethod('base_dn'), filter, SCOPE,
            ['*', '+']):
            # Create an empty instance
            objectInstance = LBEObjectInstance(
                lbeObjectTemplate,
                name=entry[lbeObjectTemplate.instanceNameAttribute.name][0])
            # Add attributes defined in the template. Other ones are ignored
            try:  # Object
                for attributeInstance in lbeObjectTemplate.lbeattributeinstance_set.all(
                ):
                    try:
                        objectInstance.attributes[
                            attributeInstance.lbeAttribute.name] = entry[
                                attributeInstance.lbeAttribute.name]
                    except KeyError, e:
                        logger.warning('The attribute ' +
                                       attributeInstance.lbeAttribute.name +
                                       ' does not exist in LDAP object: ' + dn)
                    # Set displayName and few others attributes
                objectInstance.displayName = entry[
                    lbeObjectTemplate.instanceDisplayNameAttribute.name][0]
                objectInstance.status = OBJECT_STATE_IMPORTED
                objectInstance.created_at = datetime.datetime.strptime(
                    entry['createTimestamp'][0], '%Y%m%d%H%M%SZ')
                try:
                    objectInstance.updated_at = datetime.datetime.strptime(
                        entry['modifyTimestamp'][0], '%Y%m%d%H%M%SZ')
                except KeyError:
                    objectInstance.updated_at = datetime.datetime.strptime(
                        entry['createTimestamp'][0], '%Y%m%d%H%M%SZ')
                result_set.append(objectInstance)
            except AttributeError:  # Group:
                groupInstance = GroupInstanceHelper(lbeObjectTemplate)
                objectInstance.displayName = entry['cn'][0]
                objectInstance.attributes[u'cn'] = entry['cn']
                if groupInstance.attributeName in entry:
                    objectInstance.attributes[
                        groupInstance.attributeName] = entry[
                            groupInstance.attributeName]
                else:
                    objectInstance.attributes[groupInstance.attributeName] = []
                objectInstance.status = OBJECT_STATE_IMPORTED
                objectInstance.created_at = datetime.datetime.strptime(
                    entry['createTimestamp'][0], '%Y%m%d%H%M%SZ')
                try:
                    objectInstance.updated_at = datetime.datetime.strptime(
                        entry['modifyTimestamp'][0], '%Y%m%d%H%M%SZ')
                except KeyError:
                    objectInstance.updated_at = datetime.datetime.strptime(
                        entry['createTimestamp'][0], '%Y%m%d%H%M%SZ')
                result_set.append(objectInstance)
Example #23
0
File: views.py Project: OpenCSI/lbe
def index(request):
    objects = LBEObjectTemplate.objects.all()
    groups = LBEGroup.objects.all()
    backend = BackendHelper()
    # Objects
    statObjects = []
    for object in objects:
        lbeObjects = backend.searchObjects(object)
        ok = 0
        approval = 0
        needSync = 0
        delete = 0
        reconciliation = False
        for lbeobject in lbeObjects:
            if lbeobject.status == 0:
                ok += 1
            elif lbeobject.status == 1:
                needSync += 1
            elif lbeobject.status == 2:
                approval += 1
            elif lbeobject.status == 3:
                reconciliation = True
            elif lbeobject.status == 4:
                delete += 1
        statObjects.append({
            'name': object.displayName,
            'total': len(lbeObjects),
            'ok': ok,
            'approval': approval,
            'sync': needSync,
            'reconciliation': reconciliation,
            'delete': delete
        })
    # Groups
    statGroups = []
    try:
        for group in groups:
            groupHelper = GroupInstanceHelper(group)
            groupHelper.get()
            if groupHelper.attributeName in groupHelper.instance.changes['set'] and not \
            groupHelper.instance.changes['set'][groupHelper.attributeName] == []:
                total = len(groupHelper.instance.changes['set'][
                    groupHelper.attributeName])
            else:
                total = len(
                    groupHelper.instance.attributes[groupHelper.attributeName])
        status = groupHelper.instance.status
    except BaseException as e:
        total = 0
        status = -1
    statGroups.append({
        'name': group.displayName,
        'total': total,
        'object': groupHelper.template.objectTemplate.displayName,
        'status': status
    })
    return render_to_response('directory/default/index.html', {
        'objects': statObjects,
        'groups': statGroups
    },
                              context_instance=RequestContext(request))
Example #24
0
 def update(self, lbeObjectTemplate, lbeObjectInstance, SCOPE):
     objectHelper = LBEObjectInstanceHelper(lbeObjectTemplate)
     if not isinstance(lbeObjectTemplate, LBEGroup):
         ignore_attributes = objectHelper.callScriptClassMethod(
             "ignore_attributes")
     else:
         ignore_attributes = []
     # RDN Attribute:
     rdnAttributeName = lbeObjectTemplate.instanceNameAttribute.name
     dn = rdnAttributeName + '=' + lbeObjectInstance.attributes[
         rdnAttributeName][0] + ',' + objectHelper.callScriptClassMethod(
             'base_dn')
     LDAPValues = self.searchObjects(
         lbeObjectTemplate, SCOPE, rdnAttributeName + '=' +
         lbeObjectInstance.attributes[rdnAttributeName][0])[0].attributes
     # Need to check if the RDN changed:
     if not lbeObjectInstance.attributes[rdnAttributeName][
             0] == lbeObjectInstance.changes['set'][rdnAttributeName][
                 0] and not lbeObjectInstance.changes['set'][
                     rdnAttributeName][0] == '':
         newDN = rdnAttributeName + '=' + lbeObjectInstance.changes['set'][
             rdnAttributeName][0]
         self.handler.changeRDN(dn, newDN.encode("utf-8"))
         dn = newDN + ',' + objectHelper.callScriptClassMethod('base_dn')
     # Update:
     for key, value in lbeObjectInstance.changes['set'].items():
         if key in ignore_attributes:
             continue
         noKey = not LDAPValues.has_key(
             key)  # key exists into the object target?
         if isinstance(lbeObjectTemplate, LBEGroup) and value == []:
             objectHelper = GroupInstanceHelper(lbeObjectTemplate,
                                                lbeObjectInstance)
             modList = [
                 (ldap.MOD_DELETE, key.encode("utf-8"),
                  LDAPValues[objectHelper.attributeName][0].encode("utf-8"))
             ]
             try:
                 self.handler.update(dn, modList)
             except BaseException:
                 pass  # do not care if object does not exist
         elif noKey or not value == LDAPValues[key] and not value[0] == '':
             # 1 value: Replace
             if len(value) == 1:
                 if noKey:
                     # ADD:
                     modList = [(ldap.MOD_ADD, key.encode("utf-8"),
                                 value[0].encode("utf-8"))]
                 else:
                     # REPLACE:
                     modList = [(ldap.MOD_REPLACE, key.encode("utf-8"),
                                 value[0].encode("utf-8"))]
                 self.handler.update(dn, modList)
             else:  # MultiValue:
                 if noKey:
                     # ADD:
                     for val in value:
                         modList = [(ldap.MOD_ADD, key.encode("utf-8"),
                                     val.encode("utf-8"))]
                         self.handler.update(dn, modList)
                 else:
                     # REMOVE:
                     for val in LDAPValues[key]:
                         modList = [(ldap.MOD_DELETE, key.encode("utf-8"),
                                     val.encode("utf-8"))]
                         self.handler.update(dn, modList)
                     # ADD:
                     for val in value:
                         modList = [(ldap.MOD_ADD, key.encode("utf-8"),
                                     val.encode("utf-8"))]
                         self.handler.update(dn, modList)
Example #25
0
 def start(self):
     print "   Upgrade the Target server with the Backend server..."
     for objectTemplate in LBEObjectTemplate.objects.all():
         # need to check if we need to change (before making reconciliation) the RDN attribute
         self._changeRDN(objectTemplate)
         # And the objects class
         self._changeClass(objectTemplate)
         # We're looking for all objects with state = OBJECT_STATE_AWAITING_SYNC
         for objectInstance in self.backend.searchObjectsToUpdate(objectTemplate):
             # First of all, applies all changes stored in backend [ such Virtual attributes ]
             # & create the parent DN if not exist:
             obj = LBEObjectInstanceHelper(objectTemplate, objectInstance)
             try:
                 scope = obj.callScriptClassMethod("search_scope")
             except BaseException:
                 scope = 0
             self._createParent(objectTemplate, obj)
             # obj.compute(objectInstance)
             # then, upgrade:
             if objectInstance.changes["type"] == OBJECT_CHANGE_CREATE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..."
                     self._createObject(objectTemplate, objectInstance)
                 # TODO: We should have a target exception rather ldap
                 except ldap.ALREADY_EXISTS:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m already exists"
                     changes = {}
                     changes["status"] = OBJECT_STATE_SYNCED
                     changes["changes"] = {}
                     changes["changes"]["set"] = {}
                     changes["changes"]["type"] = -1
                     changes["synced_at"] = django.utils.timezone.now()
                     self.backend.updateObject(objectTemplate, objectInstance, changes)
                     pass
             elif objectInstance.changes["type"] == OBJECT_CHANGE_DELETE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "' is \033[33mdeleting\033[0m..."
                     self._deleteObject(objectTemplate, objectInstance)
                 except BaseException as e:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m does not exist."
                     changes = {}
                     changes["status"] = OBJECT_STATE_DELETED
                     changes["changes"] = {}
                     changes["changes"]["set"] = {}
                     changes["changes"]["type"] = -1
                     changes["synced_at"] = django.utils.timezone.now()
                     self.backend.updateObject(objectTemplate, objectInstance, changes)
                     pass
             elif objectInstance.changes["type"] == OBJECT_CHANGE_UPDATE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..."
                     # Group
                     for group in LBEGroup.objects.all():
                         if group.objectTemplate.id == objectTemplate.id:
                             GroupInstanceHelper(group).updateMember(obj.getObject(obj.instance.name))
                     self._modifyObject(objectTemplate, objectInstance, scope)
                 except BaseException as e:
                     print e
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..."
                     # Create object if not exists:
                     # Firstly, compute attributes values:
                     # Then, create it:
                     try:
                         self._createObject(objectTemplate, objectInstance)
                     except Exception as e:
                         print e
                         pass
                     pass
                     # Synced object:
                     objectTemplate.synced_at = django.utils.timezone.now()
                     objectTemplate.save()
     print ""
     print "   Upgrade Groups Objects:"
     for groupTemplate in LBEGroup.objects.all():
         for groupInstance in self.backend.searchObjectsToUpdate(groupTemplate):
             grp = GroupInstanceHelper(groupTemplate, groupInstance)
             try:
                 scope = grp.callScriptClassMethod("search_scope")
             except BaseException:
                 scope = 0
             self._createParent(groupTemplate, grp)
             if groupInstance.changes["type"] == OBJECT_CHANGE_CREATE_OBJECT:
                 print "    |-> Group '\033[35m" + groupInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..."
                 try:
                     groupInstance.changes["set"][grp.attributeName] = self._getRDN(
                         groupTemplate.objectTemplate, groupInstance.changes["set"][grp.attributeName]
                     )
                     self._createObject(groupTemplate, groupInstance)
                     ###############################################
                     if not groupInstance.changes["set"] == {}:
                         groupInstance.changes["set"][grp.attributeName] = self._getID(
                             groupInstance.changes["set"][grp.attributeName]
                         )
                         groupInstance.attributes["cn"] = groupInstance.changes["set"]["cn"]
                         self.backend.updateObject(
                             groupTemplate,
                             groupInstance,
                             {"changes": {"set": {"cn": [groupInstance.displayName]}, "type": -1}},
                         )
                     ###############################################
                 except ldap.ALREADY_EXISTS:
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m already exists"
             elif groupInstance.changes["type"] == OBJECT_CHANGE_UPDATE_OBJECT:
                 try:
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..."
                     groupInstance.changes["set"][grp.attributeName] = self._getRDN(
                         groupTemplate.objectTemplate, groupInstance.changes["set"][grp.attributeName]
                     )
                     self._modifyObject(groupTemplate, groupInstance, scope)
                     ###############################################
                     groupInstance.changes["set"][grp.attributeName] = self._getID(
                         groupInstance.changes["set"][grp.attributeName]
                     )
                     groupInstance.attributes["cn"] = groupInstance.changes["set"]["cn"]
                     self.backend.updateObject(
                         groupTemplate,
                         groupInstance,
                         {"changes": {"set": {"cn": [groupInstance.displayName]}, "type": -1}},
                     )
                     ###############################################
                 except BaseException as e:
                     print e
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..."
                     groupInstance.changes["set"][grp.attributeName] = self._getRDN(
                         groupTemplate.objectTemplate, groupInstance.changes["set"][grp.attributeName]
                     )
                     self._createObject(groupTemplate, groupInstance)
                     ###############################################
                     groupInstance.changes["set"][grp.attributeName] = self._getID(
                         groupInstance.changes["set"][grp.attributeName]
                     )
                     groupInstance.attributes["cn"] = groupInstance.changes["set"]["cn"]
                     self.backend.updateObject(
                         groupTemplate,
                         groupInstance,
                         {"changes": {"set": {"cn": [groupInstance.displayName]}, "type": -1}},
                     )
                     ###############################################
             elif groupInstance.changes["type"] == OBJECT_CHANGE_DELETE_OBJECT:
                 print "    |-> Group '\033[35m" + groupInstance.displayName + "' is \033[33mdeleting\033[0m..."
                 self._deleteObject(groupTemplate, groupInstance)
     print "   End."
Example #26
0
 def save(self):
     print 'Checking for Objects which do not exist into LBE Backend but in LDAP Server:'
     for objectTemplate in LBEObjectTemplate.objects.all():
         objectHelper = LBEObjectInstanceHelper(objectTemplate)
         try:
             scope = objectHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         filter = '(&'
         for oc in objectHelper.callScriptClassMethod('object_classes'):
             filter += '(objectClass=' + oc + ')'
         filter += ')'
         print '\033[91m' + objectTemplate.name + '\033[0m: (\033[95m' + objectHelper.callScriptClassMethod("base_dn") + '\033[0m) using \033[95m' + filter + '\033[0m'
         objTarget = self.target.searchObjects(objectTemplate, scope)
         objBackend = self.backend.searchObjects(objectTemplate)
         number = 0
         for ot in objTarget:
             exist = False
             for ob in objBackend:
                 if ot.name == ob.name:
                     exist = True
                     break
             if not exist:
                 number += 1
                 print '=> Adding \033[95m' + ot.name + '\033[0m object into LBE Backend... '
                 print " values: " + str(ot.attributes)
                 try:
                     self.backend.createObject(objectTemplate, ot, True)
                     print "\033[92mDone.\033[0m\n"
                 except BaseException as e:
                     print "\033[91mFail.\033[0m"
                     print "''''''''"
                     print e
                     print "''''''''"
         if number == 0:
             print '<None>'
         # Synced object:
         objectTemplate.synced_at = django.utils.timezone.now()
         objectTemplate.save()
     print '.........................'
     print 'Checking for Groups which do not exist into LBE Backend but in Target:'
     for groupTemplate in LBEGroup.objects.all():
         groupInstance = GroupInstanceHelper(groupTemplate)
         try:
             scope = groupInstance.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         grpTarget = self.target.searchObjects(groupTemplate, scope)
         grpBackend = self.backend.searchObjects(groupTemplate)
         for gt in grpTarget:
             exist = False
             for gb in grpBackend:
                 if gt.name == gb.name:
                     exist = True
                     break
             if not exist:
                 # import only existing group into LBE config
                 try:
                     LBEGroup.objects.get(displayName__iexact=gt.displayName)
                 except BaseException:
                     continue
                 print '=> Adding \033[95m' + gt.name + '\033[0m group into LBE Backend... '
                 print " values: " + str(gt.attributes)
                 try:
                     if groupInstance.attributeName in gt.attributes:
                         gt.attributes[groupInstance.attributeName] = self._getID(gt.attributes[groupInstance.attributeName])
                     groupHelper = GroupInstanceHelper(groupTemplate, gt)
                     groupHelper.createTemplate(True)
                         #print " >\033[91mThis group does not exists in LBE Configuration Group.\033[0m"
                         #print " >\033[91mIn order to see, manage it, please create it using some extra attribute:"
                         #print "  >\033[91m'Display Name': \033[95m" + gt.name + "\033[0m"
                         #print " >\033[91mInto the Script file:"
                         #print "  >'DN Attribute': \033[95m" + groupHelper.callScriptClassMethod("base_dn") + "\033[91m"
                         #print "  >'Attribute Name' & 'Object Classes': as you wish.\033[0m"
                     print "\033[92mDone.\033[0m\n"
                 except BaseException as e:
                     print "\033[91mFail.\033[0m\n"
                     print "''''''''"
                     print e
                     print "''''''''"
         # Synced group:
         groupTemplate.synced_at = django.utils.timezone.now()
         groupTemplate.save()
     print "End."
Example #27
0
 def start(self):
     print "   Upgrade the Target server with the Backend server..."
     for objectTemplate in LBEObjectTemplate.objects.all():
         # need to check if we need to change (before making reconciliation) the RDN attribute
         self._changeRDN(objectTemplate)
         # And the objects class
         self._changeClass(objectTemplate)
         # We're looking for all objects with state = OBJECT_STATE_AWAITING_SYNC
         for objectInstance in self.backend.searchObjectsToUpdate(
                 objectTemplate):
             # First of all, applies all changes stored in backend [ such Virtual attributes ]
             # & create the parent DN if not exist:
             obj = LBEObjectInstanceHelper(objectTemplate, objectInstance)
             try:
                 scope = obj.callScriptClassMethod("search_scope")
             except BaseException:
                 scope = 0
             self._createParent(objectTemplate, obj)
             #obj.compute(objectInstance)
             # then, upgrade:
             if objectInstance.changes[
                     'type'] == OBJECT_CHANGE_CREATE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..."
                     self._createObject(objectTemplate, objectInstance)
                 # TODO: We should have a target exception rather ldap
                 except ldap.ALREADY_EXISTS:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m already exists"
                     changes = {}
                     changes['status'] = OBJECT_STATE_SYNCED
                     changes['changes'] = {}
                     changes['changes']['set'] = {}
                     changes['changes']['type'] = -1
                     changes['synced_at'] = django.utils.timezone.now()
                     self.backend.updateObject(objectTemplate,
                                               objectInstance, changes)
                     pass
             elif objectInstance.changes[
                     'type'] == OBJECT_CHANGE_DELETE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "' is \033[33mdeleting\033[0m..."
                     self._deleteObject(objectTemplate, objectInstance)
                 except BaseException as e:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m does not exist."
                     changes = {}
                     changes['status'] = OBJECT_STATE_DELETED
                     changes['changes'] = {}
                     changes['changes']['set'] = {}
                     changes['changes']['type'] = -1
                     changes['synced_at'] = django.utils.timezone.now()
                     self.backend.updateObject(objectTemplate,
                                               objectInstance, changes)
                     pass
             elif objectInstance.changes[
                     'type'] == OBJECT_CHANGE_UPDATE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..."
                     # Group
                     for group in LBEGroup.objects.all():
                         if group.objectTemplate.id == objectTemplate.id:
                             GroupInstanceHelper(group).updateMember(
                                 obj.getObject(obj.instance.name))
                     self._modifyObject(objectTemplate, objectInstance,
                                        scope)
                 except BaseException as e:
                     print e
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..."
                     # Create object if not exists:
                     # Firstly, compute attributes values:
                     # Then, create it:
                     try:
                         self._createObject(objectTemplate, objectInstance)
                     except Exception as e:
                         print e
                         pass
                     pass
                     # Synced object:
                     objectTemplate.synced_at = django.utils.timezone.now()
                     objectTemplate.save()
     print ''
     print "   Upgrade Groups Objects:"
     for groupTemplate in LBEGroup.objects.all():
         for groupInstance in self.backend.searchObjectsToUpdate(
                 groupTemplate):
             grp = GroupInstanceHelper(groupTemplate, groupInstance)
             try:
                 scope = grp.callScriptClassMethod("search_scope")
             except BaseException:
                 scope = 0
             self._createParent(groupTemplate, grp)
             if groupInstance.changes[
                     'type'] == OBJECT_CHANGE_CREATE_OBJECT:
                 print "    |-> Group '\033[35m" + groupInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..."
                 try:
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getRDN(
                             groupTemplate.objectTemplate,
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     self._createObject(groupTemplate, groupInstance)
                     ###############################################
                     if not groupInstance.changes['set'] == {}:
                         groupInstance.changes['set'][
                             grp.attributeName] = self._getID(
                                 groupInstance.changes['set'][
                                     grp.attributeName])
                         groupInstance.attributes[
                             'cn'] = groupInstance.changes['set']['cn']
                         self.backend.updateObject(
                             groupTemplate, groupInstance, {
                                 'changes': {
                                     'set': {
                                         'cn': [groupInstance.displayName]
                                     },
                                     'type': -1
                                 }
                             })
                     ###############################################
                 except ldap.ALREADY_EXISTS:
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m already exists"
             elif groupInstance.changes[
                     'type'] == OBJECT_CHANGE_UPDATE_OBJECT:
                 try:
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..."
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getRDN(
                             groupTemplate.objectTemplate,
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     self._modifyObject(groupTemplate, groupInstance, scope)
                     ###############################################
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getID(
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     groupInstance.attributes['cn'] = groupInstance.changes[
                         'set']['cn']
                     self.backend.updateObject(
                         groupTemplate, groupInstance, {
                             'changes': {
                                 'set': {
                                     'cn': [groupInstance.displayName]
                                 },
                                 'type': -1
                             }
                         })
                     ###############################################
                 except BaseException as e:
                     print e
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..."
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getRDN(
                             groupTemplate.objectTemplate,
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     self._createObject(groupTemplate, groupInstance)
                     ###############################################
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getID(
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     groupInstance.attributes['cn'] = groupInstance.changes[
                         'set']['cn']
                     self.backend.updateObject(
                         groupTemplate, groupInstance, {
                             'changes': {
                                 'set': {
                                     'cn': [groupInstance.displayName]
                                 },
                                 'type': -1
                             }
                         })
                     ###############################################
             elif groupInstance.changes[
                     'type'] == OBJECT_CHANGE_DELETE_OBJECT:
                 print "    |-> Group '\033[35m" + groupInstance.displayName + "' is \033[33mdeleting\033[0m..."
                 self._deleteObject(groupTemplate, groupInstance)
     print "   End."
Example #28
0
File: views.py Project: OpenCSI/lbe
def index(request):
    objects = LBEObjectTemplate.objects.all()
    groups = LBEGroup.objects.all()
    backend = BackendHelper()
    # Objects
    statObjects = []
    for object in objects:
        lbeObjects = backend.searchObjects(object)
        ok = 0
        approval = 0
        needSync = 0
        delete = 0
        reconciliation = False
        for lbeobject in lbeObjects:
            if lbeobject.status == 0:
                ok += 1
            elif lbeobject.status == 1:
                needSync += 1
            elif lbeobject.status == 2:
                approval += 1
            elif lbeobject.status == 3:
                reconciliation = True
            elif lbeobject.status == 4:
                delete += 1
        statObjects.append(
            {
                "name": object.displayName,
                "total": len(lbeObjects),
                "ok": ok,
                "approval": approval,
                "sync": needSync,
                "reconciliation": reconciliation,
                "delete": delete,
            }
        )
    # Groups
    statGroups = []
    try:
        for group in groups:
            groupHelper = GroupInstanceHelper(group)
            groupHelper.get()
            if (
                groupHelper.attributeName in groupHelper.instance.changes["set"]
                and not groupHelper.instance.changes["set"][groupHelper.attributeName] == []
            ):
                total = len(groupHelper.instance.changes["set"][groupHelper.attributeName])
            else:
                total = len(groupHelper.instance.attributes[groupHelper.attributeName])
        status = groupHelper.instance.status
    except BaseException as e:
        total = 0
        status = -1
    statGroups.append(
        {
            "name": group.displayName,
            "total": total,
            "object": groupHelper.template.objectTemplate.displayName,
            "status": status,
        }
    )
    return render_to_response(
        "directory/default/index.html",
        {"objects": statObjects, "groups": statGroups},
        context_instance=RequestContext(request),
    )
Example #29
0
 def save(self):
     print 'Checking for Objects which do not exist into LBE Backend but in LDAP Server:'
     for objectTemplate in LBEObjectTemplate.objects.all():
         objectHelper = LBEObjectInstanceHelper(objectTemplate)
         try:
             scope = objectHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         filter = '(&'
         for oc in objectHelper.callScriptClassMethod('object_classes'):
             filter += '(objectClass=' + oc + ')'
         filter += ')'
         print '\033[91m' + objectTemplate.name + '\033[0m: (\033[95m' + objectHelper.callScriptClassMethod(
             "base_dn") + '\033[0m) using \033[95m' + filter + '\033[0m'
         objTarget = self.target.searchObjects(objectTemplate, scope)
         objBackend = self.backend.searchObjects(objectTemplate)
         number = 0
         for ot in objTarget:
             exist = False
             for ob in objBackend:
                 if ot.name == ob.name:
                     exist = True
                     break
             if not exist:
                 number += 1
                 print '=> Adding \033[95m' + ot.name + '\033[0m object into LBE Backend... '
                 print " values: " + str(ot.attributes)
                 try:
                     self.backend.createObject(objectTemplate, ot, True)
                     print "\033[92mDone.\033[0m\n"
                 except BaseException as e:
                     print "\033[91mFail.\033[0m"
                     print "''''''''"
                     print e
                     print "''''''''"
         if number == 0:
             print '<None>'
         # Synced object:
         objectTemplate.synced_at = django.utils.timezone.now()
         objectTemplate.save()
     print '.........................'
     print 'Checking for Groups which do not exist into LBE Backend but in Target:'
     for groupTemplate in LBEGroup.objects.all():
         groupInstance = GroupInstanceHelper(groupTemplate)
         try:
             scope = groupInstance.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         grpTarget = self.target.searchObjects(groupTemplate, scope)
         grpBackend = self.backend.searchObjects(groupTemplate)
         for gt in grpTarget:
             exist = False
             for gb in grpBackend:
                 if gt.name == gb.name:
                     exist = True
                     break
             if not exist:
                 # import only existing group into LBE config
                 try:
                     LBEGroup.objects.get(
                         displayName__iexact=gt.displayName)
                 except BaseException:
                     continue
                 print '=> Adding \033[95m' + gt.name + '\033[0m group into LBE Backend... '
                 print " values: " + str(gt.attributes)
                 try:
                     if groupInstance.attributeName in gt.attributes:
                         gt.attributes[
                             groupInstance.attributeName] = self._getID(
                                 gt.attributes[groupInstance.attributeName])
                     groupHelper = GroupInstanceHelper(groupTemplate, gt)
                     groupHelper.createTemplate(True)
                     #print " >\033[91mThis group does not exists in LBE Configuration Group.\033[0m"
                     #print " >\033[91mIn order to see, manage it, please create it using some extra attribute:"
                     #print "  >\033[91m'Display Name': \033[95m" + gt.name + "\033[0m"
                     #print " >\033[91mInto the Script file:"
                     #print "  >'DN Attribute': \033[95m" + groupHelper.callScriptClassMethod("base_dn") + "\033[91m"
                     #print "  >'Attribute Name' & 'Object Classes': as you wish.\033[0m"
                     print "\033[92mDone.\033[0m\n"
                 except BaseException as e:
                     print "\033[91mFail.\033[0m\n"
                     print "''''''''"
                     print e
                     print "''''''''"
         # Synced group:
         groupTemplate.synced_at = django.utils.timezone.now()
         groupTemplate.save()
     print "End."
Example #30
0
File: views.py Project: OpenCSI/lbe
def modifyObject(request, obj_id=None, instance_id=None):
    objectForm = None
    lbeObjectTemplate = LBEObjectTemplate.objects.get(id=obj_id)
    if request.method == 'POST':
        # we can't modify the Synced_at value
        POST = request.POST.copy()
        POST['synced_at'] = lbeObjectTemplate.synced_at
        # POST modification
        objectForm = LBEObjectTemplateForm(POST, instance=lbeObjectTemplate)
        oldNAttribute = lbeObjectTemplate.instanceNameAttribute.name
        oldDNAttribute = lbeObjectTemplate.instanceDisplayNameAttribute.id
        if objectForm.is_valid():
            # change the _id value if changed:
            if not oldNAttribute == request.POST['instanceNameAttribute']:
                changeID = True
            else:
                changeID = False
                # change the displayName value if changed:
            if not oldDNAttribute == int(
                    request.POST['instanceDisplayNameAttribute']):
                DN = True
            else:
                DN = False
            if changeID or DN:
                if changeID is True:
                    objectForm.instance.instanceNameBeforeAttribute = LBEAttribute.objects.get(
                        name__iexact=oldNAttribute)
                    objectForm.instance.needReconciliationRDN = True
                backend = BackendHelper()
                ob = backend.searchObjects(lbeObjectTemplate)
                try:
                    for o in ob:
                        if changeID:
                            # change the _id value
                            backend.update_id(
                                lbeObjectTemplate, o, o.attributes[
                                    request.POST['instanceNameAttribute']][0])
                            # the RDN Attribute from Target Server is replace into the Reconciliation
                        if DN:
                            attribute = LBEAttribute.objects.get(
                                id=request.POST['instanceDisplayNameAttribute']
                            )
                            backend.modifyDisplayName(
                                lbeObjectTemplate, o.name,
                                o.attributes[attribute.name][0])
                    # Groups
                    if changeID:
                        groups = LBEGroup.objects.filter(
                            objectTemplate=lbeObjectTemplate)
                        for group in groups:
                            InstanceHelper = GroupInstanceHelper(group)
                            InstanceHelper.changeIDObjects()
                except KeyError:
                    messages.add_message(
                        request, messages.ERROR,
                        'Error while saving object, "' +
                        request.POST['instanceNameAttribute'] +
                        '" does not exist for the Object.')
                    return redirect('/config/object/modify/' + obj_id)
            objectForm.save()
            messages.add_message(request, messages.SUCCESS, 'Object saved')
            return redirect('/config/object/modify/' + obj_id)
        else:
            messages.add_message(request, messages.ERROR,
                                 'Error while saving object.')
    else:
        if obj_id is None:
            messages.add_message(request, messages.INFO,
                                 'Object id is missing.')
            return render_to_response(
                'config/object/list.html',
                {'objects': LBEObjectTemplate.objects.all()})
        else:
            objectForm = LBEObjectTemplateForm(instance=lbeObjectTemplate)
    attForm = LBEAttributeInstanceForm()
    instances = LBEAttributeInstance.objects.filter(
        lbeObjectTemplate=lbeObjectTemplate).order_by('position')
    # which attribute have ajax request:
    ajaxAttribute = 'instanceNameAttribute'
    defaultValue = lbeObjectTemplate.instanceNameAttribute.name
    # Ajax function to call (js):
    ajaxFunction = 'selectFrom(\'' + reverse(
        'config.views.showAttributeAJAX'
    )[:-1] + '\',\'' + ajaxAttribute + '\');'
    info_missing_policy = "Variable used for setting if the Object is deleted into the Target or <br> if we need to add "
    info_missing_policy += " to the Backend"
    info_different_policy = "Variable enables to set which Server, we need to upgrade values:<br> If the value is TARGET"
    info_different_policy += ", then the Backend object will replace the Target object <br>else, the opposite."
    if lbeObjectTemplate.instanceNameBeforeAttribute is not None:
        attributeBefore = lbeObjectTemplate.instanceNameBeforeAttribute.name
    else:
        attributeBefore = lbeObjectTemplate.instanceNameAttribute.name
    return render_to_response('config/object/modify.html', {
        'attributeInstances': instances,
        'lbeObject': lbeObjectTemplate,
        'objectForm': objectForm,
        'attributeForm': attForm,
        'ajaxAttribute': ajaxAttribute,
        'ajaxFunction': ajaxFunction,
        'defaultValue': defaultValue,
        'info_missing_policy': info_missing_policy,
        'info_different_policy': info_different_policy,
        'attributeInstanceBefore': attributeBefore
    },
                              context_instance=RequestContext(request))