Esempio n. 1
0
class NoticeManagerAdminPage(Component):

    implements(IAdminPageProvider, ITemplateProvider)

    def __init__(self):
        self._ldap = 0
        self._ldapcfg = {}
        self.error_message = ""
        for name, value in self.config.options('ldap'):
            if name in LDAP_DIRECTORY_PARAMS:
                self._ldapcfg[name] = value

    # IAdminPageProvider
    def get_admin_pages(self, req):
        if req.perm.has_permission('TRAC_ADMIN'):
            yield ('general', 'General', 'notice', 'E-Mails')

    def process_admin_request(self, req, cat, page, path_info):
        assert (req.perm.has_permission('TRAC_ADMIN'))
        if page == 'notice':
            return self._do_notice(req)

    def _get_notice_options(self):
        self.options = {
            'use_ldap': self.config.get('notice-manager', 'use_ldap'),
            'use_file': self.config.get('notice-manager', 'use_file'),
            'filename': self.config.get('notice-manager', 'filename'),
            'overwrite': self.config.get('notice-manager', 'overwrite')
        }

    def _set_notice_options(self, req):
        for opt in ['use_ldap', 'use_file', 'overwrite']:
            if (req.args.get(opt)):
                self.options[opt] = 1
            else:
                self.options[opt] = 0
            self.config.set('notice-manager', opt, self.options[opt])
        if req.args.get('filename'):
            self.options['filename'] = req.args.get('filename')
        else:
            self.options['filename'] = ""
        self.config.set('notice-manager', 'filename', self.options['filename'])
        self.config.save()

    def _get_infos(self, perms):
        userinfos = {}
        groupinfos = {}
        rejectinfos = {}

        for p in perms:
            if (p[0][0] == GROUP_PREFIX):
                infos = groupinfos
            else:
                infos = userinfos
            ainfo = infos.get(p[0])
            rejectinfo = rejectinfos.get(p[0])
            if (not ainfo) and (not rejectinfo):
                infos[p[0]] = {'id': p[0], 'name': "", 'email': ""}
            if not rejectinfo:
                rejectinfos[p[1]] = {'name': p[1]}
                reject_info = infos.get(p[1])
                if reject_info:
                    del infos[p[1]]

        for username, name, email in self.env.get_known_users():
            if (username[0] == GROUP_PREFIX):
                infos = groupinfos
            else:
                infos = userinfos
            ainfo = infos.get(username)
            if not ainfo:
                infos[username] = {'id': username, 'name': "", 'email': ""}
                ainfo = infos.get(username)
            ainfo['name'] = name
            ainfo['email'] = email

        return [userinfos, groupinfos]

    def _ldap_open(self):
        if not self._ldap:
            bind = self.config.getbool('ldap', 'group_bind')
            self._ldap = LdapConnection(self.env.log, bind, **self._ldapcfg)

    def _ldap_search_group(self, groupname):
        name = ""
        email = ""
        if self._ldap.group_rdn:
            groupou = "%s,%s" % (self._ldap.group_rdn, self._ldap.basedn)
        else:
            groupou = self._ldap.basedn

        filterstr = "(&(%s=%s)(%s=%s))" % (
            self._ldap.mapobjectclassgroup, self._ldap.objectclassgroupvalue,
            self._ldap.mapgidgroup, groupname.lstrip(GROUP_PREFIX))
        for attempt in range(2):
            sr = self._ldap._search(groupou, filterstr, ['mail', 'name'],
                                    ldap.SCOPE_SUBTREE)
            if sr:
                for (dn, attrs) in sr:
                    if (attrs.has_key("name")):
                        name = attrs["name"][0]
                    if (attrs.has_key("mail")):
                        email = attrs["mail"][0]
                break
            if self._ldap._ds:
                break
        return [name, email]

    def _ldap_search_user(self, username):
        name = ""
        email = ""
        if self._ldap.user_rdn:
            userou = "%s,%s" % (self._ldap.user_rdn, self._ldap.basedn)
        else:
            userou = self._ldap.basedn
        filterstr = "(&(%s=%s)(%s=%s))" % (self._ldap.mapobjectclassuser,
                                           self._ldap.objectclassuservalue,
                                           self._ldap.mapuiduser, username)
        for attempt in range(2):
            sr = self._ldap._search(userou, filterstr, ['mail', 'name'],
                                    ldap.SCOPE_SUBTREE)
            if sr:
                for (dn, attrs) in sr:
                    if (attrs.has_key("name")):
                        name = attrs["name"][0]
                    if (attrs.has_key("mail")):
                        email = attrs["mail"][0]
                break
            if self._ldap._ds:
                break
        return [name, email]

    def _ldap_search_members(self, name):
        users = []
        if self._ldap.group_rdn:
            groupou = "%s,%s" % (self._ldap.group_rdn, self._ldap.basedn)
        else:
            groupou = self._ldap.basedn
        filterstr = "(&(%s=%s)(%s=%s))" % (self._ldap.mapobjectclassgroup,
                                           self._ldap.objectclassgroupvalue,
                                           self._ldap.mapgidgroup, name)
        members = []
        for attempt in range(2):
            sr = self._ldap._search(groupou, filterstr, ['member'],
                                    ldap.SCOPE_SUBTREE)
            if sr:
                for (dn, attrs) in sr:
                    if (attrs.has_key("member")):
                        for member in attrs["member"]:
                            members.append(member)
                break
            if self._ldap._ds:
                break
        for member in members:
            for attempt in range(2):
                sr = self._ldap._ds.search_s(member, ldap.SCOPE_SUBTREE,
                                             'objectclass=*',
                                             [self._ldap.mapuiduser])
                if sr:
                    for (dn, attrs) in sr:
                        if (attrs.has_key(self._ldap.mapuiduser)):
                            users.append(attrs[self._ldap.mapuiduser][0])
                    break
                if self._ldap._ds:
                    break
        return users

    def _fill_from_ldap(self, userinfos, groupinfos):
        self._ldap_open()
        for groupname in groupinfos:
            group = groupinfos.get(groupname)
            if ((group['name'] == "") and
                (group['email'] == "")) or (self.options['overwrite'] == 1):
                (name, email) = self._ldap_search_group(groupname)
                if name == "":
                    name = group['name']
                if (email == ""):
                    email = group['email']
                if (name != "") or (email != ""):
                    self._save_user_info(groupname, name, email)
                    group['name'] = name
                    group['email'] = email

        for username in userinfos:
            user = userinfos.get(username)
            if ((user['name'] == "") and
                (user['email'] == "")) or (self.options['overwrite'] == 1):
                (name, email) = self._ldap_search_user(username)
                if name == "":
                    name = user['name']
                if (email == ""):
                    email = user['email']
                if (name != "") or (email != ""):
                    self._save_user_info(username, name, email)
                    user['name'] = name
                    user['email'] = email

    def _fill_from_file(self, req, userinfos, groupinfos):
        if not req.args.get('filename'):
            self.error_message = "No filename was specified. Cannot use information from a file."
            return
        filename = req.args.get('filename')
        if not os.path.exists(filename):
            self.error_message = "Filenote %s not found. Cannot use information from a file." % filename
            return
        f = open(filename)
        for line in f:
            (id, name, email) = line.split(':')
            id = id.strip()
            name = name.strip()
            email = email.strip()
            if (id[0] == GROUP_PREFIX):
                infos = groupinfos
            else:
                infos = userinfos
            ainfo = infos.get(id)
            if not ainfo:
                infos[id] = {'id': id, 'name': name, 'email': email}
                ainfo = infos.get(id)
            else:
                if (ainfo['name'] == "") or ((self.options['overwrite'] == 1)
                                             and (name != '')):
                    ainfo['name'] = name
                if (ainfo['email'] == "") or ((self.options['overwrite'] == 1)
                                              and (email != '')):
                    ainfo['email'] = email
            self._save_user_info(id, ainfo['name'], ainfo['email'])
        f.close()
        return

    def _fill_from_fields(self, req, userinfos, groupinfos):
        if req.args.get('change_id'):
            id = req.args.get('change_id')
            if (id[0] == GROUP_PREFIX):
                infos = groupinfos
            else:
                infos = userinfos
            ainfo = infos.get(id)
            if ainfo:
                name = ainfo['name']
                email = ainfo['email']
            else:
                infos[id] = {'id': id, 'name': "", 'email': ""}
                ainfo = infos.get(id)
                name = ""
                email = ""
            change_name = req.args.get('change_name')
            if change_name and (change_name != ""):
                name = change_name
                ainfo['name'] = change_name
            change_mail = req.args.get('change_mail')
            if change_mail and (change_mail != ""):
                email = change_mail
                ainfo['email'] = change_mail
            self._save_user_info(id, name, email)

    def _save_user_info(self, username, name, email):
        db = self.env.get_db_cnx()
        arr = {'name': name, 'email': email}
        cursor = db.cursor()
        cursor.execute(
            "SELECT count(*) FROM session "
            "WHERE sid=%s AND authenticated=1", (username))
        exists, = cursor.fetchone()
        if not exists:
            cursor.execute(
                "INSERT INTO session "
                "(sid, authenticated, last_visit) "
                "VALUES (%s, 1, 0)", (username))

        for key in ('name', 'email'):
            value = arr.get(key)
            if not value:
                continue
            cursor.execute(
                "UPDATE session_attribute SET value=%s "
                "WHERE name=%s AND sid=%s AND authenticated=1",
                (value, key, username))
            if not cursor.rowcount:
                cursor.execute(
                    "INSERT INTO session_attribute "
                    "(sid,authenticated,name,value) "
                    "VALUES (%s,1,%s,%s)", (username, key, value))
        db.commit()

    def _rm_user(self, req, userinfos, groupinfos):
        db = self.env.get_db_cnx()
        cursor = db.cursor()
        sel = req.args.get('sel')
        sel = isinstance(sel, list) and sel or [sel]

        for account in sel:
            if (not account) or (account == None):
                continue
            cursor.execute("DELETE FROM session_attribute WHERE sid=%s",
                           (account))
            cursor.execute("DELETE FROM session WHERE sid=%s", (account))
            if (account[0] == GROUP_PREFIX):
                del groupinfos[account]
            else:
                del userinfos[account]
        db.commit()

    def _rm_info(self, req, userinfos, groupinfos):
        db = self.env.get_db_cnx()
        cursor = db.cursor()
        sel = req.args.get('sel')
        sel = isinstance(sel, list) and sel or [sel]

        for account in sel:
            if (not account) or (account == None):
                continue
            cursor.execute("DELETE FROM session_attribute WHERE sid=%s",
                           (account))
            if (account[0] == GROUP_PREFIX):
                groupinfos[account] = {'id': account, 'name': "", 'email': ""}
            else:
                userinfos[account] = {'id': account, 'name': "", 'email': ""}
        db.commit()

    def _rm_all(self, req, userinfos, groupinfos):
        db = self.env.get_db_cnx()
        cursor = db.cursor()

        sel = []
        for account in userinfos:
            sel.append(account)

        for account in groupinfos:
            sel.append(account)

        for account in sel:
            cursor.execute("DELETE FROM session_attribute WHERE sid=%s",
                           (account))
            cursor.execute("DELETE FROM session WHERE sid=%s", (account))
            if (account[0] == GROUP_PREFIX):
                del groupinfos[account]
            else:
                del userinfos[account]
        db.commit()

    def _extract_groups(self, req, userinfos, groupinfos):
        self._ldap_open()
        sel = req.args.get('sel')
        sel = isinstance(sel, list) and sel or [sel]

        for account in sel:
            if (not account) or (account == None):
                continue
            if (account[0] != GROUP_PREFIX):
                continue
            users = self._ldap_search_members(account)
            if users:
                for user in users:
                    auser = userinfos.get(user)
                    if not auser:
                        userinfos[user] = {'id': user, 'name': "", 'email': ""}
                        self._save_user_info(user, "", "")

    def _do_notice(self, req):
        perm = PermissionSystem(self.env)
        perms = perm.get_all_permissions()

        self._get_notice_options()
        (userinfos, groupinfos) = self._get_infos(perms)
        if req.method == 'POST':
            if req.args.get('fill'):
                self._set_notice_options(req)
                if req.args.get('use_ldap'):
                    self._fill_from_ldap(userinfos, groupinfos)
                if req.args.get('use_file'):
                    self._fill_from_file(req, userinfos, groupinfos)
            if req.args.get('change'):
                self._fill_from_fields(req, userinfos, groupinfos)
            if req.args.get('rmuser'):
                self._rm_user(req, userinfos, groupinfos)
                (userinfos, groupinfos) = self._get_infos(perms)
            if req.args.get('rminfo'):
                self._rm_info(req, userinfos, groupinfos)
            if req.args.get('rmall'):
                self._rm_all(req, userinfos, groupinfos)
                (userinfos, groupinfos) = self._get_infos(perms)
                if (len(userinfos) > 0) or (len(groupinfos) > 0):
                    self.error_message = "As long as permissions are defined for users/group, " + \
                 "they cannot be delete from this list."
            if req.args.get('extract'):
                self._extract_groups(req, userinfos, groupinfos)

        req.hdf['admin.userinfos'] = userinfos
        req.hdf['admin.groupinfos'] = groupinfos
        req.hdf['admin.options'] = self.options
        if self.error_message:
            req.hdf['admin.error_message'] = self.error_message
        return 'admin_notice.cs', None

    # ITemplateProvider

    def get_htdocs_dirs(self):
        """Return the absolute path of a directory containing additional
        static resources (such as images, style sheets, etc).
        """
        return []

    def get_templates_dirs(self):
        """Return the absolute path of the directory containing the provided
        ClearSilver templates.
        """
        from pkg_resources import resource_filename
        return [resource_filename(__name__, 'templates')]
Esempio n. 2
0
class NoticeManagerAdminPage(Component):

    implements(IAdminPageProvider, ITemplateProvider)


    def __init__(self):
	self._ldap = 0
	self._ldapcfg = {}
	self.error_message = ""
	for name,value in self.config.options('ldap'):
	    if name in LDAP_DIRECTORY_PARAMS:
		self._ldapcfg[name] = value

    # IAdminPageProvider
    def get_admin_pages(self, req):
        if req.perm.has_permission('TRAC_ADMIN'):
            yield ('general', 'General', 'notice', 'E-Mails')

    def process_admin_request(self, req, cat, page, path_info):
        assert(req.perm.has_permission('TRAC_ADMIN'))
	if page == 'notice':
	    return self._do_notice(req)

    def _get_notice_options(self):
	self.options = {
    		'use_ldap' : self.config.get('notice-manager', 'use_ldap'),
    		'use_file' :  self.config.get('notice-manager', 'use_file'),
    		'filename' : self.config.get('notice-manager', 'filename'),
		'overwrite' : self.config.get('notice-manager','overwrite')
	}

    def _set_notice_options(self,req):
    	for opt in ['use_ldap', 'use_file', 'overwrite']:
	    if (req.args.get(opt)):
		self.options[opt] = 1
	    else:
		self.options[opt] = 0
	    self.config.set('notice-manager',opt, self.options[opt])
    	if req.args.get('filename'):
	    self.options ['filename'] = req.args.get('filename')
    	else:
	    self.options['filename'] = ""
   	self.config.set('notice-manager', 'filename', self.options['filename'])
    	self.config.save()
            
    def _get_infos(self, perms):
	userinfos = {}
	groupinfos = {}
	rejectinfos = {}

	for p in perms:
		if (p[0][0] == GROUP_PREFIX):
			infos = groupinfos
		else:
			infos = userinfos
		ainfo = infos.get(p[0])
		rejectinfo = rejectinfos.get(p[0])
		if (not ainfo) and (not rejectinfo):
			infos[p[0]] = {'id': p[0], 'name' : "", 'email' : ""}
		if not rejectinfo:
			rejectinfos[p[1]] = {'name': p[1]}
			reject_info = infos.get(p[1])
			if reject_info:
				del infos[p[1]]

        for username, name, email in self.env.get_known_users():
		if (username[0] == GROUP_PREFIX):
			infos = groupinfos
		else:
			infos = userinfos
        	ainfo = infos.get(username)
                if not ainfo:
		    infos[username] = {'id': username, 'name' : "", 'email' : ""}
		    ainfo = infos.get(username)
                ainfo['name'] = name
                ainfo['email'] = email

	return [userinfos,groupinfos]

    def _ldap_open(self):
	if not self._ldap:
	    bind = self.config.getbool('ldap','group_bind')
	    self._ldap = LdapConnection(self.env.log, bind, **self._ldapcfg)

    def _ldap_search_group(self, groupname):
	name = ""
	email = ""
        if self._ldap.group_rdn:
                groupou = "%s,%s" % (self._ldap.group_rdn, self._ldap.basedn);
        else:
                groupou = self._ldap.basedn;

	filterstr = "(&(%s=%s)(%s=%s))" % (self._ldap.mapobjectclassgroup,self._ldap.objectclassgroupvalue,
                         self._ldap.mapgidgroup,groupname.lstrip(GROUP_PREFIX))
	for attempt in range(2):
	    sr = self._ldap._search(groupou, filterstr, ['mail','name'], ldap.SCOPE_SUBTREE)
            if sr:
                for (dn, attrs) in sr:
                        if (attrs.has_key("name")):
                                name = attrs["name"][0]
                        if (attrs.has_key("mail")):
                                email = attrs["mail"][0]
                break
            if self._ldap._ds:
                break
	return [name,email]

    def _ldap_search_user(self, username):
	name = ""
	email = ""
        if self._ldap.user_rdn:
                userou = "%s,%s" % (self._ldap.user_rdn, self._ldap.basedn);
        else:
                userou = self._ldap.basedn;
	filterstr = "(&(%s=%s)(%s=%s))" % (self._ldap.mapobjectclassuser,self._ldap.objectclassuservalue,
                         self._ldap.mapuiduser,username)
	for attempt in range(2):
	    sr = self._ldap._search(userou, filterstr, ['mail','name'], ldap.SCOPE_SUBTREE)
            if sr:
                for (dn, attrs) in sr:
                        if (attrs.has_key("name")):
                                name = attrs["name"][0]
                        if (attrs.has_key("mail")):
                                email = attrs["mail"][0]
                break
            if self._ldap._ds:
                break
	return [name,email]

    def _ldap_search_members(self, name):
	users = []
        if self._ldap.group_rdn:
                groupou = "%s,%s" % (self._ldap.group_rdn, self._ldap.basedn);
        else:
                groupou = self._ldap.basedn;
	filterstr = "(&(%s=%s)(%s=%s))" % (self._ldap.mapobjectclassgroup,self._ldap.objectclassgroupvalue,
                         self._ldap.mapgidgroup,name)
	members = []
	for attempt in range(2):
	    sr = self._ldap._search(groupou, filterstr, ['member'], ldap.SCOPE_SUBTREE)
            if sr:
                for (dn, attrs) in sr:
                        if (attrs.has_key("member")):
				for member in attrs["member"]:
					members.append(member)
                break
            if self._ldap._ds:
                break
	for member in members:
	    for attempt in range(2):
                sr = self._ldap._ds.search_s(member, ldap.SCOPE_SUBTREE, 'objectclass=*', 
			[self._ldap.mapuiduser])
                if sr:
                    for (dn,attrs) in sr:
                        if (attrs.has_key(self._ldap.mapuiduser)):
				users.append(attrs[self._ldap.mapuiduser][0])
                    break
                if self._ldap._ds:
                    break
	return users

    def _fill_from_ldap(self,userinfos, groupinfos):
	self._ldap_open()
	for groupname in groupinfos:
		group = groupinfos.get(groupname)
		if ((group['name'] == "") and (group['email'] == "")) or (self.options['overwrite'] == 1):
			(name,email) = self._ldap_search_group(groupname)
			if name == "":
				name = group['name']
			if (email == ""):
				email = group['email']
			if (name != "") or (email != ""):
				self._save_user_info(groupname, name, email)
				group['name'] = name
				group['email'] = email

	for username in userinfos:
		user = userinfos.get(username)
		if ((user['name'] == "") and (user['email'] == "")) or (self.options['overwrite'] == 1):
			(name,email) = self._ldap_search_user(username)
			if name == "":
				name = user['name']
			if (email == ""):
				email = user['email']
			if (name != "") or (email != ""):
				self._save_user_info(username, name, email)
				user['name'] = name
				user['email'] = email

    def _fill_from_file(self, req, userinfos, groupinfos):
	if not req.args.get('filename'):
		self.error_message="No filename was specified. Cannot use information from a file."
		return
	filename = req.args.get('filename')
	if not os.path.exists(filename):
		self.error_message="Filenote %s not found. Cannot use information from a file." % filename
		return
	f = open(filename)
	for line in f:
	    (id,name,email) = line.split(':')
	    id = id.strip()
	    name = name.strip()
	    email = email.strip()
            if (id[0] == GROUP_PREFIX):
            	infos = groupinfos
            else:
            	infos = userinfos
            ainfo = infos.get(id)
            if not ainfo:
            	infos[id] = {'id': id, 'name' : name, 'email' : email}
		ainfo = infos.get(id)
	    else:
		if (ainfo['name'] == "") or ((self.options['overwrite'] == 1) and (name!='')):
			ainfo['name'] = name
		if (ainfo['email'] == "") or ((self.options['overwrite'] == 1) and (email!='')):
			ainfo['email'] = email
	    self._save_user_info(id, ainfo['name'], ainfo['email']) 
	f.close()
	return

    def _fill_from_fields(self,req,userinfos, groupinfos):
        if req.args.get('change_id'):
	    id=req.args.get('change_id')
	    if (id[0] == GROUP_PREFIX):
		infos = groupinfos
	    else:
		infos = userinfos
	    ainfo = infos.get(id)
	    if ainfo: 
		name = ainfo['name']
		email = ainfo['email']
	    else:
		infos[id] = {'id': id, 'name' : "", 'email' : ""}
		ainfo = infos.get(id)
		name = ""
		email = ""
	    change_name = req.args.get('change_name')
	    if change_name and (change_name != ""):
		name = change_name
		ainfo['name'] = change_name
	    change_mail = req.args.get('change_mail')
	    if change_mail and (change_mail != ""):
		email = change_mail
		ainfo['email'] = change_mail
	    self._save_user_info(id, name, email)

    def _save_user_info(self, username, name, email):
	db = self.env.get_db_cnx()
	arr = { 'name' : name, 'email' : email }
	cursor = db.cursor()
	cursor.execute("SELECT count(*) FROM session "
                        "WHERE sid=%s AND authenticated=1",
                        (username))
        exists, = cursor.fetchone()
        if not exists:
	    cursor.execute("INSERT INTO session "
                       "(sid, authenticated, last_visit) "
                       "VALUES (%s, 1, 0)",
                       (username))

        for key in ('name', 'email'):
            value = arr.get(key)
            if not value:
            	continue
            cursor.execute("UPDATE session_attribute SET value=%s "
                       "WHERE name=%s AND sid=%s AND authenticated=1",
                       (value, key, username))
            if not cursor.rowcount:
                cursor.execute("INSERT INTO session_attribute "
                           "(sid,authenticated,name,value) "
                           "VALUES (%s,1,%s,%s)",
                           (username, key, value))
	db.commit()

    def _rm_user(self, req, userinfos, groupinfos):
	db = self.env.get_db_cnx()
	cursor = db.cursor()
	sel = req.args.get('sel')
        sel = isinstance(sel, list) and sel or [sel]

        for account in sel:
	    if (not account) or (account == None):
		continue
            cursor.execute("DELETE FROM session_attribute WHERE sid=%s", (account))
            cursor.execute("DELETE FROM session WHERE sid=%s", (account))
	    if (account[0] == GROUP_PREFIX):
		del groupinfos[account]
	    else:
		del userinfos[account]
	db.commit()

    def _rm_info(self, req, userinfos, groupinfos):
	db = self.env.get_db_cnx()
	cursor = db.cursor()
	sel = req.args.get('sel')
        sel = isinstance(sel, list) and sel or [sel]

        for account in sel:
	    if (not account) or (account == None):
		continue
            cursor.execute("DELETE FROM session_attribute WHERE sid=%s", (account))
	    if (account[0] == GROUP_PREFIX):
		groupinfos[account] = { 'id' : account, 'name' : "", 'email' : ""}
	    else:
		userinfos[account] = { 'id' : account, 'name' : "", 'email' : ""}
	db.commit()

    def _rm_all(self, req, userinfos, groupinfos):
	db = self.env.get_db_cnx()
	cursor = db.cursor()
	
	sel = []
	for account in userinfos:
	    sel.append(account)

	for account in groupinfos:
	    sel.append(account)

        for account in sel:
            cursor.execute("DELETE FROM session_attribute WHERE sid=%s", (account))
            cursor.execute("DELETE FROM session WHERE sid=%s", (account))
	    if (account[0] == GROUP_PREFIX):
		del groupinfos[account]
	    else:
		del userinfos[account]
	db.commit()

    def _extract_groups(self, req, userinfos, groupinfos):
	self._ldap_open()
	sel = req.args.get('sel')
        sel = isinstance(sel, list) and sel or [sel]

        for account in sel:
	    if (not account) or (account == None):
		continue
	    if (account[0] != GROUP_PREFIX):
		continue
	    users = self._ldap_search_members(account)
	    if users:
		for user in users:
		    auser = userinfos.get(user)
		    if not auser:
		        userinfos[user] = { 'id' : user, 'name' : "", 'email' : ""}
		        self._save_user_info(user, "", "")

    def _do_notice(self, req):
        perm = PermissionSystem(self.env)
        perms = perm.get_all_permissions()

	self._get_notice_options()
	(userinfos, groupinfos) = self._get_infos(perms)
	if req.method == 'POST':
	    if req.args.get('fill'):
	        self._set_notice_options(req)
		if req.args.get('use_ldap'):
			self._fill_from_ldap(userinfos,groupinfos)
		if req.args.get('use_file'):
			self._fill_from_file(req,userinfos,groupinfos)
	    if req.args.get('change'):
		self._fill_from_fields(req,userinfos,groupinfos)
	    if req.args.get('rmuser'):
		self._rm_user(req,userinfos,groupinfos)
		(userinfos, groupinfos) = self._get_infos(perms)
	    if req.args.get('rminfo'):
		self._rm_info(req,userinfos,groupinfos)
	    if req.args.get('rmall'):
		self._rm_all(req,userinfos,groupinfos)
		(userinfos, groupinfos) = self._get_infos(perms)
		if (len(userinfos) > 0) or (len(groupinfos)>0):
		    self.error_message = "As long as permissions are defined for users/group, " + \
			"they cannot be delete from this list."
	    if req.args.get('extract'):
		self._extract_groups(req,userinfos,groupinfos)

	req.hdf['admin.userinfos'] = userinfos
	req.hdf['admin.groupinfos'] = groupinfos
	req.hdf['admin.options'] = self.options
	if self.error_message:
        	req.hdf['admin.error_message'] = self.error_message
	return 'admin_notice.cs', None

    # ITemplateProvider
    
    def get_htdocs_dirs(self):
        """Return the absolute path of a directory containing additional
        static resources (such as images, style sheets, etc).
        """
        return []

    def get_templates_dirs(self):
        """Return the absolute path of the directory containing the provided
        ClearSilver templates.
        """
        from pkg_resources import resource_filename
        return [resource_filename(__name__, 'templates')]
Esempio n. 3
0
 def _ldap_open(self):
     if not self._ldap:
         bind = self.config.getbool('ldap', 'group_bind')
         self._ldap = LdapConnection(self.env.log, bind, **self._ldapcfg)
Esempio n. 4
0
    def _ldap_open(self):
	if not self._ldap:
	    bind = self.config.getbool('ldap','group_bind')
	    self._ldap = LdapConnection(self.env.log, bind, **self._ldapcfg)