AiC and REST login
[myslice.git] / portal / dashboardview.py
1 import json
2 from manifold.core.query         import Query
3 from manifoldapi.manifoldapi     import execute_query
4
5 from unfold.page                 import Page
6
7 from plugins.lists.testbedlist   import TestbedList
8 from plugins.lists.slicelist     import SliceList
9
10 from unfold.loginrequired        import LoginRequiredAutoLogoutView
11
12 from ui.topmenu                  import topmenu_items_live, the_user
13
14 from myslice.theme               import ThemeView
15 from myslice.settings            import logger
16
17
18 #This view requires login 
19 class DashboardView (LoginRequiredAutoLogoutView, ThemeView):
20
21     template_name = "dashboard.html"
22     
23     def get_context_data(self, **kwargs):
24         # We might have slices on different registries with different user accounts 
25         # We note that this portal could be specific to a given registry, to which we register users, but i'm not sure that simplifies things
26         # Different registries mean different identities, unless we identify via SFA HRN or have associated the user email to a single hrn
27         #messages.info(self.request, 'You have logged in')
28         page = Page(self.request)
29
30         logger.info("Dashboard page")
31         # Slow...
32         #slice_query = Query().get('slice').filter_by('user.user_hrn', 'contains', user_hrn).select('slice_hrn')
33         testbed_query  = Query().get('network').select('network_hrn','platform','version')
34         # DEMO GEC18 Query only PLE
35 #        user_query  = Query().get('local:user').select('config','email')
36 #        user_details = execute_query(self.request, user_query)
37
38         # not always found in user_details...
39 #        config={}
40   #      for user_detail in user_details:
41   #          #email = user_detail['email']
42   #          if user_detail['config']:
43   #              config = json.loads(user_detail['config'])
44   #      user_detail['authority'] = config.get('authority',"Unknown Authority")
45 #
46 #        print user_detail
47 #        if user_detail['authority'] is not None:
48 #            sub_authority = user_detail['authority'].split('.')
49 #            root_authority = sub_authority[0]
50 #            slice_query = Query().get(root_authority+':user').filter_by('user_hrn', '==', '$user_hrn').select('user_hrn', 'slice.slice_hrn')
51 #        else:
52         logger.debug("SLICE QUERY")
53         logger.debug("-" * 80)
54         slice_query = Query().get('myslice:user').filter_by('user_hrn', '==', '$user_hrn').select('slices.slice_hrn')
55         page.enqueue_query(slice_query)
56         page.enqueue_query(testbed_query)
57
58         slicelist = SliceList(
59             page  = page,
60             title = "slices",
61             warning_msg = "<a href='../slice_request'>Request Slice</a>",
62             query = slice_query,
63         )
64         testbedlist = TestbedList(
65             page  = page,
66             title = "testbeds",
67             query = testbed_query,
68         )
69  
70         context = super(DashboardView, self).get_context_data(**kwargs)
71         context['person']   = self.request.user
72         context['testbeds'] = testbedlist.render(self.request) 
73         context['slices']   = slicelist.render(self.request)
74
75         # XXX This is repeated in all pages
76         # more general variables expected in the template
77         context['title'] = 'Dashboard'
78         # the menu items on the top
79         context['topmenu_items'] = topmenu_items_live('Dashboard', page) 
80         # so we can sho who is logged
81         context['username'] = the_user(self.request) 
82
83         context['theme'] = self.theme
84         
85         page.expose_js_metadata()
86
87         # the page header and other stuff
88         context.update(page.prelude_env())
89
90         return context
91