Proyecto

General

Perfil

##############################################################################
# -*- coding: utf-8 -*-
# Project: ControlIES
# Module: Groups.py
# Purpose: Groups class
# Language: Python 2.5
# Date: 7-Feb-2011.
# Ver: 7-Feb-2011.
# Author: Manuel Mora Gordillo
# Francisco Mendez Palma
# Copyright: 2011 - Manuel Mora Gordillo <manuito @no-spam@ gmail.com>
# 2011 - Francisco Mendez Palma <fmendezpalma @no-spam@ gmail.com>
#
# ControlIES is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# ControlIES is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with ControlAula. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

import ldap
import logging
from math import ceil
from operator import itemgetter

class Groups(object):

def __init__(self):
pass
def __init__(self,ldap,name,gidNumber):
self.ldap = ldap
self.name = name
self.gidNumber = gidNumber
def validation(self):
if self.name == "":
return "name"

if self.gidNumber == "":
return "gidNumber"
return "OK"

def process(self,action):
if action == "add":
val = self.validation()
if val != "OK":
return val
else:
response = self.add()
return response

if action == "modify":
val = self.validation()
if val != "OK":
return val
else:
response = self.modify()
return response
if action == "delete":
response = self.delete()
return response
if action == "list":
response = self.list();
return response
def list(self,args):

filter = self.buildFilter(args)
search = self.ldap.search("ou=Group",filter,["cn","gidNumber","groupType"])

# grid parameters
limit = int(args['rows'][0])
page = int(args['page'][0])
start = limit * page - limit
finish = start + limit;

# sort by field
sortBy = args['sidx'][0]
if sortBy == "cn":
sortBy = "id"

# reverse Sort
reverseSort = False
if args['sord'][0] == "asc":
reverseSort = True

# type of group (Classroom/Department)
try:
searchType = args['type'][0]
except LookupError:
searchType = "none"

rows = []
for i in search:
typeRow="Aula"
if i[0][1]["groupType"][0]=="school_department":
typeRow="Departamento"
if searchType == typeRow or searchType=="none":
row = {
"id":i[0][0],
"cell":[typeRow, i[0][1]["cn"][0], i[0][1]["gidNumber"][0]],
"type": typeRow,
"cn": i[0][1]["cn"][0],
"gidNumber": i[0][1]["gidNumber"][0]
}
rows.append(row)
if len(search) > 0:
totalPages = ceil( len(search) / int(limit) )
else:
totalPages = 0

if page > totalPages:
page = totalPages

# sort rows
result = sorted(rows, key=itemgetter(sortBy), reverse=reverseSort)

return { "page":page, "total":totalPages, "records":len(search), "rows":result[start:finish] }


def buildFilter(self, args):
filter = "(&(cn=*)(|(groupType=school_class)(groupType=school_department))"
try:
filter = filter + "(cn=*" + args['cn'][0] + "*)"
except LookupError:
pass

try:
filter = filter + "(gidNumber=" + args['gidNumber'][0] + ")"
except LookupError:
pass

filter = filter + ")"
return filter

def add(self):
record = [
('objectclass', ['person','organizationalperson','inetorgperson']),
('uid', ['francis']),
('cn', [self.name] ),
('sn', ['Bacon'] ),
('userpassword', [self.password]),
('ou', ['users'])
]
try:
self.ldap.add("cn=Groups", record)
except ldap.ALREADY_EXISTS:
return "fail"
return "OK"
def modify(self):
mod_attrs = [
(ldap.MOD_ADD, 'description', 'Author of New Organon'),
(ldap.MOD_ADD, 'description', 'British empiricist')
]
self.ldap.modify_s('uid='+ uid +',cn=Groups', mod_attrs)

def delete(self,uid):
self.ldap.delete('uid='+ uid +',cn=Groups')
(2-2/8)