# Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. # See the License for the specific language governing permissions and # limitations under the License. """ Contains html text in variables to make and html response """ import yaml from http import HTTPStatus from html import escape as html_escape __author__ = "Alfonso Tierno " html_start = """ Welcome to OSM
( {} ) PDUs VNFDs NSDs NSs NSTDs NSIs USERs PROJECTs TOKENs VIMs WIMs SDNs logout
""" html_body = """

{item}

""" html_end = """ """ html_body_error = "

Error
{}

" html_auth2 = """ OSM Login

{error}

Sign in to OSM

Username
Password
""" html_upload_body = """

Upload {} descriptor (tar.gz) file:

""" html_nslcmop_body = """ nslcm operations VNFRS

""" html_nsilcmop_body = """ nsilcm operations

""" def format(data, request, response, toke_info): """ Format a nice html response, depending on the data :param data: :param request: cherrypy request :param response: cherrypy response :return: string with teh html response """ response.headers["Content-Type"] = 'text/html' if response.status == HTTPStatus.UNAUTHORIZED.value: if response.headers.get("WWW-Authenticate") and request.config.get("auth.allow_basic_authentication"): response.headers["WWW-Authenticate"] = "Basic" + response.headers["WWW-Authenticate"][6:] return else: return html_auth2.format(error=data) body = html_body.format(item=request.path_info) if response.status and response.status > 202: body += html_body_error.format(yaml.safe_dump(data, explicit_start=True, indent=4, default_flow_style=False)) elif isinstance(data, (list, tuple)): if request.path_info == "/vnfpkgm/v1/vnf_packages": body += html_upload_body.format(request.path_info, "VNFD") elif request.path_info == "/nsd/v1/ns_descriptors": body += html_upload_body.format(request.path_info + "_content", "NSD") elif request.path_info == "/nst/v1/nst_templates": body += html_upload_body.format(request.path_info + "_content", "NSTD") for k in data: if isinstance(k, dict): data_id = k.pop("_id", None) elif isinstance(k, str): data_id = k body += '

{id}: {t}

'.format(url=request.path_info, id=data_id, t=html_escape(str(k))) elif isinstance(data, dict): if "Location" in response.headers: body += ' show '.format(response.headers["Location"]) else: body += ' '\ .format(request.path_info) if request.path_info.startswith("/nslcm/v1/ns_instances_content/") or \ request.path_info.startswith("/nslcm/v1/ns_instances/"): _id = request.path_info[request.path_info.rfind("/")+1:] body += html_nslcmop_body.format(id=_id) elif request.path_info.startswith("/nsilcm/v1/netslice_instances_content/") or \ request.path_info.startswith("/nsilcm/v1/netslice_instances/"): _id = request.path_info[request.path_info.rfind("/")+1:] body += html_nsilcmop_body.format(id=_id) body += "
" + html_escape(yaml.safe_dump(data, explicit_start=True, indent=4, default_flow_style=False)) + \
                "
" elif data is None: if request.method == "DELETE" or "METHOD=DELETE" in request.query_string: body += "
 deleted 
" else: body = html_escape(str(data)) user_text = " " if toke_info: if toke_info.get("username"): user_text += "user: {}".format(toke_info.get("username")) if toke_info.get("project_id"): user_text += ", project: {}".format(toke_info.get("project_id")) return html_start.format(user_text) + body + html_end # yaml.safe_dump(data, explicit_start=True, indent=4, default_flow_style=False) # tags=False, # encoding='utf-8', allow_unicode=True)