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
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!")