def makeUserList(req, name, rights, readonlyrights, overload=0, type=""): val_left = "" val_right = "" rulelist = acl.getRuleList() userlist = {} userlist['intern'] = users.loadUsersFromDB() for usertype in list(users.getExternalUsers()): userlist[usertype.getName()] = users.getExternalUsers(usertype.getName()) rightsmap = {} rorightsmap = {} for r in rights: for u in getRuleUsers(r, userlist): if translate(u[0], lang(req)) != "": rightsmap[translate(u[0], lang(req)) + ": " + u[1]] = None else: rightsmap[u[1]] = None rrights = [] for r in readonlyrights: if r[0] == "{": for part in getRuleUsers(r, userlist): rrights.append(translate(part[0], lang(req)) + ": " + part[1]) else: rrights.append(r) readonlyrights = rrights if not (len(rightsmap) > 0 and overload): # inherited standard rules for rule in rulelist: if rule.getName() in readonlyrights: val_left += """<optgroup label="%s"></optgroup>""" % (rule.getDescription()) rorightsmap[rule.getName()] = 1 # inherited implicit rules for rule in readonlyrights: if rule not in rorightsmap: val_left += """<optgroup label="%s"></optgroup>""" % (rule) # node-level implicit rules for r in rightsmap.keys(): if not rightsmap[r] and r not in rorightsmap: val_left += """<option value="%s">%s</option>""" % (r, r) for usertype in userlist.keys(): susers = list(userlist[usertype]) susers.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower())) for user in susers: if translate(usertype, lang(req)) + ": " + user.getName() not in rightsmap and user.getName() not in rorightsmap and translate( usertype, lang(req)) + ": " + user.getName() not in readonlyrights: val_right += """<option value="%s">%s</option>""" % ( translate(usertype, lang(req)) + ": " + user.getName(), translate(usertype, lang(req)) + ": " + user.getName()) return {"name": name, "val_left": val_left, "val_right": val_right, "type": type}
def fill_users_cache(verbose=True): global users_cache atime = time.time() internal_users = loadUsersFromDB() if verbose: log.info("%.3f sec. to load %r internal users" % (time.time() - atime, len(internal_users))) atime = time.time() res = internal_users for usertype in list(getExternalUsers()): # this loop will also loop the dynamic authenticators ext_users = list(usertype.getChildren()) res += ext_users if verbose: log.info("%.3f sec. to load %r external users of type %r" % (time.time() - atime, len(ext_users), usertype.name)) atime = time.time() users_cache = res
def getUser(self, name): identificator = name if name.find("@") < 0: user_url = config.get("ldap.user_url", "") if user_url: identificator = name + "@" + user_url pattern = re.compile("(^|.* )%s($| )" % identificator) user = users.getExternalUser(name, "ldapuser") if not user: for n in users.getExternalUsers("ldapuser"): if n.getName() == name or pattern.match(n.get("identificator")): user = n break user.setUserType("ldapuser") return user
def getUser(self, name): identificator = name if name.find("@") < 0: user_url = config.get("ldap.user_url", "") if user_url: identificator = name + "@" + user_url pattern = re.compile("(^|.* )%s($| )" % identificator) user = users.getExternalUser(name, "ldapuser") if not user: for n in users.getExternalUsers("ldapuser"): if n.getName() == name or pattern.match( n.get("identificator")): user = n break user.setUserType("ldapuser") return user
def view(req): """show all users""" global users_cache users = [] order = getSortCol(req) actfilter = getFilter(req) showdetails = 0 searchterm_was = "" macro = "view" usertype = req.params.get("usertype", "") if "action" in req.params: macro = "details" if req.params.get("action") == "details": # load all users of given type if 1: # len(users_cache)<1: # load users in cache # always load users anew: cache-update for dynamic users seems # uneconomic: loading users seems to run fast users = list(loadUsersFromDB()) for _usertype in list(getExternalUsers()): users += list(_usertype.getChildren()) users_cache = users else: # use users from cache users = users_cache if req.params.get("usertype") == "intern": users = filter(lambda x: x.getUserType() == 'users', users) elif req.params.get("usertype") == "all": pass else: users = filter(lambda x: x.getUserType() == req.params.get("usertype"), users) elif req.params.get("action") == "search": # load all users with matching search req.params["page"] = "0" searchterm = req.params.get('searchterm') users = searchUser(searchterm) if searchterm: searchterm_was = searchterm if 'use_macro' in req.params: if "searchterm_was" in req.params and searchterm == req.params.get("searchterm_was"): macro = req.params.get('use_macro') elif "actpage" in req.params or "actfilter" in req.params or "filterbutton" in req.params: users = users_cache showdetails = 1 if "cancel" in req.params: showdetails = 0 # filter if actfilter != "": if actfilter in ("all", "*", t(lang(req), "admin_filter_all")): None elif actfilter == "0-9": num = re.compile(r'([0-9])') if req.params.get("filtertype", "") == "username": users = filter(lambda x: num.match(x.getName()), users) else: users = filter(lambda x: num.match(x.get("lastname")), users) elif actfilter == "else" or actfilter == t(lang(req), "admin_filter_else"): all = re.compile(r'([a-z]|[A-Z]|[0-9])') if req.params.get("filtertype", "") == "username": users = filter(lambda x: not all.match(x.getName()), users) else: users = filter(lambda x: not all.match(x.get("lastname")), users) else: if req.params.get("filtertype", "") == "username": users = filter(lambda x: x.getName().lower().startswith(actfilter), users) else: users = filter(lambda x: x.get("lastname").lower().startswith(actfilter), users) # sorting if order != "": if int(order[0:1]) == 0: users.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower())) elif int(order[0:1]) == 1: users.sort(lambda x, y: cmp(x.getLastName().lower(), y.getLastName().lower())) elif int(order[0:1]) == 2: users.sort(lambda x, y: cmp(x.getFirstName().lower(), y.getFirstName().lower())) elif int(order[0:1]) == 3: users.sort(lambda x, y: cmp(x.getEmail().lower(), y.getEmail().lower())) elif int(order[0:1]) == 4: users.sort(lambda x, y: cmp(x.getOrganisation(), y.getOrganisation())) elif int(order[0:1]) == 5: users.sort(lambda x, y: cmp(x.getGroups(), y.getGroups())) elif int(order[0:1]) == 6: users.sort(lambda x, y: cmp(x.stdPassword(), y.stdPassword())) if int(order[1:]) == 1: users.reverse() else: users.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower())) def getUsers(req, users): if req.params.get("usertype") == "intern": users = filter(lambda x: x.getUserType() == 'users', users) elif req.params.get("usertype") == "all": pass else: users = filter(lambda x: x.getUserType() == req.params.get("usertype"), users) return users if usertype: users = getUsers(req, users) pages = Overview(req, users) v = pages.getStdVars() v["filterattrs"] = [("username", "admin_user_filter_username"), ("lastname", "admin_user_filter_lastname")] v["filterarg"] = req.params.get("filtertype", "username") v["sortcol"] = pages.OrderColHeader([t(lang(req), "admin_user_col_" + str(i)) for i in range(1, 9)]) v["options"] = list(useroption) v["users"] = users v["pages"] = pages v["actfilter"] = actfilter v["auth"] = getExternalAuthentificators() v["details"] = showdetails v["language"] = lang(req) v["t"] = t v["now"] = datetime.datetime.now v["usertype"] = usertype v["id_func"] = id # make sure, this is the python built-in v["searchterm_was"] = searchterm_was v["execute_search"] = req.params.get("execute_search", "") return req.getTAL("web/admin/modules/user.html", v, macro=macro)
def view(req): """show all users""" global users_cache users = [] order = getSortCol(req) actfilter = getFilter(req) showdetails = 0 searchterm_was = "" macro = "view" usertype = req.params.get("usertype", "") if "action" in req.params: macro = "details" if req.params.get( "action") == "details": # load all users of given type if 1: # len(users_cache)<1: # load users in cache # always load users anew: cache-update for dynamic users seems # uneconomic: loading users seems to run fast users = list(loadUsersFromDB()) for _usertype in list(getExternalUsers()): users += list(_usertype.getChildren()) users_cache = users else: # use users from cache users = users_cache if req.params.get("usertype") == "intern": users = filter(lambda x: x.getUserType() == 'users', users) elif req.params.get("usertype") == "all": pass else: users = filter( lambda x: x.getUserType() == req.params.get("usertype"), users) elif req.params.get( "action") == "search": # load all users with matching search req.params["page"] = "0" searchterm = req.params.get('searchterm') users = searchUser(searchterm) if searchterm: searchterm_was = searchterm if 'use_macro' in req.params: if "searchterm_was" in req.params and searchterm == req.params.get( "searchterm_was"): macro = req.params.get('use_macro') elif "actpage" in req.params or "actfilter" in req.params or "filterbutton" in req.params: users = users_cache showdetails = 1 if "cancel" in req.params: showdetails = 0 # filter if actfilter != "": if actfilter in ("all", "*", t(lang(req), "admin_filter_all")): None elif actfilter == "0-9": num = re.compile(r'([0-9])') if req.params.get("filtertype", "") == "username": users = filter(lambda x: num.match(x.getName()), users) else: users = filter(lambda x: num.match(x.get("lastname")), users) elif actfilter == "else" or actfilter == t(lang(req), "admin_filter_else"): all = re.compile(r'([a-z]|[A-Z]|[0-9])') if req.params.get("filtertype", "") == "username": users = filter(lambda x: not all.match(x.getName()), users) else: users = filter(lambda x: not all.match(x.get("lastname")), users) else: if req.params.get("filtertype", "") == "username": users = filter( lambda x: x.getName().lower().startswith(actfilter), users) else: users = filter( lambda x: x.get("lastname").lower().startswith(actfilter), users) # sorting if order != "": if int(order[0:1]) == 0: users.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower())) elif int(order[0:1]) == 1: users.sort(lambda x, y: cmp(x.getLastName().lower(), y.getLastName().lower())) elif int(order[0:1]) == 2: users.sort(lambda x, y: cmp(x.getFirstName().lower(), y.getFirstName().lower())) elif int(order[0:1]) == 3: users.sort(lambda x, y: cmp(x.getEmail().lower(), y.getEmail().lower())) elif int(order[0:1]) == 4: users.sort( lambda x, y: cmp(x.getOrganisation(), y.getOrganisation())) elif int(order[0:1]) == 5: users.sort(lambda x, y: cmp(x.getGroups(), y.getGroups())) elif int(order[0:1]) == 6: users.sort(lambda x, y: cmp(x.stdPassword(), y.stdPassword())) if int(order[1:]) == 1: users.reverse() else: users.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower())) def getUsers(req, users): if req.params.get("usertype") == "intern": users = filter(lambda x: x.getUserType() == 'users', users) elif req.params.get("usertype") == "all": pass else: users = filter( lambda x: x.getUserType() == req.params.get("usertype"), users) return users if usertype: users = getUsers(req, users) pages = Overview(req, users) v = pages.getStdVars() v["filterattrs"] = [("username", "admin_user_filter_username"), ("lastname", "admin_user_filter_lastname")] v["filterarg"] = req.params.get("filtertype", "username") v["sortcol"] = pages.OrderColHeader( [t(lang(req), "admin_user_col_" + str(i)) for i in range(1, 9)]) v["options"] = list(useroption) v["users"] = users v["pages"] = pages v["actfilter"] = actfilter v["auth"] = getExternalAuthentificators() v["details"] = showdetails v["language"] = lang(req) v["t"] = t v["now"] = datetime.datetime.now v["usertype"] = usertype v["id_func"] = id # make sure, this is the python built-in v["searchterm_was"] = searchterm_was v["execute_search"] = req.params.get("execute_search", "") return req.getTAL("web/admin/modules/user.html", v, macro=macro)
def makeUserList(req, name, rights, readonlyrights, overload=0, type=""): val_left = "" val_right = "" rulelist = acl.getRuleList() userlist = {} userlist['intern'] = users.loadUsersFromDB() for usertype in list(users.getExternalUsers()): userlist[usertype.getName()] = users.getExternalUsers( usertype.getName()) rightsmap = {} rorightsmap = {} for r in rights: for u in getRuleUsers(r, userlist): if translate(u[0], lang(req)) != "": rightsmap[translate(u[0], lang(req)) + ": " + u[1]] = None else: rightsmap[u[1]] = None rrights = [] for r in readonlyrights: if r[0] == "{": for part in getRuleUsers(r, userlist): rrights.append(translate(part[0], lang(req)) + ": " + part[1]) else: rrights.append(r) readonlyrights = rrights if not (len(rightsmap) > 0 and overload): # inherited standard rules for rule in rulelist: if rule.getName() in readonlyrights: val_left += """<optgroup label="%s"></optgroup>""" % ( rule.getDescription()) rorightsmap[rule.getName()] = 1 # inherited implicit rules for rule in readonlyrights: if rule not in rorightsmap: val_left += """<optgroup label="%s"></optgroup>""" % (rule) # node-level implicit rules for r in rightsmap.keys(): if not rightsmap[r] and r not in rorightsmap: val_left += """<option value="%s">%s</option>""" % (r, r) for usertype in userlist.keys(): susers = list(userlist[usertype]) susers.sort(lambda x, y: cmp(x.getName().lower(), y.getName().lower())) for user in susers: if translate(usertype, lang(req)) + ": " + user.getName( ) not in rightsmap and user.getName( ) not in rorightsmap and translate(usertype, lang( req)) + ": " + user.getName() not in readonlyrights: val_right += """<option value="%s">%s</option>""" % ( translate(usertype, lang(req)) + ": " + user.getName(), translate(usertype, lang(req)) + ": " + user.getName()) return { "name": name, "val_left": val_left, "val_right": val_right, "type": type }