blob: 53323c59b3341b2547d087472c852f9b172fc2ed [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 Bakerb31659b2015-08-07 17:06:47 -07008from core.models import User, Site, SiteRole, SliceRole, SlicePrivilege, SitePrivilege
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):
28 return self.xos_model.objects.filter(email = self.nodetemplate.name)
29
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
49 def create(self):
50 nodetemplate = self.nodetemplate
51
52 xos_args = self.get_xos_args()
53
54 if not xos_args.get("site",None):
55 raise Exception("Site name must be specified when creating user")
56
57 user = User(**xos_args)
58 user.save()
59
60 self.postprocess(user)
61
62 self.info("Created User '%s'" % (str(user), ))
63
64 def delete(self, obj):
65 if obj.slices.exists():
66 self.info("User %s has active slices; skipping delete" % obj.name)
67 return
68 super(XOSUser, self).delete(obj)
69
70
71