blob: 79b2e71498b026ed1f02f3e8761a4fc8e842891d [file] [log] [blame]
Scott Baker91da9c22015-08-07 16:30:18 -07001import os
2import pdb
3import sys
4import tempfile
5sys.path.append("/opt/tosca")
6from translator.toscalib.tosca_template import ToscaTemplate
7
Scott Baker33890562015-10-28 14:52:14 -07008from core.models import User, Site, SiteRole, SliceRole, SlicePrivilege, SitePrivilege, DashboardView, UserDashboardView
Scott Baker91da9c22015-08-07 16:30:18 -07009
10from xosresource import XOSResource
11
12class XOSUser(XOSResource):
13 provides = "tosca.nodes.User"
14 xos_model = User
Scott Baker935ad852015-09-08 17:23:07 -070015 name_field = "email"
16 copyin_props = ["password", "firstname", "lastname", "phone", "user_url", "public_key", "is_active", "is_admin", "login_page"]
Scott Baker91da9c22015-08-07 16:30:18 -070017
18 def get_xos_args(self):
Scott Baker935ad852015-09-08 17:23:07 -070019 args = super(XOSUser, self).get_xos_args()
Scott Baker91da9c22015-08-07 16:30:18 -070020
21 site_name = self.get_requirement("tosca.relationships.MemberOfSite")
22 if site_name:
23 args["site"] = self.get_xos_object(Site, login_base=site_name)
24
25 return args
26
27 def get_existing_objs(self):
Scott Baker32596412016-04-25 14:55:22 -070028 return self.xos_model.objects.filter(email = self.obj_name)
Scott Baker91da9c22015-08-07 16:30:18 -070029
30 def postprocess(self, obj):
Scott Bakerb31659b2015-08-07 17:06:47 -070031 rolemap = ( ("tosca.relationships.AdminPrivilege", "admin"), ("tosca.relationships.AccessPrivilege", "access"),
32 ("tosca.relationships.PIPrivilege", "pi"), ("tosca.relationships.TechPrivilege", "tech") )
33 for (rel, role) in rolemap:
34 for obj_name in self.get_requirements(rel):
35 dest = self.engine.name_to_xos_model(self.user, obj_name)
36 if dest.__class__.__name__ == "Slice":
37 role_obj = self.get_xos_object(SliceRole, role=role)
38 if not SlicePrivilege.objects.filter(user=user, role=role_obj, slice=dest):
39 sp = SlicePrivilege(user=obj, role=role_obj, slice=dest)
40 sp.save()
41 self.info("Added slice privilege on %s role %s for %s" % (str(dest), str(role), str(obj)))
42 elif dest.__class__.__name__ == "Site":
43 role_obj = self.get_xos_object(SiteRole, role=role)
44 if not SitePrivilege.objects.filter(user=obj, role=role_obj, site=dest):
45 sp = SitePrivilege(user=obj, role=role_obj, site=dest)
46 sp.save()
47 self.info("Added site privilege on %s role %s for %s" % (str(dest), str(role), str(obj)))
Scott Baker91da9c22015-08-07 16:30:18 -070048
Srikanth Vavilapalli36158e82015-10-28 23:52:29 -040049 dashboard_order = 10
Scott Baker33890562015-10-28 14:52:14 -070050 for reqs in self.nodetemplate.requirements:
51 for (k,v) in reqs.items():
52 if (v["relationship"] == "tosca.relationships.UsesDashboard"):
53 dashboard_name = v["node"]
54 dashboard = self.get_xos_object(DashboardView, name=dashboard_name)
55
56 udvs = UserDashboardView.objects.filter(user=obj, dashboardView=dashboard)
57 if not udvs:
58 self.info("Adding UserDashboardView from %s to %s" % (obj, dashboard))
59
Srikanth Vavilapalli36158e82015-10-28 23:52:29 -040060 udv = UserDashboardView(user=obj, dashboardView=dashboard, order=dashboard_order)
61 dashboard_order += 10
Scott Baker33890562015-10-28 14:52:14 -070062 udv.save()
63
Scott Baker91da9c22015-08-07 16:30:18 -070064 def create(self):
Scott Baker91da9c22015-08-07 16:30:18 -070065 xos_args = self.get_xos_args()
66
67 if not xos_args.get("site",None):
68 raise Exception("Site name must be specified when creating user")
69
70 user = User(**xos_args)
71 user.save()
72
73 self.postprocess(user)
74
75 self.info("Created User '%s'" % (str(user), ))
76
Scott Baker0041ffe2016-01-28 10:57:17 -080077 def update(self, obj):
78 xos_args = self.get_xos_args()
79
80 password = None
81 if "password" in xos_args:
82 # password needs to be set with set_password function
83 password = xos_args["password"]
84 del xos_args["password"]
85
86 for (k,v) in xos_args.items():
87 setattr(obj, k, v)
88
89 if password:
90 obj.set_password(password)
91
92 self.postprocess(obj)
93 obj.save()
94
Scott Baker91da9c22015-08-07 16:30:18 -070095 def delete(self, obj):
96 if obj.slices.exists():
97 self.info("User %s has active slices; skipping delete" % obj.name)
98 return
99 super(XOSUser, self).delete(obj)
100
101
102