blob: 6a9a98a342c2f23549d38419161342cf276a8e24 [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())
lombardofr099364f2018-06-12 11:21:02 +020078 project_overview = {
79 'owner': user.username,
80 'name': project_id,
lombardofr835a0b72018-07-18 15:26:16 +020081 'updated_date': prj['data']['_admin']['modified'] if prj and prj['error'] is False else '-',
82 'created_date': prj['data']['_admin']['created'] if prj and prj['error'] is False else '-',
83
lombardofr099364f2018-06-12 11:21:02 +020084 'type': 'osm',
lombardofrf5776442018-06-26 10:37:40 +020085 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0,
86 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0,
87 'ns': len(ns['data']) if ns and ns['error'] is False else 0,
88 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0,
lombardofr099364f2018-06-12 11:21:02 +020089 }
90 return render(request, 'osm/osm_project_details.html',
lombardoffb37bca2018-05-03 16:20:04 +020091 {'project_overview': project_overview, 'project_id': project_id})
92
93 except Exception as e:
lombardoffb37bca2018-05-03 16:20:04 +020094 return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'})
95
96
97@login_required
lombardofrbced6e62018-07-18 17:02:16 +020098def delete_project(request, project_id):
lombardofr99f922f2018-07-17 17:27:36 +020099 user = osmutils.get_user(request)
lombardofrbced6e62018-07-18 17:02:16 +0200100
lombardofr480be482018-06-26 23:44:40 +0200101 client = Client()
lombardofr99f922f2018-07-17 17:27:36 +0200102 result = client.project_delete(user.get_token(), project_id)
lombardofr480be482018-06-26 23:44:40 +0200103 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofr480be482018-06-26 23:44:40 +0200104 return __response_handler(request, result['data'], url=None,
105 status=result['data']['status'] if 'status' in result['data'] else 500)
106 else:
107 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200108
109
lombardoffb37bca2018-05-03 16:20:04 +0200110@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200111def switch_project(request, project_id):
112 user = osmutils.get_user(request)
113 user.switch_project(project_id)
114 return redirect('projects:open_project')
115
116
117@login_required
lombardofrbced6e62018-07-18 17:02:16 +0200118def edit_project(request, project_id):
119 if request.method == 'POST':
120 user = osmutils.get_user(request)
121 client = Client()
122 project_dict = request.POST.dict()
123 keys = ["name"]
124 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, project_dict.items()))
125 result = client.project_edit(user.get_token(), project_id, project_data)
126 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofrbced6e62018-07-18 17:02:16 +0200127 return __response_handler(request, result['data'], url=None,
128 status=result['data']['status'] if 'status' in result['data'] else 500)
129 else:
130 return __response_handler(request, {}, url=None, status=200)
131
132
lombardofr099364f2018-06-12 11:21:02 +0200133
lombardoffb37bca2018-05-03 16:20:04 +0200134
135
136def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
137 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
lombardofrf5776442018-06-26 10:37:40 +0200138 if 'application/json' in raw_content_types or url is None:
139 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
lombardoffb37bca2018-05-03 16:20:04 +0200140 elif to_redirect:
141 return redirect(url, *args, **kwargs)
142 else:
143 return render(request, url, data_res)