blob: f36c7ab18861c38a347911c32f5d74e0da6bb016 [file] [log] [blame]
lombardoffb37bca2018-05-03 16:20:04 +02001#
2# Copyright 2017 CNIT - Consorzio Nazionale Interuniversitario per le Telecomunicazioni
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17import json
lombardofrf5776442018-06-26 10:37:40 +020018import logging
lombardoffb37bca2018-05-03 16:20:04 +020019
lombardofrf5776442018-06-26 10:37:40 +020020import yaml
lombardofr4908f382018-09-10 11:36:06 +020021from sf_t3d.decorators import login_required
lombardoffb37bca2018-05-03 16:20:04 +020022from django.http import HttpResponse, JsonResponse
lombardoffb37bca2018-05-03 16:20:04 +020023from django.shortcuts import render, redirect
lombardofr99f922f2018-07-17 17:27:36 +020024
25from authosm.exceptions import OSMAuthException
lombardoffb37bca2018-05-03 16:20:04 +020026from lib.util import Util
lombardofr07930222018-06-19 16:59:45 +020027from lib.osm.osmclient.clientv2 import Client
lombardofr99f922f2018-07-17 17:27:36 +020028import authosm.utils as osmutils
lombardoffb37bca2018-05-03 16:20:04 +020029
30
lombardofrf5776442018-06-26 10:37:40 +020031logging.basicConfig(level=logging.DEBUG)
32log = logging.getLogger('projecthandler/view.py')
lombardoffb37bca2018-05-03 16:20:04 +020033
lombardoffb37bca2018-05-03 16:20:04 +020034
35@login_required
36def home(request):
37 return render(request, 'home.html', {})
38
39
40@login_required
41def create_new_project(request):
lombardofr480be482018-06-26 23:44:40 +020042 if request.method == 'POST':
lombardofr99f922f2018-07-17 17:27:36 +020043 user = osmutils.get_user(request)
lombardofr480be482018-06-26 23:44:40 +020044 client = Client()
45 new_project_dict = request.POST.dict()
46 keys = ["name"]
47 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, new_project_dict.items()))
lombardofr99f922f2018-07-17 17:27:36 +020048 result = client.project_create(user.get_token(), project_data)
lombardofr480be482018-06-26 23:44:40 +020049 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofr480be482018-06-26 23:44:40 +020050 return __response_handler(request, result['data'], url=None,
51 status=result['data']['status'] if 'status' in result['data'] else 500)
52 else:
53 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +020054
55
56@login_required
57def user_projects(request):
lombardofr99f922f2018-07-17 17:27:36 +020058 user = osmutils.get_user(request)
lombardofr480be482018-06-26 23:44:40 +020059 client = Client()
lombardofr99f922f2018-07-17 17:27:36 +020060 result = client.project_list(user.get_token())
lombardofr10b52d12018-07-17 23:42:28 +020061 return __response_handler(request,{
lombardofr480be482018-06-26 23:44:40 +020062 'projects': result['data'] if result and result['error'] is False else [],
lombardofr10b52d12018-07-17 23:42:28 +020063 },'projectlist.html')
64
lombardoffb37bca2018-05-03 16:20:04 +020065@login_required
lombardofr99f922f2018-07-17 17:27:36 +020066def open_project(request):
67 user = osmutils.get_user(request)
68 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +020069 try:
lombardofr99f922f2018-07-17 17:27:36 +020070
lombardofr099364f2018-06-12 11:21:02 +020071 client = Client()
lombardofrf5776442018-06-26 10:37:40 +020072 ##TODO change with adhoc api call
lombardofr835a0b72018-07-18 15:26:16 +020073 prj = client.project_get(user.get_token(), project_id)
lombardofr99f922f2018-07-17 17:27:36 +020074 nsd = client.nsd_list(user.get_token())
75 vnfd = client.vnfd_list(user.get_token())
76 ns = client.ns_list(user.get_token())
77 vnf = client.vnf_list(user.get_token())
lombardofr5bc5ebb2019-08-19 09:33:56 +020078
79 proj_data_admin = prj['data']['_admin'] if prj and prj['data'] and prj['data']['_admin'] and prj['error'] is False else None
lombardofr099364f2018-06-12 11:21:02 +020080 project_overview = {
81 'owner': user.username,
lombardofre5a130a2019-07-15 09:17:59 +020082 'name': user.project_name,
lombardofr5bc5ebb2019-08-19 09:33:56 +020083 'updated_date': proj_data_admin['modified'] if proj_data_admin else '-',
84 'created_date': proj_data_admin['created'] if proj_data_admin else '-',
lombardofr835a0b72018-07-18 15:26:16 +020085
lombardofr099364f2018-06-12 11:21:02 +020086 'type': 'osm',
lombardofrf5776442018-06-26 10:37:40 +020087 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0,
88 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0,
89 'ns': len(ns['data']) if ns and ns['error'] is False else 0,
90 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0,
lombardofr099364f2018-06-12 11:21:02 +020091 }
92 return render(request, 'osm/osm_project_details.html',
lombardoffb37bca2018-05-03 16:20:04 +020093 {'project_overview': project_overview, 'project_id': project_id})
94
95 except Exception as e:
lombardoffb37bca2018-05-03 16:20:04 +020096 return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'})
97
98
99@login_required
lombardofrbced6e62018-07-18 17:02:16 +0200100def delete_project(request, project_id):
lombardofr99f922f2018-07-17 17:27:36 +0200101 user = osmutils.get_user(request)
lombardofrbced6e62018-07-18 17:02:16 +0200102
lombardofr480be482018-06-26 23:44:40 +0200103 client = Client()
lombardofr99f922f2018-07-17 17:27:36 +0200104 result = client.project_delete(user.get_token(), project_id)
lombardofr480be482018-06-26 23:44:40 +0200105 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofr480be482018-06-26 23:44:40 +0200106 return __response_handler(request, result['data'], url=None,
107 status=result['data']['status'] if 'status' in result['data'] else 500)
108 else:
109 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200110
111
lombardoffb37bca2018-05-03 16:20:04 +0200112@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200113def switch_project(request, project_id):
114 user = osmutils.get_user(request)
115 user.switch_project(project_id)
116 return redirect('projects:open_project')
117
118
119@login_required
lombardofrbced6e62018-07-18 17:02:16 +0200120def edit_project(request, project_id):
121 if request.method == 'POST':
122 user = osmutils.get_user(request)
123 client = Client()
124 project_dict = request.POST.dict()
125 keys = ["name"]
126 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, project_dict.items()))
127 result = client.project_edit(user.get_token(), project_id, project_data)
128 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofrbced6e62018-07-18 17:02:16 +0200129 return __response_handler(request, result['data'], url=None,
130 status=result['data']['status'] if 'status' in result['data'] else 500)
131 else:
132 return __response_handler(request, {}, url=None, status=200)
133
134
lombardofr099364f2018-06-12 11:21:02 +0200135
lombardoffb37bca2018-05-03 16:20:04 +0200136
137
138def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
139 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
lombardofrf5776442018-06-26 10:37:40 +0200140 if 'application/json' in raw_content_types or url is None:
141 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
lombardoffb37bca2018-05-03 16:20:04 +0200142 elif to_redirect:
143 return redirect(url, *args, **kwargs)
144 else:
145 return render(request, url, data_res)