Beispiel #1
0
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}
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
def load_shoppingbagByKey(req):
    bagkey = req.params.get("bagkey", "")
    if bagkey == "":
        return 1
    for user in users.loadUsersFromDB():
        for c in user.getShoppingBag():
            if c.getSharedKey() == bagkey:
                req.session["shoppingbag"] = c.getItems()
                return 1

    candidates = db.getNodeIdByAttribute("key", bagkey)
    home_root = tree.getRoot("home")
    for cand in candidates:
        n = tree.getNode(cand)
        if not n.getContentType() == "shoppingbag":
            continue
        if isDescendantOf(n, home_root):
            req.session["shoppingbag"] = n.getItems()
            return 1

    return 0
Beispiel #5
0
def showEditor(req):
    v = {}
    usersel = """\"<table border=\\"0\\"><tr><td valign=\\"top\\">""" + \
        t(lang(req), "admin_acl_editor_user") + \
        """:</td><td><select name=\\"users\\" id=\\"users\\" size=\\"4\\" onclick=\\"setValue(this)\\">"""
    for user in loadUsersFromDB():
        usersel += """<option value=\\\"""" + user.getName(
        ) + """\\\">""" + user.getName() + """</option>"""
    usersel += """</tr></table>\""""
    v["userstr"] = usersel

    groupsel = """\"<table border=\\"0\\"><tr><td valign=\\"top\\">""" + \
        t(lang(req), "admin_acl_editor_group") + \
        """:</td><td><select name=\\"users\\" id=\\"users\\" size=\\"4\\" ONCLICK=setValue(this)>"""
    for group in loadGroupsFromDB():
        groupsel += """<option value=\\\"""" + group.getName(
        ) + """\\\">""" + group.getName() + """</option>"""
    groupsel += """</tr></table>\""""
    v["groupstr"] = groupsel

    v["datestr"] = """\"<table border=\\"0\\"><tr><td rowspan=\\"2\\" valign=\\"top\\">""" + t(
        lang(req), "admin_acl_editor_operator"
    ) + """:</td><td rowspan=\\"2\\"><select name=\\"ruleop\\" id=\\"ruleop\\" size=\\"4\\" ONCLICK=setValue(this) ><option value=\\"<= \\">&lt=</option><option value=\\">= \\">&gt=</option><option value=\\"< \\">&lt</option><option value=\\"> \\">&gt</option></select></td><td valign=\\"top\\">""" + t(
        lang(req), "admin_acl_editor_date"
    ) + """:</td><td><input type=\\"text\\" name=\\"date\\" id=\\"datevalue\\" size=\\"10\\" maxlength=\\"10\\"><button name=\\"dateselect\\" type=\\"button\\" ONCLICK=setValue(this)>""" + t(
        lang(req), "admin_acl_editor_buttonok"
    ) + """</button></td>    </tr><tr><td align=\\"right\\" colspan=\\"2\\"><small>""" + t(
        lang(req), "admin_acl_editor_format"
    ) + """: dd.mm.yyyy</small></td></tr></table>\""""
    v["ipstr"] = """\"<table border=\\"0\\"><tr><td valign=\\"top\\">""" + t(
        lang(req), "admin_acl_editor_ip"
    ) + """:</td><td><input type=\\"text\\" name=\\"ipvalue\\" id=\\"ipvalue\\" size=\\"15\\"><button name=\\"ipselect\\" type=\\"button\\" ONCLICK=setValue(this)>""" + t(
        lang(req), "admin_acl_editor_buttonok"
    ) + """</button></td></tr><tr><td align=\\"right\\" colspan=\\"2\\"><small>""" + t(
        lang(req), "admin_acl_editor_format"
    ) + """: xxx.xxx.xxx.xxx</small></td></tr></table>\""""

    return req.getTAL("web/admin/modules/acls.html", v, macro="acleditor")
Beispiel #6
0
def showEditor(req):
    v = {}
    usersel = """\"<table border=\\"0\\"><tr><td valign=\\"top\\">""" + \
        t(lang(req), "admin_acl_editor_user") + \
        """:</td><td><select name=\\"users\\" id=\\"users\\" size=\\"4\\" onclick=\\"setValue(this)\\">"""
    for user in loadUsersFromDB():
        usersel += """<option value=\\\"""" + user.getName() + """\\\">""" + user.getName() + """</option>"""
    usersel += """</tr></table>\""""
    v["userstr"] = usersel

    groupsel = """\"<table border=\\"0\\"><tr><td valign=\\"top\\">""" + \
        t(lang(req), "admin_acl_editor_group") + \
        """:</td><td><select name=\\"users\\" id=\\"users\\" size=\\"4\\" ONCLICK=setValue(this)>"""
    for group in loadGroupsFromDB():
        groupsel += """<option value=\\\"""" + group.getName() + """\\\">""" + group.getName() + """</option>"""
    groupsel += """</tr></table>\""""
    v["groupstr"] = groupsel

    v["datestr"] = """\"<table border=\\"0\\"><tr><td rowspan=\\"2\\" valign=\\"top\\">""" + t(
        lang(req),
        "admin_acl_editor_operator") + """:</td><td rowspan=\\"2\\"><select name=\\"ruleop\\" id=\\"ruleop\\" size=\\"4\\" ONCLICK=setValue(this) ><option value=\\"<= \\">&lt=</option><option value=\\">= \\">&gt=</option><option value=\\"< \\">&lt</option><option value=\\"> \\">&gt</option></select></td><td valign=\\"top\\">""" + t(
        lang(req),
        "admin_acl_editor_date") + """:</td><td><input type=\\"text\\" name=\\"date\\" id=\\"datevalue\\" size=\\"10\\" maxlength=\\"10\\"><button name=\\"dateselect\\" type=\\"button\\" ONCLICK=setValue(this)>""" + t(
            lang(req),
            "admin_acl_editor_buttonok") + """</button></td>    </tr><tr><td align=\\"right\\" colspan=\\"2\\"><small>""" + t(
                lang(req),
        "admin_acl_editor_format") + """: dd.mm.yyyy</small></td></tr></table>\""""
    v["ipstr"] = """\"<table border=\\"0\\"><tr><td valign=\\"top\\">""" + t(
        lang(req),
        "admin_acl_editor_ip") + """:</td><td><input type=\\"text\\" name=\\"ipvalue\\" id=\\"ipvalue\\" size=\\"15\\"><button name=\\"ipselect\\" type=\\"button\\" ONCLICK=setValue(this)>""" + t(
        lang(req),
        "admin_acl_editor_buttonok") + """</button></td></tr><tr><td align=\\"right\\" colspan=\\"2\\"><small>""" + t(
            lang(req),
        "admin_acl_editor_format") + """: xxx.xxx.xxx.xxx</small></td></tr></table>\""""

    return req.getTAL("web/admin/modules/acls.html", v, macro="acleditor")
Beispiel #7
0
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)
Beispiel #8
0
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)
Beispiel #9
0
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
    }