Example #1
0
    def _setup_vars_from_std_env(self, env):
        """ Sets the common Request members by parsing a standard
            HTTPD environment (as created as environment by most common
            webservers). To be used by derived classes.

            @param env: the environment to use
        """
        self.http_accept_language = env.get('HTTP_ACCEPT_LANGUAGE', 'en')
        self.http_accept_encoding = env.get('HTTP_ACCEPT_ENCODING', '')
        self.server_name = env.get('SERVER_NAME', 'localhost')
        self.server_port = env.get('SERVER_PORT', '80')
        self.http_host = env.get('HTTP_HOST','localhost')
        self.http_referer = env.get('HTTP_REFERER', '')
        self.saved_cookie = env.get('HTTP_COOKIE', '')
        self.script_name = env.get('SCRIPT_NAME', '')
        self.path_info = env.get('PATH_INFO', '')
        self.query_string = env.get('QUERY_STRING', '')
        self.request_method = env.get('REQUEST_METHOD', None)

        self.remote_addr = env.get('REMOTE_ADDR')
        self.proxy_addr = None

        if (env.has_key('HTTP_X_FORWARDED_FOR') and
            config.trust_x_forwarded_for):
            xff = env.get('HTTP_X_FORWARDED_FOR')
            if web.isIpAddress(xff):
                self.remote_addr = env.get('HTTP_X_FORWARDED_FOR')
                self.proxy_addr = env.get('REMOTE_ADDR')

        self.http_user_agent = env.get('HTTP_USER_AGENT', '')
        self.is_ssl = (env.get('SSL_PROTOCOL', '') != '' or
            env.get('SSL_PROTOCOL_VERSION', '') != '' or
            env.get('HTTPS', 'off') == 'on')

        self.auth_username = None
        if config.auth_http_enabled and env.get('AUTH_TYPE','') == 'Basic':
            self.auth_username = env.get('REMOTE_USER','')

        # should we compress output?
        self.do_gzip = False
        if config.do_gzip:
          for encoding in self.http_accept_encoding.split(','):
            if encoding.lower() == 'gzip':
              self.do_gzip = True
              break
Example #2
0
    def handleData(self):
        _ = self._
        form = self.request.form
    
        groups_pagename = "%s/%s" % (config.wiki_settings_page,
            config.wiki_settings_page_security_defaults)
        if self.request.user.name in wikiacl.Group("Admin", self.request):
            if (self.request.form.has_key('delete') and
                self.request.form['delete']):
                # delete user group
                delete_group = unquoteWikiname(self.request.form['delete'][0])
                del self.request.config.acl_rights_default[delete_group]
                # process altered configuration
                # TODO: abstract this into Groups-y class.
                self.request.config.set_config(self.request.config.wiki_name,
                                               self.request.config.get_dict(),
                                               self.request)
                return 'User group "%s" deleted.' % (
                  self.request.form['delete'][0])

            else:
                grouplist_all = user.getGroupList(self.request)
                grouplist = copy(grouplist_all)

                # remove immutable groups
                grouplist.remove("All")
                grouplist.remove("Known")

                new_group_name = None
                new_group_dict = None
                for key in form: 
                    if key.startswith('group_'):
                        groupname = unquoteWikiname(key[len('group_'):])
                        if len(groupname) > 100:
                            return _("Group names must be less than 100 "
                                     "characters.")
                        if groupname not in grouplist:
                            continue  # throw out invalid group names
                        # keep track of empty textarea responses
                        grouplist.remove(groupname) 
                        memberlist = [member.strip() for member in
                            form[key][0].split('\n')]
                        newmemberlist = []
                        for member in memberlist:
                            if len(member) > 100:
                                return _("User names must be less than 100 "
                                         "characters.")
                            if member:
                                newmemberlist.append(member)
                        memberlist = newmemberlist
                        # initialize the group dictionary
                        group_dict = {}
                        for membername in memberlist:
                            group_dict[membername.lower()] = None

                        group = wikiacl.Group(groupname, self.request,
                                              fresh=True) 
                        group.update(group_dict)
                        group.save()
                    elif key == 'ips_banned':
                        ips_banned = {}
                        for ip in form['ips_banned'][0].split('\n'):
                            ip = ip.strip()
                            if not web.isIpAddress(ip):
                                return _('Invalid IP address "%s" entered.' % (
                                    ip))
                            ips_banned[ip] = None

                        group = wikiacl.Group("Banned", self.request,
                                              fresh=True)
                        group.update_ips(ips_banned)
                        group.save()
                    elif key == 'new_group_name':
                        new_group_name = form['new_group_name'][0].strip()
                        if len(new_group_name) > 100:
                            return _("Group names must be less than 100 "
                                     "characters.")
                        elif new_group_name in grouplist_all:
                            return _("Group %s already exists." % (
                                new_group_name))
                    elif key == 'new_group_users':
                        new_group_users = [member.strip() for member in
                            form['new_group_users'][0].split('\n')]
                        new_group_users_copy = []
                        for member in new_group_users:
                            if len(member) > 100:
                                return _("User names must be less than 100 "
                                         "characters.")
                            if member:
                                new_group_users_copy.append(member)
                        new_group_users = new_group_users_copy
                        # initialize the group dictionary
                        new_group_dict = {}
                        for membername in new_group_users:
                            new_group_dict[membername.lower()] = None

                for emptygroupname in grouplist:
                    group = wikiacl.Group(emptygroupname, self.request)
                    group.update({})
                    group.save()

                if new_group_name:
                    new_group = wikiacl.Group(new_group_name, self.request)
                    if new_group_dict:
                        new_group.update(new_group_dict)
                    new_group.save()

                return _("User groups updated!")