<div class="container">
<div class="row nd_hero-row">
<div class="span8 offset2">
[% IF params.login_failed %]
<div class="alert alert-error fade in">
<a class="close" data-dismiss="alert">×</a>
Incorrect username or password, please try again.
</div>
[% END %]
[% IF params.logout %]
<div class="alert fade in">
<a class="close" data-dismiss="alert">×</a>
You are now logged out.
</div>
[% END %]
[% IF params.nosuchdevice %]
<div class="alert fade in">
<a class="close" data-dismiss="alert">×</a>
Sorry, no such device is known.
</div>
[% END %]
[% IF vars.notfound %]
<div class="alert fade in">
<a class="close" data-dismiss="alert">×</a>
Sorry, page not found.
<a href="https://github.com/netdisco/netdisco/issues/new" target="_blank"><i class="icon-bug"></i> Report a Bug?</a>
</div>
[% END %]
[% IF settings.login_banner_message AND NOT session.logged_in_user %]
<div class="alert alert-info fade in">
<a class="close" data-dismiss="alert">×</a> [% settings.login_banner_message | none %]
</div>
[% END %]
[% IF settings.suggest_guest AND NOT session.logged_in_user %]
<div class="alert alert-info fade in">
<a class="close" data-dismiss="alert">×</a>
Guest access is available by entering username "guest" and password "guest".
</div>
[% END %]
<div class="hero-unit">
<h2>Welcome to Netdisco</h2>
<small>Netdisco is an Open Source management tool designed for network administrators.</small>
[% IF NOT session.logged_in_user %]
<form class="nd_login-form" method="post" action="[% uri_for('/login') | none %]">
<div class="form-horizontal">
<input id='loginuser' placeholder="Username" class="span2" name="username" type="text" required="required"/>
<input placeholder="Password" class="span2" name="password" type="password" required="required"/>
<button type="submit" class="btn btn-info">Log In</button>
[% IF settings.login_logo %]
<img src="[% settings.login_logo | none %]" alt="Login Logo" />
[% END %]
</div>
[% IF params.return_url %]
<input type="hidden" name="return_url" value="[% params.return_url | html_entity %]"/>
[% END %]
</form>
[% ELSE %]
<p></p> <p></p>
<form class="" method="get" action="[% uri_for('/search') | none %]">
<div class="form-horizontal">
<input placeholder="Find Anything" class="span4" id="nqbody" name="q" type="search" autocomplete="off"/>
<input name="firstsearch" type="hidden" value="on">
<div class="btn-group">
<button type="submit" class="btn btn-primary">Search</button>
<button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></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>
</div>
</form>
[% IF user_has_role('admin') %]
<form class="nd_login-form" method="post" action="[% uri_for('/admin/discodevs') | none %]">
<div class="form-horizontal">
<input placeholder="Device hostname, IP address, or IPv4 prefix >= /22" class="span4" id="discodevs" name="device" required="required" value="[% params.device | html_entity %]" type="text"/>
<div class="btn-group">
<button type="submit" class="btn btn-info">Discover</button>
<button class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a class="nd_navsearchgo-specific" href="" data-action="pingsweep" data-timeout="0.1">Ping Sweep with Default Latency 50ms</a></li>
<li><a class="nd_navsearchgo-specific" href="" data-action="pingsweep" data-timeout="0.5">Ping Sweep with High Latency 250ms</a></li>
</ul>
</div>
<a target="_blank" href="https://github.com/netdisco/netdisco/wiki/Concepts#discovery-and-ping-sweep">
<i class="icon-question-sign icon-large nd_stealth-link nd_text-align-top"
rel="tooltip" data-placement="bottom" data-offset="3" data-title="What does this do?"></i>
</a>
</div>
</form>
[% END %]
[% END %]
</div>
</div>
</div>
[% IF session.logged_in_user %]
<div class="accordion" id="accordion-statistics">
<div class="accordion-group">
<div class="accordion-heading nd_sysinfo-heading">
<a class="accordion-toggle" data-toggle="collapse" data-target="#collapse-stats" href="#">
<i class="icon-chevron-up nd_chevron"></i> System Information
</a>
</div>
<div id="collapse-stats" class="accordion-body collapse">
<div class="accordion-inner">
<div id="nd_stats">
<div id="nd_stats_status" class="span2 offset4 alert">
<i class="icon-spinner icon-spin"></i> Compiling statistics...</div>
</div>
</div>
</div>
</div>
</div>
[% END %]
</div> <!-- /container -->
[% IF session.logged_in_user %]
<script type="text/javascript">
var stats_loaded = 0;
$('#nqbody').focus(); // set focus to main search
$('#loginuser').focus(); // set focus to login, if it's there
$('.collapse').on('show', function() {
$('.nd_chevron').toggleClass('icon-chevron-up icon-chevron-down');
if (! stats_loaded) {
fetch( "[% uri_for('/ajax/content/statistics') | none %]",
{ headers: { 'X-Requested-With': 'XMLHttpRequest' } })
.then( response => {
if (! response.ok) {
$('#nd_stats_status').addClass('alert-error')
.html('<i class="icon-warning-sign"></i> Failed to retrieve system information (server error).');
return;
// throw new Error('Network response was not ok');
}
return response.text();
})
.then( content => {
$('#nd_stats').html(content);
})
.catch( error => {
$('#nd_stats_status').addClass('alert-error')
.html('<i class="icon-warning-sign"></i> Failed to retrieve system information (network error: ' + error + ').');
console.error('There has been a problem with your fetch operation:', error);
});
stats_loaded = 1;
}
});
$('.collapse').on('hide', function() {
$('.nd_chevron').toggleClass('icon-chevron-up icon-chevron-down');
});
</script>
[% END %]