def as_secured_node(self, node_url, user=None, as_node_func=None, **kw): dereference = kw.get("dereference_aliases", False) if user is None: user = self.user_manager.user_from_current_thread() elif isinstance(user, str): user = self.user_manager.get_user(user) if as_node_func: node = as_node_func(node_url) elif (not dereference and isinstance(node_url, str) and node_url.startswith("/aliases")): try: node = as_internal_node(node_url) except ENoSuchName: node = self.nodespace.as_node(node_url) else: node = self.nodespace.as_node(node_url) configurable = IConfigurableNode(node) return query_multi_adapter((configurable, user), ISecure)
from mpx.lib.node import as_node try: test = as_node('/services/Security Test') except KeyError: test = CompositeNode() test.configure({'name': 'Security Test', 'parent': '/services'}) try: node = as_node('/services/Security Test/Node') except KeyError: node = Node() node.configure({'name': 'Node', 'parent': test}) sm = as_node('/services/Security Manager') securednodes = [] assecurednodes = [] users = sm.user_manager.get_users() for user in users: securednodes.append(query_multi_adapter((node, user), ISecure)) assecurednodes.append( sm.as_secured_node('/services/Security Test/Node', user)) node1a = securednodes[5] node1b = assecurednodes[5] node1a.show_name() node1b.show_name() node1a.get_name() node1b.get_name() node1a.set_name('Node Renamed 2') node1b.set_name('Node Renamed 2')
def handle_request(self, request): exceptions = [] userobject = request.user_object() if not userobject: username = request.get_cookie("NBMUSER", None) if not username: raise Unauthorized("User unknown") address = request.get_address() if not self._cloud_manager.is_host_in_formation(address): raise Unauthorized("Address unrecognized: " + address) message = "Getting user because address/usrename: %r, %r" msglog.debug(message % (address, username)) userobject = self.user_manager.get_user(username) request_data = request.get_post_data_as_dictionary() request_data.update(request.get_query_string_as_dictionary()) if request_data.has_key('command') and request_data.has_key('guid'): exceptions = [] path = request.get_path() username = userobject.name() method = request.get_command() protocol = request.get_protocol() command = request_data['command'][0] user = self.user_service.user_from_object(userobject) origins = {} for guid in request_data['guid']: try: event = AlarmEvent.get_event(guid) except KeyError: msglog.warn("Attempt to get event %r failed." % guid) else: origins.setdefault(event.origin, []).append(event) for origin, events in origins.items(): if origin == AlarmEvent.LOCALORIGIN: for event in events: message = "User '%s'" % username if self.secured: event = query_multi_adapter((event, user), ISecure) try: event.notify(command, self, time.time(), message) except Exception, error: msg = "Notify %r of %r failed." % (event, command) msglog.log("broadway", msglog.types.WARN, msg) msglog.exception(prefix="handled") # CSCte94039 - form the proper error msg exceptions.append((command, str(error))) else: headers = {"Cookie": "NBMUSER=%s" % userobject.name()} guids = [event.GUID for event in events] parameters = [("command", command)] parameters.extend([("guid", guid) for guid in guids]) data = urllib.urlencode(parameters) url = '%s://%s%s' % (protocol, origin, path) if method == "GET": url = "?".join([url, data]) data = None redirect = urllib2.Request(url, data, headers) try: urllib2.urlopen(redirect).read() except Exception, error: message = "'%s' remote events on '%s' failed." msglog.warn(message % (command, origin)) msglog.exception(prefix="handled") exceptions.append((origin, command, error))
from mpx.lib.node import as_node try: test = as_node('/services/Security Test') except KeyError: test = CompositeNode() test.configure({'name': 'Security Test', 'parent': '/services'}) try: node = as_node('/services/Security Test/Node') except KeyError: node = Node() node.configure({'name': 'Node', 'parent': test}) sm = as_node('/services/Security Manager') securednodes = [] assecurednodes = [] users = sm.user_manager.get_users() for user in users: securednodes.append(query_multi_adapter((node, user), ISecure)) assecurednodes.append(sm.as_secured_node('/services/Security Test/Node', user)) node1a = securednodes[5] node1b = assecurednodes[5] node1a.show_name() node1b.show_name() node1a.get_name() node1b.get_name() node1a.set_name('Node Renamed 2') node1b.set_name('Node Renamed 2')
def handle_request(self, request): exceptions = [] userobject = request.user_object() if not userobject: username = request.get_cookie("NBMUSER", None) if not username: raise Unauthorized("User unknown") address = request.get_address() if not self._cloud_manager.is_host_in_formation(address): raise Unauthorized("Address unrecognized: " + address) message = "Getting user because address/usrename: %r, %r" msglog.debug(message % (address, username)) userobject = self.user_manager.get_user(username) request_data = request.get_post_data_as_dictionary() request_data.update(request.get_query_string_as_dictionary()) if request_data.has_key("command") and request_data.has_key("guid"): exceptions = [] path = request.get_path() username = userobject.name() method = request.get_command() protocol = request.get_protocol() command = request_data["command"][0] user = self.user_service.user_from_object(userobject) origins = {} for guid in request_data["guid"]: try: event = AlarmEvent.get_event(guid) except KeyError: msglog.warn("Attempt to get event %r failed." % guid) else: origins.setdefault(event.origin, []).append(event) for origin, events in origins.items(): if origin == AlarmEvent.LOCALORIGIN: for event in events: message = "User '%s'" % username if self.secured: event = query_multi_adapter((event, user), ISecure) try: event.notify(command, self, time.time(), message) except Exception, error: msg = "Notify %r of %r failed." % (event, command) msglog.log("broadway", msglog.types.WARN, msg) msglog.exception(prefix="handled") # CSCte94039 - form the proper error msg exceptions.append((command, str(error))) else: headers = {"Cookie": "NBMUSER=%s" % userobject.name()} guids = [event.GUID for event in events] parameters = [("command", command)] parameters.extend([("guid", guid) for guid in guids]) data = urllib.urlencode(parameters) url = "%s://%s%s" % (protocol, origin, path) if method == "GET": url = "?".join([url, data]) data = None redirect = urllib2.Request(url, data, headers) try: urllib2.urlopen(redirect).read() except Exception, error: message = "'%s' remote events on '%s' failed." msglog.warn(message % (command, origin)) msglog.exception(prefix="handled") exceptions.append((origin, command, error))
class MultiAdapts(object): implements(IB) adapts(INoA, INoB) def __init__(self, a, b): self.contexts = [a, b] def show(self, name = 'shane'): for context in self.contexts: context.say(name) register_adapter(MultiAdapts) noia = NoIA() noib = NoIB() adapted = query_multi_adapter((noia, noib), IB) class AnyAdapts(object): implements(IB) adapts(None, INoB) def __init__(self, a, b): self.contexts = [a, b] def show(self, name = 'shane'): for context in self.contexts: try: context.say(name) except AttributeError: print 'Context %s has no say!' % context