2 # Copyright 2017 CNIT - Consorzio Nazionale Interuniversitario per le Telecomunicazioni
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
8 # http://www.apache.org/licenses/LICENSE-2.0
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.
19 from django
.contrib
.auth
.decorators
import login_required
20 from django
.http
import HttpResponse
, JsonResponse
21 from django
.middleware
.csrf
import get_token
22 from django
.shortcuts
import render
, redirect
23 from lib
.util
import Util
24 from projecthandler
.osm_model
import OsmProject
25 from lib
.osm
.osmclient
.client
import Client
32 return render(request
, 'home.html', {})
36 def create_new_project(request
):
37 return render(request
, 'home.html', {})
41 def user_projects(request
):
42 csrf_token_value
= get_token(request
)
44 projects
= user
.get_projects()
46 return render(request
, 'projectlist.html', {
47 'projects': list(projects
),
48 'csrf_token': csrf_token_value
53 def open_project(request
, project_id
=None):
57 nsd
= client
.nsd_list()
58 vnfd
= client
.vnfd_list()
60 vnf
= client
.vnf_list()
62 'owner': user
.username
,
68 'nsd': len(nsd
) if nsd
else 0,
69 'vnfd': len(vnfd
) if vnfd
else 0,
70 'ns': len(ns
) if ns
else 0,
71 'vnf': len(vnf
) if vnf
else 0,
73 return render(request
, 'osm/osm_project_details.html',
74 {'project_overview': project_overview
, 'project_id': project_id
})
76 except Exception as e
:
78 return render(request
, 'error.html', {'error_msg': 'Error open project! Please retry.'})
82 def delete_project(request
, project_id
=None):
83 if request
.method
== 'POST':
87 return redirect('projects:projects_list')
88 except Exception as e
:
90 return render(request
, 'error.html', {'error_msg': 'Error deleting Project.'})
92 elif request
.method
== 'GET':
94 return render(request
, 'osm/osm_project_delete.html',
95 {'project_id': project_id
, 'project_name': project_id
})
97 except Exception as e
:
99 return render(request
, 'error.html', {'error_msg': 'Project not found.'})
103 def show_descriptors(request
, project_id
=None, descriptor_type
=None):
104 csrf_token_value
= get_token(request
)
108 if descriptor_type
== 'nsd':
109 descriptors
= client
.nsd_list()
111 elif descriptor_type
== 'vnfd':
112 descriptors
= client
.vnfd_list()
113 except Exception as e
:
116 url
= 'osm/osm_project_descriptors.html'
117 return __response_handler(request
, {
118 'descriptors': descriptors
,
119 'project_id': project_id
,
120 'project_type': 'osm',
121 "csrf_token_value": csrf_token_value
,
122 'descriptor_type': descriptor_type
127 def delete_descriptor(request
, project_id
=None, descriptor_type
=None, descriptor_id
=None):
128 csrf_token_value
= get_token(request
)
132 if descriptor_type
== 'nsd':
133 result
= client
.nsd_delete(descriptor_id
)
134 elif descriptor_type
== 'vnfd':
135 result
= client
.vnfd_delete(descriptor_id
)
140 except Exception as e
:
142 project_overview
= OsmProject
.get_overview_data()
143 prj_token
= project_overview
['type']
144 page
= prj_token
+ '/' + prj_token
+ '_project_descriptors.html'
146 return render(request
, page
, {
147 'descriptors': OsmProject
.get_descriptors(descriptor_type
),
148 'project_id': project_id
,
149 'project_overview_data': project_overview
,
150 "csrf_token_value": csrf_token_value
,
151 'descriptor_type': descriptor_type
,
154 # 'message': "Delete succeeded!" if result else 'Error in delete'}
159 def new_descriptor(request
, project_id
=None, descriptor_type
=None):
161 project_overview
= OsmProject
.get_overview_data()
162 prj_token
= project_overview
['type']
163 page
= prj_token
+ '/descriptor/descriptor_new.html'
164 if request
.method
== 'GET':
165 request_id
= request
.GET
.get('id', '')
166 return render(request
, page
, {
167 'project_id': project_id
,
168 'descriptor_type': descriptor_type
,
169 'descriptor_id': request_id
,
170 'project_overview_data': project_overview
172 elif request
.method
== 'POST':
173 csrf_token_value
= get_token(request
)
174 data_type
= request
.POST
.get('type')
175 print "TYPE", data_type
176 if data_type
== "file":
177 file_uploaded
= request
.FILES
['file']
178 text
= file_uploaded
.read()
179 data_type
= file_uploaded
.name
.split(".")[-1]
180 desc_name
= file_uploaded
.name
.split(".")[0]
181 result
= OsmProject
.create_descriptor(desc_name
, descriptor_type
, text
, data_type
, file_uploaded
)
183 text
= request
.POST
.get('text')
184 desc_name
= request
.POST
.get('id')
185 result
= OsmProject
.create_descriptor(desc_name
, descriptor_type
, text
, data_type
)
189 'project_id': project_id
,
190 'descriptor_type': descriptor_type
,
191 'project_overview_data':OsmProject
.get_overview_data(),
192 'descriptor_id': result
,
194 'success': True if result
!= False else False,
195 'message': "Descriptor created" if result
else 'Error in creation'}
197 status_code
= 200 if result
!= False else 500
198 response
= HttpResponse(json
.dumps(response_data
), content_type
="application/json", status
=status_code
)
199 response
["Access-Control-Allow-Origin"] = "*"
204 def edit_descriptor(request
, project_id
=None, descriptor_id
=None, descriptor_type
=None):
205 if request
.method
== 'POST':
206 print "edit_descriptor"
207 result
= OsmProject
.edit_descriptor(descriptor_type
, descriptor_id
, request
.POST
.get('text'),
208 request
.POST
.get('type'))
210 'project_id': project_id
,
211 'descriptor_type': descriptor_type
,
212 #'project_overview_data': projects[0].get_overview_data(),
214 'success': True if result
else False,
215 'message': "Descriptor modified." if result
else 'Error during descriptor editing.'}
217 status_code
= 200 if result
else 500
218 response
= HttpResponse(json
.dumps(response_data
), content_type
="application/json", status
=status_code
)
219 response
["Access-Control-Allow-Origin"] = "*"
222 elif request
.method
== 'GET':
223 csrf_token_value
= get_token(request
)
224 project_overview
= OsmProject
.get_overview_data()
225 print project_overview
226 prj_token
= project_overview
['type']
227 page
= prj_token
+ '/descriptor/descriptor_view.html'
229 descriptor
= OsmProject
.get_descriptor(descriptor_id
, descriptor_type
)
231 descriptor_string_json
= json
.dumps(descriptor
)
232 descriptor_string_yaml
= Util
.json2yaml(descriptor
)
234 return render(request
, page
, {
235 'project_id': project_id
,
236 'descriptor_id': descriptor_id
,
237 'project_overview_data': OsmProject
.get_overview_data(),
238 'descriptor_type': descriptor_type
,
239 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml
,
240 'descriptor_string_json': descriptor_string_json
}})
243 # OSM specific method #
244 def get_package_files_list(request
, project_id
, project
, descriptor_id
, descriptor_type
):
247 files_list
= project
.get_package_files_list(descriptor_type
, descriptor_id
)
248 result
= {'files': files_list
}
249 except Exception as e
:
252 result
= {'error_msg': 'Unknown error.'}
253 return __response_handler(request
, result
)
256 def download_pkg(request
, project_id
, descriptor_id
, descriptor_type
):
257 tar_pkg
= OsmProject
.download_pkg(descriptor_id
, descriptor_type
)
259 response
= HttpResponse(content_type
="application/tgz")
260 response
["Content-Disposition"] = "attachment; filename=osm_export.tar.gz"
261 response
.write(tar_pkg
.getvalue())
265 def create_ns(request
, project_id
, project
, descriptor_id
, descriptor_type
):
269 "nsName": request
.POST
.get('nsName', 'WithoutName'),
270 "nsDescription": request
.POST
.get('nsDescription', ''),
271 "nsdId": request
.POST
.get('nsdId', ''),
272 "vimAccountId": request
.POST
.get('vimAccountId', ''),
273 "ssh-authorized-key": [
275 request
.POST
.get('key-pair-ref', ''): request
.POST
.get('keyValue', '')
279 #result = project.create_ns(descriptor_type, descriptor_id, ns_data)
281 except Exception as e
:
284 result
= {'error_msg': 'Unknown error.'}
285 return __response_handler(request
, result
)
287 # end OSM specific method #
290 def custom_action(request
, project_id
=None, descriptor_id
=None, descriptor_type
=None, action_name
=None):
291 if request
.method
== 'GET':
292 print "Custom action: " + action_name
293 return globals()[action_name
](request
, project_id
, descriptor_id
, descriptor_type
)
296 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
297 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
298 if 'application/json' in raw_content_types
:
299 return JsonResponse(data_res
)
301 return redirect(url
, *args
, **kwargs
)
303 return render(request
, url
, data_res
)