248 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 | |
|         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | |
| <html xmlns="http://www.w3.org/1999/xhtml">
 | |
| <head>
 | |
|   <meta http-equiv="Content-type" content="text/html; charset=[% settings.charset | html_entity %]" />
 | |
|   <link rel="shortcut icon" href="[% uri_base | none %]/images/favicon.ico" type="image/x-icon">
 | |
|   <link rel="icon" href="[% uri_base | none %]/images/favicon.ico" type="image/x-icon">
 | |
|   <title>Netdisco</title>
 | |
| 
 | |
|   <!-- HTML5 shim, for IE6-8 support of HTML elements -->
 | |
|   <!--[if lt IE 9]>
 | |
|     <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
 | |
|   <![endif]-->
 | |
| 
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/jquery-latest.min.js"></script>
 | |
| <!--  <script type="text/javascript" src="http://code.jquery.com/jquery-migrate-1.1.1.js"></script> -->
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/jquery-ui.custom.min.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/jquery-history.js"></script>
 | |
| <!--  <script type="text/javascript" src="[% uri_base | none %]/javascripts/jquery.cookie.js"></script> -->
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/jquery-deserialize.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/bootstrap.min.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/bootstrap2-toggle.min.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/underscore.min.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/jquery.qtip.min.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/d3-3.5.17.min.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/d3-force-network-chart.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/toastr.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/jquery.floatThead.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/daterangepicker.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/moment.min.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/jquery.dataTables.min.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/dataTables.bootstrap.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/dataTables.ip-address-detect.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/dataTables.ip-address-sort.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/jstree/jstree.min.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/he.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/natural.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/portsort.js"></script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/versionsort.js"></script>
 | |
| 
 | |
|   <script type="text/javascript">
 | |
|     var uri_base = '[% uri_base | none %]';
 | |
|     var nd_check_userlog = '[% settings.check_userlog | html_entity %]';
 | |
|   </script>
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/netdisco.js"></script>
 | |
| 
 | |
|   [% IF user_has_role('port_control') %]
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/javascripts/netdisco_portcontrol.js"></script>
 | |
|   [% END %]
 | |
| 
 | |
|   [% FOREACH add_js IN settings._additional_javascript %]
 | |
|   <script type="text/javascript" src="[% uri_base | none %]/plugin/[% add_js | none %]/[% add_js | none %].js"></script>
 | |
|   [% END %]
 | |
| 
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/bootstrap.min.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/bootstrap2-toggle.min.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/awesome-bootstrap-checkbox.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/jquery.qtip.min.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/smoothness/jquery-ui.custom.min.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/font-awesome.min.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/toastr.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/d3-force-network-chart.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/netdisco.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/bootstrap-tree.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/javascripts/jstree/themes/proton/style.min.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/daterangepicker-bs2.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/dataTables.bootstrap.css"/>
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/css/nd_print.css" media="print"/>
 | |
| 
 | |
|   [% FOREACH add_css IN settings._additional_css %]
 | |
|   <link rel="stylesheet" href="[% uri_base | none %]/plugin/[% add_css | none %]/[% add_css | none %].css"/>
 | |
|   [% END %]
 | |
| </head>
 | |
| 
 | |
| <body>
 | |
| <div class="navbar navbar-inverse navbar-fixed-top">
 | |
|   <div class="navbar-inner">
 | |
|     <div class="container">
 | |
|       <a class="brand" href="[% uri_for('') | none %]">Netdisco</a>
 | |
|       [% IF session.logged_in_user %]
 | |
|       <ul class="nav">
 | |
|         [% FOREACH ni IN settings._navbar_items %]
 | |
|         <li[% ' class="active"' IF vars.nav == ni.tag %]>
 | |
|           <a href="[% uri_for(ni.path) | none %]">[% ni.label | html_entity %]</a>
 | |
|         </li>
 | |
|         [% END %]
 | |
|         [% IF settings._reports.size %]
 | |
|         <li class="dropdown[% ' active' IF vars.nav == 'reports' %]">
 | |
|           <a href="#" class="dropdown-toggle" data-toggle="dropdown">Reports <b class="caret"></b></a>
 | |
|           <ul class="dropdown-menu">
 | |
|           [% FOREACH category IN settings._report_order %]
 | |
|             [% IF settings._reports_menu.$category.size %]
 | |
|             <li class="dropdown-submenu">
 | |
|             <a href="#">[% category | html_entity %]</a>
 | |
|               <ul class="dropdown-menu">
 | |
|               [% FOREACH item IN settings._reports_menu.$category %]
 | |
|                 [% NEXT IF settings._reports.$item.hidden %]
 | |
|                 <li><a href="[% uri_for('/report/' _ item) %]?firstsearch=on">[% settings._reports.$item.label | html_entity %]</a></li>
 | |
|               [% END %]
 | |
|               </ul>
 | |
|             </li>
 | |
|             [% END %]
 | |
|           [% END %]
 | |
|           </ul>
 | |
|         </li> <!-- /dropdown -->
 | |
|         [% END %]
 | |
|         [% IF user_has_role('admin') %]
 | |
|         <li class="dropdown[% ' active' IF vars.nav == 'admin' %]">
 | |
|           <a href="#" class="dropdown-toggle" data-toggle="dropdown">Admin <b class="caret"></b></a>
 | |
|           <ul class="dropdown-menu">
 | |
|           <li>
 | |
|             <form method="post" class="nd_inline-form" action="[% uri_for('/admin/discoverall') | none %]">
 | |
|               <button type="submit" class="btn btn-link nd_btn-link">Discover All</button>
 | |
|             </form>
 | |
|           </li>
 | |
|           <li>
 | |
|             <form method="post" class="nd_inline-form" action="[% uri_for('/admin/arpwalk') | none %]">
 | |
|               <button type="submit" class="btn btn-link nd_btn-link">Arpnip All</button>
 | |
|             </form>
 | |
|           </li>
 | |
|           <li>
 | |
|             <form method="post" class="nd_inline-form" action="[% uri_for('/admin/macwalk') | none %]">
 | |
|               <button type="submit" class="btn btn-link nd_btn-link">Macsuck All</button>
 | |
|             </form>
 | |
|           </li>
 | |
|           <li>
 | |
|             <form method="post" class="nd_inline-form" action="[% uri_for('/admin/nbtwalk') | none %]">
 | |
|               <button type="submit" class="btn btn-link nd_btn-link">NBTstat All</button>
 | |
|             </form>
 | |
|           </li>
 | |
|           <li>
 | |
|             <form method="post" class="nd_inline-form" action="[% uri_for('/admin/expire') | none %]">
 | |
|               <button type="submit" class="btn btn-link nd_btn-link">Run Expire Job</button>
 | |
|             </form>
 | |
|           </li>
 | |
|           <li>
 | |
|             <form method="post" class="nd_inline-form" action="[% uri_for('/admin/stats') | none %]">
 | |
|               <button type="submit" class="btn btn-link nd_btn-link">Update Statistics</button>
 | |
|             </form>
 | |
|           </li>
 | |
|           [% IF settings._admin_tasks.size %]
 | |
|             <li class="divider"></li>
 | |
|             [% FOREACH ai IN settings._admin_order %]
 | |
|               [% NEXT IF settings._admin_tasks.$ai.hidden %]
 | |
|               <li><a href="[% uri_for('/admin/' _ ai) %]">[% settings._admin_tasks.$ai.label | html_entity %]</a></li>
 | |
|             [% END %]
 | |
|           [% END %]
 | |
|           </ul>
 | |
|         </li> <!-- /dropdown -->
 | |
|         [% END %]
 | |
|       </ul>
 | |
|       <form class="navbar-search pull-left" method="get" action="[% uri_for('/search') | none %]">
 | |
|         <input placeholder="Find Anything" class="search-query span3"
 | |
|           id="nq" name="q" value="[% display_name | html_entity %]" type="search" autocomplete="off"/>
 | |
|         <input name="firstsearch" type="hidden" value="on">
 | |
|         <div class="btn-group nd_navbar-search-group">
 | |
|           <button class="btn btn-inverse nd_navbar-search-icon">
 | |
|             <span style="font-size: 18px;">
 | |
|               <i id="navsearchgo" class="icon-search"></i>
 | |
|             </span>
 | |
|           </button>
 | |
|           <button class="btn btn-inverse dropdown-toggle nd_navbar-search-caret" data-toggle="dropdown">
 | |
|             <span class="caret" style="border-top-color: #999; border-bottom-color: #999"></span>
 | |
|           </button>
 | |
|           <ul class="dropdown-menu">
 | |
|             <li><a class="nd_navsearchgo-specific" href="" data-tab="device">Search Devices</a></li>
 | |
|             <li><a class="nd_navsearchgo-specific" href="" data-tab="node">Search Nodes</a></li>
 | |
|             <li><a class="nd_navsearchgo-specific" href="" data-tab="vlan">Search VLANs</a></li>
 | |
|             <li><a class="nd_navsearchgo-specific" href="" data-tab="port">Search Ports</a></li>
 | |
|           </ul>
 | |
|         </div>
 | |
|       </form>
 | |
|       [% IF settings.tenant_databases.size %]
 | |
|       [% SET tenant = vars.tenant %]
 | |
|       <ul class="nav pull-right">
 | |
|         <li class="dropdown">
 | |
|           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | |
|             <i class="icon-home text-success"></i>
 | |
|              [% settings.tenant_data.$tenant.displayname || 'Default' | html_entity %]
 | |
|             <b class="caret"></b>
 | |
|           </a>
 | |
|           <ul class="dropdown-menu">
 | |
|             [% FOREACH t IN settings.tenant_tags %]
 | |
|             [% NEXT IF tenant AND t == tenant %]
 | |
|             [% NEXT IF NOT tenant and t == 'netdisco' %]
 | |
|             <li><a class="nd_navtenant" href=""
 | |
|               data-currenttenant="[% settings.tenant_data.$tenant.path || settings.tenant_data.netdisco.path %]"
 | |
|               data-tenantpath="[% settings.tenant_data.$t.path %]"
 | |
|               data-tenant="[% t %]">[% settings.tenant_data.$t.displayname | html_entity %]</a></li>
 | |
|             [% END %]
 | |
|           </ul>
 | |
|         </li> <!-- /dropdown -->
 | |
|       </ul>
 | |
|       [% END %]
 | |
|       <ul class="nav pull-right">
 | |
|         <li class="dropdown">
 | |
|           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | |
|           [% IF user_has_role('admin') %]
 | |
|             <i class="icon-user text-error"></i>
 | |
|           [% ELSIF user_has_role('port_control') %]
 | |
|             <i class="icon-user text-warning"></i>
 | |
|           [% ELSE %]
 | |
|             <i class="icon-user"></i>
 | |
|           [% END %] 
 | |
|             [% session.logged_in_fullname || session.logged_in_user | html_entity %] <b class="caret"></b>
 | |
|           </a>
 | |
|           <ul class="dropdown-menu">
 | |
|           [% IF NOT ( settings.no_auth OR user_has_role('ldap') OR user_has_role('radius') ) %]
 | |
|             <li><a href="[% uri_for('/password') | none %]">Change Password</a></li>
 | |
|           [% END %]
 | |
|             <li><a href="[% uri_for('/swagger-ui') | none %]" target="_blank">👉 Browse the API</a></li>
 | |
|           [% IF user_has_role('admin') %]
 | |
|             <li><a href="https://github.com/netdisco/netdisco/wiki/Configuration" target="_blank">⚙️ Configuration Reference</a></li>
 | |
|             <li><a href="https://github.com/sponsors/netdisco" target="_blank">💜 Become a Sponsor</a></li>
 | |
|           [% END %]
 | |
|           [% IF NOT settings.no_auth %]
 | |
|             <li><a href="[% uri_for('/logout') | none %]">Log Out</a></li>
 | |
|           [% END %]
 | |
|           </ul>
 | |
|         </li> <!-- /dropdown -->
 | |
|       </ul>
 | |
|       [% END %]
 | |
|     </div>
 | |
|   </div>
 | |
| </div>
 | |
| 
 | |
| [% content | none %]
 | |
| 
 | |
| <script type="text/javascript">
 | |
| [%+ INCLUDE 'js/common.js' -%]
 | |
| 
 | |
|   // tenant change
 | |
|   $('.nd_navtenant').click(function(event) {
 | |
|     event.preventDefault();
 | |
|     var url = new URL(window.History.getState()['url']);
 | |
|     var newpath = url.pathname;
 | |
|     newpath = newpath.replace($(this).data('currenttenant'), "");
 | |
|     newpath = newpath.replace("[% settings.path %]", "/");
 | |
|     newpath = newpath.replace("//", "/");
 | |
|     newpath = $(this).data('tenantpath').concat(newpath, url.search);
 | |
|     window.location = newpath;
 | |
|   });
 | |
| 
 | |
| </script>
 | |
| 
 | |
| </body>
 | |
| </html>
 |