From: Thierry Parmentelat Date: Tue, 3 Jun 2008 05:01:06 +0000 (+0000) Subject: get the ilinks to work X-Git-Tag: PLCAPI-4.3-1~32 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=eb2e4cfd904f6267f0b981602465bec50369891b;p=plcapi.git get the ilinks to work --- diff --git a/PLC/Methods/AddIlink.py b/PLC/Methods/AddIlink.py index d7c1c7fb..78d47ba2 100644 --- a/PLC/Methods/AddIlink.py +++ b/PLC/Methods/AddIlink.py @@ -40,10 +40,10 @@ class AddIlink(Method): def call(self, auth, src_if_id, dst_if_id, tag_type_id_or_name, value): - src_if = Interfaces (self.api, [src_if_id],[interface_id]) + src_if = Interfaces (self.api, [src_if_id],['interface_id']) if not src_if: raise PLCInvalidArgument, "No such source interface %r"%src_if_id - dst_if = Interfaces (self.api, [dst_if_id],[interface_id]) + dst_if = Interfaces (self.api, [dst_if_id],['interface_id']) if not dst_if: raise PLCInvalidArgument, "No such destination interface %r"%dst_if_id diff --git a/PLC/Methods/DeleteIlink.py b/PLC/Methods/DeleteIlink.py index b6e05b2d..f8b862ee 100644 --- a/PLC/Methods/DeleteIlink.py +++ b/PLC/Methods/DeleteIlink.py @@ -10,10 +10,10 @@ from PLC.Parameter import Parameter, Mixed from PLC.Auth import Auth from PLC.Ilinks import Ilink, Ilinks -from PLC.Nodes import Node, Nodes - +from PLC.Interfaces import Interface, Interfaces from PLC.Nodes import Node, Nodes from PLC.Sites import Site, Sites +from PLC.TagTypes import TagType, TagTypes class DeleteIlink(Method): """ @@ -35,7 +35,7 @@ class DeleteIlink(Method): returns = Parameter(int, '1 if successful') - object_type = 'Node' + object_type = 'Interface' def call(self, auth, ilink_id): @@ -44,30 +44,30 @@ class DeleteIlink(Method): raise PLCInvalidArgument, "No such ilink %r"%ilink_id ilink = ilinks[0] - ### reproducing a check from UpdateSliceAttribute, looks dumb though - nodes = Nodes(self.api, [ilink['node_id']]) - if not nodes: - raise PLCInvalidArgument, "No such node %r"%ilink['node_id'] - node = nodes[0] - - assert ilink['ilink_id'] in node['tag_ids'] + tag_type_id = ilink['tag_type_id'] + tag_type = TagTypes (self.api,[tag_type_id])[0] + required_min_role = tag_type ['min_role_id'] - # check permission : it not admin, is the user affiliated with the right site + # check permission : it not admin, is the user affiliated with the right site if 'admin' not in self.caller['roles']: - # locate node - node = Nodes (self.api,[node['node_id']])[0] - # locate site - site = Sites (self.api, [node['site_id']])[0] - # check caller is affiliated with this site - if self.caller['person_id'] not in site['person_ids']: - raise PLCPermissionDenied, "Not a member of the hosting site %s"%site['abbreviated_site'] + for key in ['src_interface_id','dst_interface_id']: + # locate interface + interface_id=ilink[key] + interface = Interfaces (self.api,interface_id)[0] + node_id=interface['node_id'] + node = Nodes (self.api,node_id) [0] + # locate site + site_id = node['site_id'] + site = Sites (self.api, [site_id]) [0] + # check caller is affiliated with this site + if self.caller['person_id'] not in site['person_ids']: + raise PLCPermissionDenied, "Not a member of the hosting site %s"%site['abbreviated_site'] - required_min_role = tag_type ['min_role_id'] - if required_min_role is not None and \ - min(self.caller['role_ids']) > required_min_role: - raise PLCPermissionDenied, "Not allowed to modify the specified ilink, requires role %d",required_min_role + if required_min_role is not None and \ + min(self.caller['role_ids']) > required_min_role: + raise PLCPermissionDenied, "Not allowed to modify the specified ilink, requires role %d",required_min_role ilink.delete() - self.object_ids = [ilink['ilink_id']] + self.object_ids = [ilink['src_interface_id'],ilink['dst_interface_id']] return 1 diff --git a/PLC/Methods/UpdateIlink.py b/PLC/Methods/UpdateIlink.py index ef6e80ef..d550336b 100644 --- a/PLC/Methods/UpdateIlink.py +++ b/PLC/Methods/UpdateIlink.py @@ -41,20 +41,8 @@ class UpdateIlink(Method): raise PLCInvalidArgument, "No such ilink %r"%ilink_id ilink = ilinks[0] - if 'admin' not in self.caller['roles']: -# # check permission : it not admin, is the user affiliated with the right site -# # locate node -# node = Nodes (self.api,[node['node_id']])[0] -# # locate site -# site = Sites (self.api, [node['site_id']])[0] -# # check caller is affiliated with this site -# if self.caller['person_id'] not in site['person_ids']: -# raise PLCPermissionDenied, "Not a member of the hosting site %s"%site['abbreviated_site'] - - required_min_role = tag_type ['min_role_id'] - if required_min_role is not None and \ - min(self.caller['role_ids']) > required_min_role: - raise PLCPermissionDenied, "Not allowed to modify the specified ilink, requires role %d",required_min_role + # xxx see AddIlink for this - should be written once in the Ilink class I guess + # checks rights and stuff ilink['value'] = value ilink.sync()