blob: 87dbaab4a79a8d9d4b37de550373baf6b603cc25 [file] [log] [blame]
Scott Baker91da9c22015-08-07 16:30:18 -07001from xosresource import XOSResource
Zack Williamsf40999b2016-10-05 14:48:44 -07002from core.models import User, Site, SiteRole, SliceRole, SlicePrivilege, SitePrivilege, DashboardView, UserDashboardView
Scott Baker91da9c22015-08-07 16:30:18 -07003
4class XOSUser(XOSResource):
5 provides = "tosca.nodes.User"
6 xos_model = User
Scott Baker935ad852015-09-08 17:23:07 -07007 name_field = "email"
Andy Bavierd0fbf462016-10-12 15:54:38 -04008 copyin_props = ["password", "firstname", "lastname", "phone", "user_url", "public_key", "is_active", "is_admin", "is_readonly", "is_appuser", "login_page"]
Scott Baker91da9c22015-08-07 16:30:18 -07009
10 def get_xos_args(self):
Scott Baker935ad852015-09-08 17:23:07 -070011 args = super(XOSUser, self).get_xos_args()
Scott Baker91da9c22015-08-07 16:30:18 -070012
13 site_name = self.get_requirement("tosca.relationships.MemberOfSite")
14 if site_name:
15 args["site"] = self.get_xos_object(Site, login_base=site_name)
16
17 return args
18
19 def get_existing_objs(self):
Scott Baker32596412016-04-25 14:55:22 -070020 return self.xos_model.objects.filter(email = self.obj_name)
Scott Baker91da9c22015-08-07 16:30:18 -070021
22 def postprocess(self, obj):
Scott Bakerb31659b2015-08-07 17:06:47 -070023 rolemap = ( ("tosca.relationships.AdminPrivilege", "admin"), ("tosca.relationships.AccessPrivilege", "access"),
24 ("tosca.relationships.PIPrivilege", "pi"), ("tosca.relationships.TechPrivilege", "tech") )
25 for (rel, role) in rolemap:
26 for obj_name in self.get_requirements(rel):
27 dest = self.engine.name_to_xos_model(self.user, obj_name)
28 if dest.__class__.__name__ == "Slice":
29 role_obj = self.get_xos_object(SliceRole, role=role)
Sapan Bhatia8918ac32017-07-09 00:43:27 -040030 if not Privilege.objects.filter(accessor_id=obj.id, permission='role:'+role_obj.role, object_id=dest.id, accessor_type='User', object_type='Slice'):
31 sp = Privilege(accessor_id=obj.id, permission='role:'+role_obj.role, object_id=dest.id, accessor_type='User', object_type='Slice')
Scott Bakerb31659b2015-08-07 17:06:47 -070032 sp.save()
33 self.info("Added slice privilege on %s role %s for %s" % (str(dest), str(role), str(obj)))
34 elif dest.__class__.__name__ == "Site":
35 role_obj = self.get_xos_object(SiteRole, role=role)
Sapan Bhatia8918ac32017-07-09 00:43:27 -040036 if not Privilege.objects.filter(accessor_id=obj.id, permission='role:'+role_obj.role, object_id=dest.id, accessor_type='User', object_type='Site'):
37 sp = SitePrivilege(accessor_id=obj.id, permission='role:'+role_obj.role, object_id=dest.id, accessor_type='User', object_type='Site')
Scott Bakerb31659b2015-08-07 17:06:47 -070038 sp.save()
39 self.info("Added site privilege on %s role %s for %s" % (str(dest), str(role), str(obj)))
Scott Baker91da9c22015-08-07 16:30:18 -070040
Srikanth Vavilapalli36158e82015-10-28 23:52:29 -040041 dashboard_order = 10
Scott Baker33890562015-10-28 14:52:14 -070042 for reqs in self.nodetemplate.requirements:
43 for (k,v) in reqs.items():
44 if (v["relationship"] == "tosca.relationships.UsesDashboard"):
45 dashboard_name = v["node"]
46 dashboard = self.get_xos_object(DashboardView, name=dashboard_name)
47
48 udvs = UserDashboardView.objects.filter(user=obj, dashboardView=dashboard)
49 if not udvs:
50 self.info("Adding UserDashboardView from %s to %s" % (obj, dashboard))
51
Srikanth Vavilapalli36158e82015-10-28 23:52:29 -040052 udv = UserDashboardView(user=obj, dashboardView=dashboard, order=dashboard_order)
53 dashboard_order += 10
Scott Baker33890562015-10-28 14:52:14 -070054 udv.save()
55
Scott Baker91da9c22015-08-07 16:30:18 -070056 def create(self):
Scott Baker91da9c22015-08-07 16:30:18 -070057 xos_args = self.get_xos_args()
58
59 if not xos_args.get("site",None):
60 raise Exception("Site name must be specified when creating user")
Scott Baker964ff782016-04-26 16:13:56 -070061 if ("firstname" not in xos_args) or ("lastname" not in xos_args):
62 raise Exception("firstname and lastname must be specified when creating user")
Scott Baker91da9c22015-08-07 16:30:18 -070063
64 user = User(**xos_args)
65 user.save()
66
67 self.postprocess(user)
68
69 self.info("Created User '%s'" % (str(user), ))
70
Scott Baker0041ffe2016-01-28 10:57:17 -080071 def update(self, obj):
72 xos_args = self.get_xos_args()
73
74 password = None
75 if "password" in xos_args:
76 # password needs to be set with set_password function
77 password = xos_args["password"]
78 del xos_args["password"]
79
80 for (k,v) in xos_args.items():
81 setattr(obj, k, v)
82
83 if password:
84 obj.set_password(password)
85
86 self.postprocess(obj)
87 obj.save()
88
Scott Baker91da9c22015-08-07 16:30:18 -070089 def delete(self, obj):
90 if obj.slices.exists():
91 self.info("User %s has active slices; skipping delete" % obj.name)
92 return
93 super(XOSUser, self).delete(obj)
94
95
96