Initial commit for OpenECOMP SDN-C OA&M
Change-Id: I7ab579fd0d206bf356f36d52dcdf4f71f1fa2680
Signed-off-by: Timoney, Daniel (dt5972) <dtimoney@att.com>
Former-commit-id: 2a9f0edd09581f907e62ec4689b5ac94dd5382ba
diff --git a/admportal/views/ucpe/altsCredentials.ejs b/admportal/views/ucpe/altsCredentials.ejs
new file mode 100644
index 0000000..54ca020
--- /dev/null
+++ b/admportal/views/ucpe/altsCredentials.ejs
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#alts_credentials').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>ALTS Credentials</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+ <% if(priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_alts_credentials">
+ Add ALTS Credentials
+ </button>
+ </div>
+ <% } %>
+
+ <table id="alts_credentials" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>ALTS Username</th>
+ <th>ALTS Password</th>
+ <% if(priv == 'A'){ %>
+ <th>Action</th>
+ <% } %>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.alts_username %></td>
+ <td>*****</td>
+ <% if(priv == 'A') { %>
+ <td>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="updateAltsCredentials('<%=row.alts_username %>','<%= row.alts_password %>');">Update</button>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="deleteAltsCredentials('<%= row.alts_username %>', '<%= row.alts_password %>');">Delete</button>
+ </td>
+ <% } %>
+
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<% include ../partials/alts_credentials %>
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+<script type="text/javascript">
+function submitAltsCredentials(form)
+{
+ var errorMsg='';
+ var alts_username = '';
+ var alts_password = '';
+ var confirm_alts_password = '';
+
+ if ( form.name == 'addForm' )
+ {
+ alts_username = form.nf_alts_username;
+ alts_password = form.nf_alts_password;
+ confirm_alts_password = form.nf_confirm_alts_password;
+
+ if ( alts_password.value != confirm_alts_password.value )
+ {
+ bootbox.alert('Passwords do not match.');
+ return;
+ }
+ }
+ else
+ {
+ alts_username = form.uf_alts_username;
+ alts_password = form.uf_alts_password;
+ confirm_alts_password = form.uf_confirm_alts_password;
+
+ if ( alts_password.value != confirm_alts_password.value )
+ {
+ bootbox.alert('Passwords do not match.');
+ return;
+ }
+ }
+ form.submit();
+}
+
+function updateAltsCredentials(alts_username,alts_password) {
+
+ document.getElementById('uf_alts_username').value=alts_username;
+ document.getElementById('uf_alts_password').value=alts_password;
+
+ $('#update_alts_credentials').modal('show');
+}
+
+function deleteAltsCredentials(alts_username, alts_password) {
+
+ var url_string = encodeURI("/ucpe/deleteAltsCredentials?alts_username=" + alts_username
+ + "&alts_password=" + alts_password);
+
+
+ bootbox.confirm({
+ message: "Are you sure you want to delete ALTS Credentials? " + alts_username,
+ callback: function(result) {
+ if ( result )
+ {
+ location.assign(url_string);
+ }
+ return;
+ },
+ buttons: {
+ cancel: {
+ label: "Cancel"
+ },
+ confirm: {
+ label: "Yes"
+ }
+ }
+ });
+}
+
+</script>
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/apiLogins.ejs b/admportal/views/ucpe/apiLogins.ejs
new file mode 100644
index 0000000..ddb50c8
--- /dev/null
+++ b/admportal/views/ucpe/apiLogins.ejs
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#api_logins').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+
+<body>
+
+<div class="well well-sm">
+<h3>uCPE API Logins</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="api_logins" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*CUSTOMER_NAME</th>
+ <th>PHS_NCS_USERNAME</th>
+ <th>NCS_PUBLIC_SSH_KEY</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.customer_name %></td>
+ <td><%= row.phs_ncs_username %></td>
+ <td><%= row.ncs_public_ssh_key %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/chainingTopologies.ejs b/admportal/views/ucpe/chainingTopologies.ejs
new file mode 100644
index 0000000..2717062
--- /dev/null
+++ b/admportal/views/ucpe/chainingTopologies.ejs
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#chaining_topologies').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE Chaining Topologies</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="chaining_topologies" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*TOPOLOGY_NAME</th>
+ <th>*START_VNF_TYPE</th>
+ <th>*SEQUENCE_NUMBER</th>
+ <th>START_SERVIVE_PORT_NAME</th>
+ <th>VNF_TYPE</th>
+ <th>SERVICE_PORT_NAME</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.topology_name %></td>
+ <td><%= row.start_vnf_type %></td>
+ <td><%= row.sequence_number %></td>
+ <td><%= row.start_service_port_name %></td>
+ <td><%= row.vnf_type %></td>
+ <td><%= row.service_port_name %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/customerNcsServers.ejs b/admportal/views/ucpe/customerNcsServers.ejs
new file mode 100644
index 0000000..082384a
--- /dev/null
+++ b/admportal/views/ucpe/customerNcsServers.ejs
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#ncs_servers').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE Customer NCS Servers</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="ncs_servers" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*CUSTOMER_NAME</th>
+ <th>URL</th>
+ <th>NCS_SM_IP_ADDRESS</th>
+ <th>NCS_DM_V6_IP_ADDRESS</th>
+ <th>NCS_DM_V6_IP_NETWORK</th>
+ <th>DR_NCS_DM_V6_IP_NETWORK</th>
+ <th>NCS_DM_V4_IP_NETWORK</th>
+ <th>DR_NCS_DM_V4_IP_NETWORK</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.customer_name %></td>
+ <td><%= row.url %></td>
+ <td><%= row.ncs_sm_ip_address %></td>
+ <td><%= row.ncs_dm_v6_ip_address %></td>
+ <td><%= row.ncs_dm_v6_ip_network %></td>
+ <td><%= row.dr_ncs_dm_v6_ip_network %></td>
+ <td><%= row.ncs_dm_v4_ip_network %></td>
+ <td><%= row.dr_ncs_dm_v4_ip_network %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/mappedServicePort.ejs b/admportal/views/ucpe/mappedServicePort.ejs
new file mode 100644
index 0000000..1c55eb5
--- /dev/null
+++ b/admportal/views/ucpe/mappedServicePort.ejs
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#mapped_service_port').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE Mapped Service Port</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="mapped_service_port" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*DEVICE_VENDOR_NAME</th>
+ <th>*DEVICE_MODEL</th>
+ <th>*SERVICE_PORT_NAME</th>
+ <th>*VNF_VENDOR_NAME</th>
+ <th>*VNF_MODEL</th>
+ <th>*PORT_NAME</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.device_vendor_name %></td>
+ <td><%= row.device_model %></td>
+ <td><%= row.service_port_name %></td>
+ <td><%= row.vnf_vendor_name %></td>
+ <td><%= row.vnf_model %></td>
+ <td><%= row.port_name %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/mcapServers.ejs b/admportal/views/ucpe/mcapServers.ejs
new file mode 100644
index 0000000..a51abd0
--- /dev/null
+++ b/admportal/views/ucpe/mcapServers.ejs
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#mcap_servers').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE MCAP Servers</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="mcap_servers" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*CUSTOMER_NAME</th>
+ <th>*MCAP_IP_ADDRESS</th>
+ <th>*MCAP_POLLER_IP_ADDRESS</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.customer_name %></td>
+ <td><%= row.mcap_ip_address %></td>
+ <td><%= row.mcap_poller_ip_address %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/ncsCredentials.ejs b/admportal/views/ucpe/ncsCredentials.ejs
new file mode 100644
index 0000000..f860b07
--- /dev/null
+++ b/admportal/views/ucpe/ncsCredentials.ejs
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#ncs_server_credentials').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>NCS Server Credentials</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+ <% if(priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_ncs_credentials">
+ Add NCS Credentials
+ </button>
+ </div>
+ <% } %>
+
+ <table id="ncs_server_credentials" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*Customer Name</th>
+ <th>NCS Username</th>
+ <th>NCS Password</th>
+ <% if(priv == 'A'){ %>
+ <th>Action</th>
+ <% } %>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.customer_name %></td>
+ <td><%= row.ncs_username %></td>
+ <td>*****</td>
+ <% if(priv == 'A') { %>
+ <td>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="updateNcsCredentials('<%= row.customer_name %>','<%= row.ncs_username %>','<%= row.ncs_password %>');">Update</button>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="deleteNcsCredentials('<%= row.customer_name %>');">Delete</button>
+ </td>
+ <% } %>
+
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<% include ../partials/ncs_credentials %>
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+<script type="text/javascript">
+function submitNcsCredentials(form)
+{
+ var errorMsg='';
+ var customer_name = '';
+ var ncs_username = '';
+ var ncs_password = '';
+ var confirm_ncs_password = '';
+
+ if ( form.name == 'addForm' )
+ {
+ customer_name = form.nf_customer_name;
+ ncs_username = form.nf_ncs_username;
+ ncs_password = form.nf_ncs_password;
+ confirm_ncs_password = form.nf_confirm_ncs_password;
+
+ if ( (customer_name.value == null) || (customer_name.value == "") || isblank(customer_name.value) )
+ {
+ errorMsg += 'Customer Name is required.<br>';
+ }
+ if( errorMsg.length > 0 ) {
+ bootbox.alert(errorMsg);
+ return;
+ }
+ if ( ncs_password.value != confirm_ncs_password.value )
+ {
+ bootbox.alert('Passwords do not match.');
+ return;
+ }
+ }
+ else
+ {
+ customer_name = form.uf_customer_name;
+ ncs_username = form.uf_ncs_username;
+ ncs_password = form.uf_ncs_password;
+ confirm_ncs_password = form.uf_confirm_ncs_password;
+ if ( ncs_password.value != confirm_ncs_password.value )
+ {
+ bootbox.alert('Passwords do not match.');
+ return;
+ }
+ }
+ form.submit();
+}
+
+function updateNcsCredentials(customer_name,ncs_username,ncs_password) {
+
+ document.getElementById('uf_customer_name').value=customer_name;
+ document.getElementById('uf_ncs_username').value=ncs_username;
+ document.getElementById('uf_ncs_password').value=ncs_password;
+
+ $('#update_ncs_credentials').modal('show');
+}
+
+function deleteNcsCredentials(customer_name) {
+
+ bootbox.confirm({
+ message: "Are you sure you want to delete NCS Credentials [ " + customer_name + " ]",
+ callback: function(result) {
+ if ( result )
+ {
+ location.assign("/ucpe/deleteNcsCredentials?customer_name=" + customer_name);
+ }
+ return;
+ },
+ buttons: {
+ cancel: {
+ label: "Cancel"
+ },
+ confirm: {
+ label: "Yes"
+ }
+ }
+ });
+}
+
+</script>
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/nmInterfaces.ejs b/admportal/views/ucpe/nmInterfaces.ejs
new file mode 100644
index 0000000..50b15c4
--- /dev/null
+++ b/admportal/views/ucpe/nmInterfaces.ejs
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#nm_interfaces').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE NM Interfaces</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="nm_interfaces" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*DEVICE_VENDOR_NAME</th>
+ <th>*DEVICE_MODEL</th>
+ <th>NM_VLAN_NUMBER</th>
+ <th>DEVICE_MANAGER_NM_LAN_INTERFACE</th>
+ <th>SWITCH_MANAGER_NM_LAN_INTERFACE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.device_vendor_name %></td>
+ <td><%= row.device_model %></td>
+ <td><%= row.nm_lan_vlan_number %></td>
+ <td><%= row.device_manager_nm_lan_interface %></td>
+ <td><%= row.switch_manager_nm_lan_interface %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/phsCredentials.ejs b/admportal/views/ucpe/phsCredentials.ejs
new file mode 100644
index 0000000..508b5a2
--- /dev/null
+++ b/admportal/views/ucpe/phsCredentials.ejs
@@ -0,0 +1,202 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#phs_server_credentials').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>PHS Server Credentials</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+ <% if(priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_phs_credentials">
+ Add PHS Credentials
+ </button>
+ </div>
+ <% } %>
+
+ <table id="phs_server_credentials" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*Device Vendor Name</th>
+ <th>*Customer Name</th>
+ <th>*IP Addresses</th>
+ <th>PHS Username</th>
+ <th>PHS Password</th>
+ <% if(priv == 'A'){ %>
+ <th>Action</th>
+ <% } %>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.device_vendor_name %></td>
+ <td><%= row.customer_name %></td>
+ <td><%= row.ip_addresses %></td>
+ <td><%= row.phs_username %></td>
+ <td>*****</td>
+ <% if(priv == 'A') { %>
+ <td>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="updatePhsCredentials('<%=row.device_vendor_name %>','<%= row.customer_name %>','<%= row.ip_addresses %>','<%= row.phs_username %>','<%= row.phs_password %>');">Update</button>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="deletePhsCredentials('<%= row.device_vendor_name %>', '<%= row.customer_name %>', '<%= row.ip_addresses %>' );">Delete</button>
+ </td>
+ <% } %>
+
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<% include ../partials/phs_credentials %>
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+<script type="text/javascript">
+function submitPhsCredentials(form)
+{
+ var errorMsg='';
+ var device_vendor_name = '';
+ var customer_name = '';
+ var ip_addresses = '';
+ var phs_username = '';
+ var phs_password = '';
+ var confirm_phs_password = '';
+
+ if ( form.name == 'addForm' )
+ {
+ device_vendor_name = form.nf_device_vendor_name;
+ customer_name = form.nf_customer_name;
+ ip_addresses = form.nf_ip_addresses;
+ phs_username = form.nf_phs_username;
+ phs_password = form.nf_phs_password;
+ confirm_phs_password = form.nf_confirm_phs_password;
+
+ if ( (device_vendor_name.value == null) || (device_vendor_name.value == "") || isblank(device_vendor_name.value) )
+ {
+ errorMsg += 'Device Vendor Name is required.<br>';
+ }
+ if ( (customer_name.value == null) || (customer_name.value == "") || isblank(customer_name.value) )
+ {
+ errorMsg += 'Customer Name is required.<br>';
+ }
+ if ( (ip_addresses.value == null) || (ip_addresses.value == "") || isblank(ip_addresses.value) ){
+ errorMsg += 'IP Addresses is required.<br>';
+ }
+ if( errorMsg.length > 0 ) {
+ bootbox.alert(errorMsg);
+ return;
+ }
+
+ if ( phs_password.value != confirm_phs_password.value )
+ {
+ bootbox.alert('Passwords do not match.');
+ return;
+ }
+ }
+ else
+ {
+ device_vendor_name = form.uf_device_vendor_name;
+ customer_name = form.uf_customer_name;
+ ip_addresses = form.uf_ip_addresses;
+ phs_username = form.uf_phs_username;
+ phs_password = form.uf_phs_password;
+ confirm_phs_password = form.uf_confirm_phs_password;
+
+ if ( phs_password.value != confirm_phs_password.value )
+ {
+ bootbox.alert('Passwords do not match.');
+ return;
+ }
+ }
+ form.submit();
+}
+
+function updatePhsCredentials(device_vendor_name,customer_name,ip_addresses,phs_username,phs_password) {
+
+ document.getElementById('uf_device_vendor_name').value=device_vendor_name;
+ document.getElementById('uf_customer_name').value=customer_name;
+ document.getElementById('uf_ip_addresses').value=ip_addresses;
+ document.getElementById('uf_phs_username').value=phs_username;
+ document.getElementById('uf_phs_password').value=phs_password;
+
+ $('#update_phs_credentials').modal('show');
+}
+
+function deletePhsCredentials(device_vendor_name, customer_name, ip_addresses) {
+
+ bootbox.confirm({
+ message: "Are you sure you want to delete PHS Credentials " + device_vendor_name + "|" + customer_name + "|" + ip_addresses,
+ callback: function(result) {
+ if ( result )
+ {
+ location.assign("/ucpe/deletePhsCredentials?device_vendor_name=" + device_vendor_name
+ + "&customer_name=" + customer_name + "&ip_addresses=" + ip_addresses);
+ }
+ return;
+ },
+ buttons: {
+ cancel: {
+ label: "Cancel"
+ },
+ confirm: {
+ label: "Yes"
+ }
+ }
+ });
+}
+
+</script>
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/phsServers.ejs b/admportal/views/ucpe/phsServers.ejs
new file mode 100644
index 0000000..1f28dbb
--- /dev/null
+++ b/admportal/views/ucpe/phsServers.ejs
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#phs_servers').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE PHS Servers</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="phs_servers" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*DEVICE_VENDOR_NAME</th>
+ <th>*CUSTOMER_NAME</th>
+ <th>IP_ADDRESSES</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.device_vendor_name %></td>
+ <td><%= row.customer_name %></td>
+ <td><%= row.ip_addresses %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/physicalDeviceLogins.ejs b/admportal/views/ucpe/physicalDeviceLogins.ejs
new file mode 100644
index 0000000..0dd78d4
--- /dev/null
+++ b/admportal/views/ucpe/physicalDeviceLogins.ejs
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#device_logins').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE Physical Device Logins</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="device_logins" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*CUSTOMER_NAME</th>
+ <th>*DEVICE_VENDOR_NAME</th>
+ <th>*DEVICE_MODEL</th>
+ <th>*DEVICE_MANAGER_HASHED_PASSWORD</th>
+ <th>*SWITCH_MANAGER_HASHED_PASSWORD</th>
+ <th>*OS_HASHED_PASSWORD</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.customer_name %></td>
+ <td><%= row.device_vendor_name %></td>
+ <td><%= row.device_model %></td>
+ <td><%= row.device_manager_hashed_password %></td>
+ <td><%= row.switch_manager_hashed_password %></td>
+ <td><%= row.os_hashed_password %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/referenceData.ejs b/admportal/views/ucpe/referenceData.ejs
new file mode 100644
index 0000000..6196c46
--- /dev/null
+++ b/admportal/views/ucpe/referenceData.ejs
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#reference_data').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE Reference Data</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+ <table id="reference_data" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>REFERENCE_ID</th>
+ <th>STATUS</th>
+ <th>FILENAME</th>
+ <th>ATTUID</th>
+ <th>DATE</th>
+ <% if(priv == 'A'){ %>
+ <th>Action</th>
+ <% } %>
+ </tr>
+ </thead>
+ <tbody>
+ <% var i=0; retData.forEach( function(rowObj) { %>
+ <tr>
+ <td><%= rowObj.row.reference_id %></td>
+ <td><%= rowObj.row.status %></td>
+ <td>
+ <a data-toggle="collapse"
+ href="#collapseExample<%= i %>" aria-expanded="false"
+ aria-controls="collapseExample"><%= rowObj.row.filename %>
+ </a>
+ <div class="collapse" id="collapseExample<%= i %>">
+ <div class="well">
+ <pre><%= rowObj.filecontent %></pre>
+ </div>
+ </div>
+ </td>
+ <td><%= rowObj.row.attuid %></td>
+ <td><%= rowObj.row.ts %></td>
+ <% if(priv == 'A' ) { %>
+ <td>
+ <% if ( rowObj.row.status == 'pending' ) { %>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="importReferenceData('<%= rowObj.row.reference_id %>','<%= rowObj.row.status %>','<%= rowObj.row.filename %>','<%= rowObj.row.ts %>');">Import</button>
+ <% } %>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="deleteReferenceData('<%= rowObj.row.reference_id %>','<%= rowObj.row.filename %>');">Delete</button>
+ </td>
+ <% } %>
+ </tr>
+ <% i++; }); %>
+ </tbody>
+ </table>
+
+ <% if(priv == 'A'){ %>
+ <div class="actions" style="padding:0px 25px;">
+ <form method="POST" action="/ucpe/uploadReferenceData" enctype="multipart/form-data">
+ <div class="form-group">
+ <label for="dest">File input</label>
+ <input name="filename" type="file" id="dest">
+ <p class="help-block">Choose a file to upload.</p>
+ </div>
+ <button type="button" class="btn btn-default"
+ onclick="uploadFile(this.form);">Upload File</button>
+ </form>
+ </div>
+ <% } %>
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+<script type="text/javascript">
+
+function getVnfData(vnf_name,vnf_type,svc_request_id)
+{
+ location.assign("/mobility/viewVnfData?vnf_name=" + vnf_name + "&vnf_type=" + vnf_type );
+ return;
+}
+function importReferenceData(reference_id,status,filename,ts)
+{
+ var alertMessage = '';
+ if ( status != 'pending' )
+ {
+ bootbox.alert("Upload Status must be in 'pending' state.");
+ return;
+ }
+ if ( filename.substring(0,11) == 'ucpedevice_' ){
+ alertMessage = "Are you sure you want to import file:" + filename + " and replace the UCPE_MAPPED_SERVICE_PORT and UCPE_SERVICE_PORT tables?";
+ }else if ( filename.substring(0,14) == 'ucpeapilogins_' ){
+ alertMessage = "Are you sure you want to import file:" + filename + " and replace the UCPE_VNF_LOGINS, UCPE_PHYSICAL_DEVICE_LOGINS and UCPE_API_LOGINS tables?";
+ }else if ( filename.substring(0,17) == 'ucpenminterfaces_' ){
+ alertMessage = "Are you sure you want to import file:" + filename + " and replace the UCPE_VNF_NM_INTERFACES and UCPE_NM_INTERFACES tables?";
+ }else if ( filename.substring(0,15) == 'ucpephsservers_' ){
+ alertMessage = "Are you sure you want to import file:" + filename + " and replace the UCPE_PHS_SERVERS table?";
+ }else if ( filename.substring(0,15) == 'ucpencsservers_' ){
+ alertMessage = "Are you sure you want to import file:" + filename + " and replace the UCPE_CUSTOMER_NCS_SERVERS table?";
+ }else if ( filename.substring(0,15) == 'ucpevnfcatalog_' ){
+ alertMessage = "Are you sure you want to import file:" + filename + " and replace the UCPE_VNF_MODELS, UCPE_VNF_MODEL_SOFTWARE and UCPE_VNF_MODEL_FEATURES tables?";
+ }else if ( filename.substring(0,16) == 'ucpemcapservers_' ){
+ alertMessage = "Are you sure you want to import file:" + filename + " and replace the UCPE_MCAP_SERVERS table?";
+ }else if ( filename.substring(0,23) == 'ucpechainingtopologies_' ){
+ alertMessage = "Are you sure you want to import file:" + filename + " and replace the UCPE_CHAINING_TOPOLOGIES table?";
+ }else if ( filename.substring(0,16) == 'ucpevnfportinfo_' ){
+ alertMessage = "Are you sure you want to import file:" + filename + " and replace the UCPE_VNF_PORT and UCPE_MAP_TO_DEVICE tables?";
+ } else {
+ bootbox.alert('Invalid Filename in database: ' + filename);
+ return;
+ }
+ bootbox.confirm({
+ message: alertMessage,
+ callback: function(result) {
+ if ( result )
+ {
+ if ( filename.substring(0,11) == 'ucpedevice_' ){
+ location.assign("/ucpe/importUcpeDevices?id=" + reference_id + "&filename=" + filename + "&status=" + status);
+ }else if ( filename.substring(0,14) == 'ucpeapilogins_' ){
+ location.assign("/ucpe/importApiLogins?id=" + reference_id + "&filename=" + filename + "&status=" + status);
+ }else if ( filename.substring(0,17) == 'ucpenminterfaces_' ){
+ location.assign("/ucpe/importNmInterfaces?id=" + reference_id + "&filename=" + filename + "&status=" + status);
+ }else if ( filename.substring(0,15) == 'ucpephsservers_' ){
+ location.assign("/ucpe/importPhsServers?id=" + reference_id + "&filename=" + filename + "&status=" + status);
+ }else if ( filename.substring(0,15) == 'ucpencsservers_' ){
+ location.assign("/ucpe/importNcsServers?id=" + reference_id + "&filename=" + filename + "&status=" + status);
+ }else if ( filename.substring(0,15) == 'ucpevnfcatalog_' ){
+ location.assign("/ucpe/importVnfCatalog?id=" + reference_id + "&filename=" + filename + "&status=" + status);
+ }else if ( filename.substring(0,16) == 'ucpemcapservers_' ){
+ location.assign("/ucpe/importMcapServers?id=" + reference_id + "&filename=" + filename + "&status=" + status);
+ }else if ( filename.substring(0,23) == 'ucpechainingtopologies_' ){
+ location.assign("/ucpe/importChainTopo?id=" + reference_id + "&filename=" + filename + "&status=" + status);
+ }else if ( filename.substring(0,16) == 'ucpevnfportinfo_' ){
+ location.assign("/ucpe/importVnfPortInfo?id=" + reference_id + "&filename=" + filename + "&status=" + status);
+ } else {
+ bootbox.alert('Invalid Filename: ' + filename);
+ return;
+ }
+ }
+ return;
+ },
+ buttons: {
+ cancel: {
+ label: "Cancel"
+ },
+ confirm: {
+ label: "Yes"
+ }
+ }
+ });
+}
+
+function deleteReferenceData(reference_id,filename)
+{
+
+ bootbox.confirm({
+ message: "Are you sure you want to delete uploaded file [" + filename + "]? (This action will not effect the database.)",
+ callback: function(result) {
+ if ( result )
+ {
+ location.assign("/ucpe/deleteReferenceData?id=" + reference_id + "&filename=" + filename);
+ }
+ return;
+ },
+ buttons: {
+ cancel: {
+ label: "Cancel"
+ },
+ confirm: {
+ label: "Yes"
+ }
+ }
+ });
+}
+
+</script>
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/serviceManagerCredentials.ejs b/admportal/views/ucpe/serviceManagerCredentials.ejs
new file mode 100644
index 0000000..9e156f2
--- /dev/null
+++ b/admportal/views/ucpe/serviceManagerCredentials.ejs
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#service_manager_credentials').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>Service Manager Credentials</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+ <% if(priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_service_manager_credentials">
+ Add Service Manager Credentials
+ </button>
+ </div>
+ <% } %>
+
+ <table id="service_manager_credentials" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>Service Manager Username</th>
+ <th>Service Manager Password</th>
+ <% if(priv == 'A'){ %>
+ <th>Action</th>
+ <% } %>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.service_manager_username %></td>
+ <td>*****</td>
+ <% if(priv == 'A') { %>
+ <td>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="updateServiceManagerCredentials('<%=row.service_manager_username %>','<%= row.service_manager_password %>');">Update</button>
+ <button type="button" class="btn btn-default btn-xs"
+ onclick="deleteServiceManagerCredentials('<%= row.service_manager_username %>', '<%= row.service_manager_password %>');">Delete</button>
+ </td>
+ <% } %>
+
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<% include ../partials/service_manager_credentials %>
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+<script type="text/javascript">
+function submitServiceManagerCredentials(form)
+{
+ var errorMsg='';
+ var service_manager_username = '';
+ var service_manager_password = '';
+ var confirm_service_manager_password = '';
+
+ if ( form.name == 'addForm' )
+ {
+ service_manager_username = form.nf_service_manager_username;
+ service_manager_password = form.nf_service_manager_password;
+ confirm_service_manager_password = form.nf_confirm_service_manager_password;
+
+ if ( service_manager_password.value != confirm_service_manager_password.value )
+ {
+ bootbox.alert('Passwords do not match.');
+ return;
+ }
+ }
+ else
+ {
+ service_manager_username = form.uf_service_manager_username;
+ service_manager_password = form.uf_service_manager_password;
+ confirm_service_manager_password = form.uf_confirm_service_manager_password;
+
+ if ( service_manager_password.value != confirm_service_manager_password.value )
+ {
+ bootbox.alert('Passwords do not match.');
+ return;
+ }
+ }
+ form.submit();
+}
+
+function updateServiceManagerCredentials(service_manager_username,service_manager_password) {
+
+ document.getElementById('uf_service_manager_username').value=service_manager_username;
+ document.getElementById('uf_service_manager_password').value=service_manager_password;
+
+ $('#update_service_manager_credentials').modal('show');
+}
+
+function deleteServiceManagerCredentials(service_manager_username, service_manager_password) {
+
+ var url_string = encodeURI("/ucpe/deleteServiceManagerCredentials?service_manager_username=" + service_manager_username
+ + "&service_manager_password=" + service_manager_password);
+
+
+ bootbox.confirm({
+ message: "Are you sure you want to delete Service Manager Credentials? " + service_manager_username,
+ callback: function(result) {
+ if ( result )
+ {
+ location.assign(url_string);
+ }
+ return;
+ },
+ buttons: {
+ cancel: {
+ label: "Cancel"
+ },
+ confirm: {
+ label: "Yes"
+ }
+ }
+ });
+}
+
+</script>
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/servicePort.ejs b/admportal/views/ucpe/servicePort.ejs
new file mode 100644
index 0000000..8053713
--- /dev/null
+++ b/admportal/views/ucpe/servicePort.ejs
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#service_port').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE Service Port</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+ <table id="service_port" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*DEVICE_VENDOR_NAME</th>
+ <th>*DEVICE_MODEL</th>
+ <th>*SERVICE_PORT_NAME</th>
+ <th>PHYSICAL_PORT_NAME</th>
+ <th>PHYSICAL_SPEED</th>
+ <th>PHYSICAL_SPEED_UNITS</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.device_vendor_name %></td>
+ <td><%= row.device_model %></td>
+ <td><%= row.service_port_name %></td>
+ <td><%= row.physical_port_name %></td>
+ <td><%= row.physical_speed %></td>
+ <td><%= row.physical_speed_units %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/vnfLogins.ejs b/admportal/views/ucpe/vnfLogins.ejs
new file mode 100644
index 0000000..f5e8873
--- /dev/null
+++ b/admportal/views/ucpe/vnfLogins.ejs
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#vnf_logins').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE VNF Logins</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="vnf_logins" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*CUSTOMER_NAME</th>
+ <th>*VNF_VENDOR_NAME</th>
+ <th>*VNF_MODEL</th>
+ <th>HASHED_PASSWORD</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.customer_name %></td>
+ <td><%= row.vnf_vendor_name %></td>
+ <td><%= row.vnf_model %></td>
+ <td><%= row.hashed_password %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/vnfMapDevice.ejs b/admportal/views/ucpe/vnfMapDevice.ejs
new file mode 100644
index 0000000..fbfa2ba
--- /dev/null
+++ b/admportal/views/ucpe/vnfMapDevice.ejs
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#vnf_map_to_device').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE VNF Map to Device</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="vnf_map_to_device" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*VNF_VENDOR_NAME</th>
+ <th>*VNF_MODEL</th>
+ <th>*SERVICE_PORT_NAME</th>
+ <th>*DEVICE_VENDOR_NAME</th>
+ <th>*DEVICE_MODEL</th>
+ <th>*MAPPED_SERVICE_PORT_NAME</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.vnf_vendor_name %></td>
+ <td><%= row.vnf_model %></td>
+ <td><%= row.service_port_name %></td>
+ <td><%= row.device_vendor_name %></td>
+ <td><%= row.device_model %></td>
+ <td><%= row.mapped_service_port_name %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/vnfModelFeatures.ejs b/admportal/views/ucpe/vnfModelFeatures.ejs
new file mode 100644
index 0000000..4015179
--- /dev/null
+++ b/admportal/views/ucpe/vnfModelFeatures.ejs
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#vnf_model_features').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE VNF Model Features</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="vnf_model_features" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*ATT PART NUMBER</th>
+ <th>*VNF_FEATURE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.att_part_number %></td>
+ <td><%= row.vnf_feature %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/vnfModelSoftware.ejs b/admportal/views/ucpe/vnfModelSoftware.ejs
new file mode 100644
index 0000000..f82b5b8
--- /dev/null
+++ b/admportal/views/ucpe/vnfModelSoftware.ejs
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#vnf_model_software').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE VNF Model Software</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="vnf_model_software" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*ATT PART NUMBER</th>
+ <th>*SOFTWARE_VERSION</th>
+ <th>SOFTWARE_VERSION_STATE</th>
+ <th>SOFTWARE_FILENAME</th>
+ <th>SOFTWARE_FILETYPE</th>
+ <th>FILE_MD5_VALUE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.att_part_number %></td>
+ <td><%= row.software_version %></td>
+ <td><%= row.software_version_state %></td>
+ <td><%= row.software_filename %></td>
+ <td><%= row.software_filetype %></td>
+ <td><%= row.file_md5_value %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/vnfModels.ejs b/admportal/views/ucpe/vnfModels.ejs
new file mode 100644
index 0000000..df71306
--- /dev/null
+++ b/admportal/views/ucpe/vnfModels.ejs
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#vnf_models').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE VNF Models</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="vnf_models" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*ATT PART NUMBER</th>
+ <th>VNF_TYPE</th>
+ <th>VENDOR_NAME</th>
+ <th>VENDOR_PART_NUMBER</th>
+ <th>VENDOR_MODEL</th>
+ <th>VCPU_DEFAULT</th>
+ <th>VCPU_MIN</th>
+ <th>VCPU_MAX</th>
+ <th>VMEMORY_DEFAULT</th>
+ <th>VMEMORY_UNITS</th>
+ <th>VMEMORY_MIN</th>
+ <th>VMEMORY_MAX</th>
+ <th>VDISK_DEFAULT</th>
+ <th>VDISK_UNITS</th>
+ <th>VDISK_MIN</th>
+ <th>VDISK_MAX</th>
+ <th>SPEED_UNITS</th>
+ <th>SPEED</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.att_part_number %></td>
+ <td><%= row.vnf_type %></td>
+ <td><%= row.vendor_name %></td>
+ <td><%= row.vendor_part_number %></td>
+ <td><%= row.vendor_model %></td>
+ <td><%= row.vcpu_default %></td>
+ <td><%= row.vcpu_min %></td>
+ <td><%= row.vcpu_max %></td>
+ <td><%= row.vmemory_default %></td>
+ <td><%= row.vmemory_units %></td>
+ <td><%= row.vmemory_min %></td>
+ <td><%= row.vmemory_max %></td>
+ <td><%= row.vdisk_default %></td>
+ <td><%= row.vdisk_units %></td>
+ <td><%= row.vdisk_min %></td>
+ <td><%= row.vdisk_max %></td>
+ <td><%= row.speed_units %></td>
+ <td><%= row.speed %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/vnfNmInterfaces.ejs b/admportal/views/ucpe/vnfNmInterfaces.ejs
new file mode 100644
index 0000000..3430f6b
--- /dev/null
+++ b/admportal/views/ucpe/vnfNmInterfaces.ejs
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#vnf_nm_interfaces').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE VNF NM Interfaces</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="vnf_nm_interfaces" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*DEVICE_VENDOR_NAME</th>
+ <th>*DEVICE_MODEL</th>
+ <th>*VNF_VENDOR_NAME</th>
+ <th>*VNF_MODEL</th>
+ <th>NM_LAN_INTERFACE</th>
+ <th>NM_LOOPBACK_INTERFACE</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.device_vendor_name %></td>
+ <td><%= row.device_model %></td>
+ <td><%= row.vnf_vendor_name %></td>
+ <td><%= row.vnf_model %></td>
+ <td><%= row.nm_lan_interface %></td>
+ <td><%= row.nm_loopback_interface %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+
diff --git a/admportal/views/ucpe/vnfPorts.ejs b/admportal/views/ucpe/vnfPorts.ejs
new file mode 100644
index 0000000..834eada
--- /dev/null
+++ b/admportal/views/ucpe/vnfPorts.ejs
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <% include ../partials/head %>
+ <% include ../partials/header %>
+ <script type="text/javascript" src="/javascripts/admportal.js" async></script>
+ <title>SDN-C AdminPortal</title>
+<script class="init">
+ $(document).ready(function() {
+ $('#vnf_ports').DataTable( {
+ "order": [[ 0, "asc" ]]
+ } );
+} );
+</script>
+
+</head>
+<body>
+
+<div class="well well-sm">
+<h3>uCPE VNF Ports</h3>
+</div>
+
+<% if ( typeof result != 'undefined' ) {
+ if (result.code.length > 0) {
+ if ( result.code == 'success' ) { %>
+ <div class='alert alert-success' role='alert'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } else { %>
+ <div class='alert alert-danger' role='danger'>
+ <%
+ for ( x in result.msg ){ %>
+ <div><%= result.msg[x] %></div>
+ <% } %>
+ </div>
+ <% } %>
+ <% } %>
+<% } %>
+
+<% if( typeof privilege != 'undefined'){
+ var priv = privilege.privilege;
+} else {
+ var priv = 'A';
+} %>
+
+
+<div class="container-fluid">
+
+<!--
+ <% if (priv == 'A'){ %>
+ <div class="actions" style="padding:15px 0px;">
+ <button class="btn btn-primary" data-toggle="modal" data-target="#add_vnf_profile">
+ Add VNF Profile
+ </button>
+ </div>
+ <% } %>
+-->
+
+ <table id="vnf_ports" class="table table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>*VNF_VENDOR_NAME</th>
+ <th>*VNF_MODEL</th>
+ <th>*SERVICE_PORT_NAME</th>
+ <th>PHYSICAL_PORT_NAME</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% rows.forEach( function(row) { %>
+ <tr>
+ <td><%= row.vnf_vendor_name %></td>
+ <td><%= row.vnf_model %></td>
+ <td><%= row.service_port_name %></td>
+ <td><%= row.physical_port_name %></td>
+ </tr>
+ <% }); %>
+ </tbody>
+ </table>
+
+</div>
+
+<footer>
+ <% include ../partials/footer %>
+</footer>
+
+
+</body>
+</html>
+