blob: c46d8568ec96a20e9dc45bc0eeb9b6cbf316961a [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()
lombardofr59989d02020-03-18 10:51:01 +010046 keys = ["name", "domain_name"]
lombardofr480be482018-06-26 23:44:40 +020047 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())
lombardofr8682da62019-11-23 21:03:29 +010061 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
lombardofr59989d02020-03-18 10:51:01 +010065
66@login_required
67def user_domains(request):
68 user = osmutils.get_user(request)
69 client = Client()
70 result = client.get_domains(user.get_token())
71 if result and result['error'] is False:
72 domains = []
73 if result['data'] and result['data']['user_domain_name']:
74 domain_names = result['data']['user_domain_name'].split(',')
75 domains.extend(x for x in domain_names if x not in domains)
76 if result['data'] and result['data']['project_domain_name']:
77 domain_names = result['data']['project_domain_name'].split(',')
78 domains.extend(x for x in domain_names if x not in domains)
79
80 return __response_handler(request, {'domains': domains})
81 return __response_handler(request, {'domains': []})
82
83
lombardoffb37bca2018-05-03 16:20:04 +020084@login_required
lombardofr99f922f2018-07-17 17:27:36 +020085def open_project(request):
86 user = osmutils.get_user(request)
87 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +020088 try:
lombardofr99f922f2018-07-17 17:27:36 +020089
lombardofr099364f2018-06-12 11:21:02 +020090 client = Client()
lombardofrf5776442018-06-26 10:37:40 +020091 ##TODO change with adhoc api call
lombardofr835a0b72018-07-18 15:26:16 +020092 prj = client.project_get(user.get_token(), project_id)
lombardofr99f922f2018-07-17 17:27:36 +020093 nsd = client.nsd_list(user.get_token())
94 vnfd = client.vnfd_list(user.get_token())
95 ns = client.ns_list(user.get_token())
96 vnf = client.vnf_list(user.get_token())
lombardofr8682da62019-11-23 21:03:29 +010097 proj_data_admin = prj['data']['_admin'] if prj and prj['error'] is False and prj['data'] and prj['data']['_admin'] else None
lombardofr099364f2018-06-12 11:21:02 +020098 project_overview = {
99 'owner': user.username,
lombardofre5a130a2019-07-15 09:17:59 +0200100 'name': user.project_name,
lombardofr5bc5ebb2019-08-19 09:33:56 +0200101 'updated_date': proj_data_admin['modified'] if proj_data_admin else '-',
102 'created_date': proj_data_admin['created'] if proj_data_admin else '-',
lombardofr835a0b72018-07-18 15:26:16 +0200103
lombardofr099364f2018-06-12 11:21:02 +0200104 'type': 'osm',
lombardofrf5776442018-06-26 10:37:40 +0200105 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0,
106 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0,
107 'ns': len(ns['data']) if ns and ns['error'] is False else 0,
108 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0,
lombardofr099364f2018-06-12 11:21:02 +0200109 }
110 return render(request, 'osm/osm_project_details.html',
lombardoffb37bca2018-05-03 16:20:04 +0200111 {'project_overview': project_overview, 'project_id': project_id})
112
113 except Exception as e:
lombardoffb37bca2018-05-03 16:20:04 +0200114 return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'})
115
116
117@login_required
lombardofrbced6e62018-07-18 17:02:16 +0200118def delete_project(request, project_id):
lombardofr99f922f2018-07-17 17:27:36 +0200119 user = osmutils.get_user(request)
lombardofrbced6e62018-07-18 17:02:16 +0200120
lombardofr480be482018-06-26 23:44:40 +0200121 client = Client()
lombardofr99f922f2018-07-17 17:27:36 +0200122 result = client.project_delete(user.get_token(), project_id)
lombardofr480be482018-06-26 23:44:40 +0200123 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofr480be482018-06-26 23:44:40 +0200124 return __response_handler(request, result['data'], url=None,
125 status=result['data']['status'] if 'status' in result['data'] else 500)
126 else:
127 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200128
129
lombardoffb37bca2018-05-03 16:20:04 +0200130@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200131def switch_project(request, project_id):
132 user = osmutils.get_user(request)
133 user.switch_project(project_id)
134 return redirect('projects:open_project')
135
136
137@login_required
lombardofrbced6e62018-07-18 17:02:16 +0200138def edit_project(request, project_id):
139 if request.method == 'POST':
140 user = osmutils.get_user(request)
141 client = Client()
142 project_dict = request.POST.dict()
143 keys = ["name"]
144 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, project_dict.items()))
145 result = client.project_edit(user.get_token(), project_id, project_data)
146 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofrbced6e62018-07-18 17:02:16 +0200147 return __response_handler(request, result['data'], url=None,
148 status=result['data']['status'] if 'status' in result['data'] else 500)
149 else:
150 return __response_handler(request, {}, url=None, status=200)
151
152
lombardoffb37bca2018-05-03 16:20:04 +0200153def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
154 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
lombardofrf5776442018-06-26 10:37:40 +0200155 if 'application/json' in raw_content_types or url is None:
156 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
lombardoffb37bca2018-05-03 16:20:04 +0200157 elif to_redirect:
158 return redirect(url, *args, **kwargs)
159 else:
160 return render(request, url, data_res)