2007-04-03 14:10:23 +00:00
< ? php
2016-08-21 08:07:14 -05:00
use LibreNMS\Exceptions\HostUnreachableException ;
2017-11-01 17:06:39 +01:00
use LibreNMS\Util\IP ;
2016-08-21 08:07:14 -05:00
2015-07-13 20:10:26 +02:00
$no_refresh = true ;
2015-03-21 21:30:55 +00:00
2015-07-13 20:10:26 +02:00
if ( $_SESSION [ 'userlevel' ] < 10 ) {
include 'includes/error-no-perm.inc.php' ;
2012-04-06 13:56:23 +00:00
2015-07-13 20:10:26 +02:00
exit ;
2007-06-24 14:56:47 +00:00
}
2017-11-01 17:06:39 +01:00
if ( isset ( $_POST [ 'hostname' ])) {
$hostname = clean ( $_POST [ 'hostname' ]);
if ( ! is_valid_hostname ( $hostname ) && ! IP :: isValid ( $hostname )) {
print_error ( 'Invalid hostname or IP.' );
$hostname = false ;
}
} else {
$hostname = false ;
}
2017-10-28 05:59:25 +02:00
$snmp_enabled = isset ( $_POST [ 'snmp' ]);
if ( $hostname !== false ) {
2015-07-13 20:10:26 +02:00
echo ' < div class = " row " >
2014-10-02 23:14:45 +01:00
< div class = " col-sm-3 " >
</ div >
2015-07-13 20:10:26 +02:00
< div class = " col-sm-6 " > ' ;
if ( $_SESSION [ 'userlevel' ] > '5' ) {
// Settings common to SNMPv2 & v3
if ( $_POST [ 'port' ]) {
2017-10-28 05:59:25 +02:00
$port = clean ( $_POST [ 'port' ]);
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
$port = $config [ 'snmp' ][ 'port' ];
}
if ( $_POST [ 'transport' ]) {
2017-10-28 05:59:25 +02:00
$transport = clean ( $_POST [ 'transport' ]);
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
$transport = 'udp' ;
}
2017-10-28 05:59:25 +02:00
$additional = array ();
if ( ! $snmp_enabled ) {
$snmpver = 'v2c' ;
$additional = array (
'snmp_disable' => 1 ,
'os' => $_POST [ 'os' ] ? mres ( $_POST [ 'os_id' ]) : " ping " ,
'hardware' => mres ( $_POST [ 'hardware' ]),
);
} elseif ( $_POST [ 'snmpver' ] === 'v2c' || $_POST [ 'snmpver' ] === 'v1' ) {
2015-07-13 20:10:26 +02:00
if ( $_POST [ 'community' ]) {
2017-12-25 15:51:31 +00:00
$config [ 'snmp' ][ 'community' ] = array ( clean ( $_POST [ 'community' ], false ));
2015-07-13 20:10:26 +02:00
}
2017-10-28 05:59:25 +02:00
$snmpver = clean ( $_POST [ 'snmpver' ]);
2015-07-13 20:10:26 +02:00
print_message ( " Adding host $hostname communit " . ( count ( $config [ 'snmp' ][ 'community' ]) == 1 ? 'y' : 'ies' ) . ' ' . implode ( ', ' , $config [ 'snmp' ][ 'community' ]) . " port $port using $transport " );
2016-08-18 20:28:22 -05:00
} elseif ( $_POST [ 'snmpver' ] === 'v3' ) {
2015-07-13 20:10:26 +02:00
$v3 = array (
2017-10-28 05:59:25 +02:00
'authlevel' => clean ( $_POST [ 'authlevel' ]),
2017-12-25 15:51:31 +00:00
'authname' => clean ( $_POST [ 'authname' ], false ),
'authpass' => clean ( $_POST [ 'authpass' ], false ),
2017-10-28 05:59:25 +02:00
'authalgo' => clean ( $_POST [ 'authalgo' ]),
2017-12-25 15:51:31 +00:00
'cryptopass' => clean ( $_POST [ 'cryptopass' ], false ),
'cryptoalgo' => clean ( $_POST [ 'cryptoalgo' ], false ),
2015-07-13 20:10:26 +02:00
);
array_push ( $config [ 'snmp' ][ 'v3' ], $v3 );
$snmpver = 'v3' ;
print_message ( " Adding SNMPv3 host $hostname port $port " );
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
print_error ( 'Unsupported SNMP Version. There was a dropdown menu, how did you reach this error ?' );
} //end if
2017-10-28 05:59:25 +02:00
$poller_group = clean ( $_POST [ 'poller_group' ]);
2016-08-09 15:00:12 -05:00
$force_add = ( $_POST [ 'force_add' ] == 'on' );
2015-07-13 20:10:26 +02:00
2017-10-28 05:59:25 +02:00
$port_assoc_mode = clean ( $_POST [ 'port_assoc_mode' ]);
2016-08-07 12:16:40 -05:00
try {
2017-10-28 05:59:25 +02:00
$device_id = addHost ( $hostname , $snmpver , $port , $transport , $poller_group , $force_add , $port_assoc_mode , $additional );
2016-11-21 12:12:10 -06:00
$link = generate_device_url ( array ( 'device_id' => $device_id ));
print_message ( " Device added <a href=' $link '> $hostname ( $device_id )</a> " );
2016-08-07 12:16:40 -05:00
} catch ( HostUnreachableException $e ) {
print_error ( $e -> getMessage ());
foreach ( $e -> getReasons () as $reason ) {
print_error ( $reason );
}
2016-08-18 20:28:22 -05:00
} catch ( Exception $e ) {
2016-08-07 12:16:40 -05:00
print_error ( $e -> getMessage ());
2015-07-13 20:10:26 +02:00
}
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
print_error ( " You don't have the necessary privileges to add hosts. " );
} //end if
echo ' </ div >
2014-10-02 23:14:45 +01:00
< div class = " col-sm-3 " >
</ div >
2015-07-13 20:10:26 +02:00
</ div > ' ;
} //end if
2007-04-03 14:10:23 +00:00
2015-07-13 20:10:26 +02:00
$pagetitle [] = 'Add host' ;
2011-10-18 14:41:19 +00:00
2007-04-03 14:10:23 +00:00
?>
2014-10-02 23:14:45 +01:00
< div class = " row " >
< div class = " col-sm-3 " >
</ div >
< div class = " col-sm-6 " >
2014-01-13 10:05:19 +00:00
< form name = " form1 " method = " post " action = " " class = " form-horizontal " role = " form " >
2014-10-02 23:14:45 +01:00
< div >< h2 > Add Device </ h2 ></ div >
2017-10-28 05:59:25 +02:00
< div class = " alert alert-info " > Devices will be checked for Ping / SNMP reachability before being probed .</ div >
2014-01-13 10:05:19 +00:00
< div class = " well well-lg " >
2017-10-28 05:59:25 +02:00
< div class = 'form-group' >
< label for = 'hardware' class = 'col-sm-3 control-label' > SNMP </ label >
< div class = 'col-sm-4' >
< input type = " checkbox " id = " snmp " name = " snmp " data - size = " small " onChange = " disableSnmp(this); " checked >
</ div >
</ div >
2014-01-13 10:05:19 +00:00
< div class = " form-group " >
2014-10-02 23:14:45 +01:00
< label for = " hostname " class = " col-sm-3 control-label " > Hostname </ label >
< div class = " col-sm-9 " >
2014-01-13 10:05:19 +00:00
< input type = " text " id = " hostname " name = " hostname " class = " form-control input-sm " placeholder = " Hostname " >
</ div >
</ div >
2017-10-28 05:59:25 +02:00
< div id = 'snmp_override' style = " display: none; " >
< div class = 'form-group' >
< label for = 'hardware' class = 'col-sm-3 control-label' > Hardware ( optional ) </ label >
< div class = 'col-sm-9' >
< input id = 'hardware' class = 'form-control' name = 'hardware' placeholder = " Hardware (optional) " />
</ div >
</ div >
< div class = 'form-group' >
< label for = 'os' class = 'col-sm-3 control-label' > OS ( optional ) </ label >
< div class = 'col-sm-9' >
< input id = 'os' class = 'form-control' name = 'os' placeholder = " OS (optional) " />
< input type = 'hidden' id = 'os_id' class = 'form-control' name = 'os_id' />
</ div >
</ div >
</ div >
< div id = " snmp_conf " style = " display: block; " >
< div class = " form-group " >
< label for = " snmpver " class = " col-sm-3 control-label " > SNMP Version </ label >
< div class = " col-sm-3 " >
< select name = " snmpver " id = " snmpver " class = " form-control input-sm " onChange = " changeForm(); " >
< option value = " v1 " > v1 </ option >
< option value = " v2c " selected > v2c </ option >
< option value = " v3 " > v3 </ option >
</ select >
</ div >
< div class = " col-sm-3 " >
< input type = " text " name = " port " placeholder = " port " class = " form-control input-sm " >
</ div >
< div class = " col-sm-3 " >
< select name = " transport " id = " transport " class = " form-control input-sm " >
2014-10-11 16:55:32 +00:00
< ? php
2015-07-13 20:10:26 +02:00
foreach ( $config [ 'snmp' ][ 'transports' ] as $transport ) {
echo " <option value=' " . $transport . " ' " ;
2014-10-11 16:55:32 +00:00
if ( $transport == $device [ 'transport' ]) {
2015-07-13 20:10:26 +02:00
echo " selected='selected' " ;
2014-10-11 16:55:32 +00:00
}
2015-07-13 20:10:26 +02:00
echo '>' . $transport . '</option>' ;
2014-10-11 16:55:32 +00:00
}
2016-01-21 22:04:52 +01:00
?>
2017-10-28 05:59:25 +02:00
</ select >
</ div >
</ div >
< div class = " form-group " >
< label for = " port_association_mode " class = " col-sm-3 control-label " > Port Association Mode </ label >
< div class = " col-sm-3 " >
< select name = " port_assoc_mode " id = " port_assoc_mode " class = " form-control input-sm " >
2016-01-21 22:04:52 +01:00
< ? php
foreach ( get_port_assoc_modes () as $mode ) {
$selected = " " ;
2016-08-18 20:28:22 -05:00
if ( $mode == $config [ 'default_port_association_mode' ]) {
2016-01-21 22:04:52 +01:00
$selected = " selected " ;
2016-08-18 20:28:22 -05:00
}
2016-01-21 22:04:52 +01:00
2017-10-28 05:59:25 +02:00
echo " <option value= \" $mode\ " $selected > $mode </ option > \n " ;
2016-01-21 22:04:52 +01:00
}
2014-10-11 16:55:32 +00:00
?>
2017-10-28 05:59:25 +02:00
</ select >
</ div >
2014-10-02 23:14:45 +01:00
</ div >
2017-10-28 05:59:25 +02:00
< div id = " snmpv1_2 " >
< div class = " form-group " >
< div class = " col-sm-12 alert alert-info " >
< label class = " control-label text-left input-sm " > SNMPv1 / 2 c Configuration </ label >
</ div >
</ div >
< div class = " form-group " >
< label for = " community " class = " col-sm-3 control-label " > Community </ label >
< div class = " col-sm-9 " >
< input type = " text " name = " community " id = " community " placeholder = " Community " class = " form-control input-sm " >
</ div >
</ div >
2014-10-02 23:14:45 +01:00
</ div >
2017-10-28 05:59:25 +02:00
< div id = " snmpv3 " >
< div class = " form-group " >
< div class = " col-sm-12 alert alert-info " >
< label class = " control-label text-left input-sm " > SNMPv3 Configuration </ label >
</ div >
</ div >
< div class = " form-group " >
< label for = " authlevel " class = " col-sm-3 control-label " > Auth Level </ label >
< div class = " col-sm-3 " >
< select name = " authlevel " id = " authlevel " class = " form-control input-sm " >
< option value = " noAuthNoPriv " selected > noAuthNoPriv </ option >
< option value = " authNoPriv " > authNoPriv </ option >
< option value = " authPriv " > authPriv </ option >
</ select >
</ div >
</ div >
< div class = " form-group " >
< label for = " authname " class = " col-sm-3 control-label " > Auth User Name </ label >
< div class = " col-sm-9 " >
< input type = " text " name = " authname " id = " authname " class = " form-control input-sm " >
</ div >
</ div >
< div class = " form-group " >
< label for = " authpass " class = " col-sm-3 control-label " > Auth Password </ label >
< div class = " col-sm-9 " >
< input type = " text " name = " authpass " id = " authpass " placeholder = " AuthPass " class = " form-control input-sm " >
</ div >
</ div >
< div class = " form-group " >
< label for = " authalgo " class = " col-sm-3 control-label " > Auth Algorithm </ label >
< div class = " col-sm-9 " >
< select name = " authalgo " id = " authalgo " class = " form-control input-sm " >
< option value = " MD5 " selected > MD5 </ option >
< option value = " SHA " > SHA </ option >
</ select >
</ div >
</ div >
< div class = " form-group " >
< label for = " cryptopass " class = " col-sm-3 control-label " > Crypto Password </ label >
< div class = " col-sm-9 " >
< input type = " text " name = " cryptopass " id = " cryptopass " placeholder = " Crypto Password " class = " form-control input-sm " >
</ div >
</ div >
< div class = " form-group " >
< label for = " cryptoalgo " class = " col-sm-3 control-label " > Crypto Algorithm </ label >
< div class = " col-sm-9 " >
< select name = " cryptoalgo " id = " cryptoalgo " class = " form-control input-sm " >
< option value = " AES " selected > AES </ option >
< option value = " DES " > DES </ option >
</ select >
</ div >
</ div >
2014-10-02 23:14:45 +01:00
</ div >
</ div >
2015-03-15 21:44:35 +00:00
< ? php
2015-07-13 20:10:26 +02:00
if ( $config [ 'distributed_poller' ] === true ) {
echo '
2017-10-28 05:59:25 +02:00
< div class = " form-group " >
< label for = " poller_group " class = " col-sm-3 control-label " > Poller Group </ label >
< div class = " col-sm-9 " >
< select name = " poller_group " id = " poller_group " class = " form-control input-sm " >
< option value = " 0 " > Default poller group </ option >
2015-07-13 20:10:26 +02:00
' ;
2015-03-15 21:44:35 +00:00
2015-07-13 20:10:26 +02:00
foreach ( dbFetchRows ( 'SELECT `id`,`group_name` FROM `poller_groups`' ) as $group ) {
echo '<option value="' . $group [ 'id' ] . '">' . $group [ 'group_name' ] . '</option>' ;
2015-03-15 21:44:35 +00:00
}
2015-07-13 20:10:26 +02:00
echo '
2017-10-28 05:59:25 +02:00
</ select >
</ div >
2015-03-15 21:44:35 +00:00
</ div >
2016-09-14 02:32:45 +01:00
' ;
} //endif
?>
2015-03-19 22:06:13 +00:00
< div class = " form-group " >
< div class = " col-sm-offset-3 col-sm-9 " >
< div class = " checkbox " >
< label >
2016-09-14 02:32:45 +01:00
< input type = " checkbox " name = " force_add " id = " force_add " > Force add - No ICMP or SNMP checks performed
2015-03-19 22:06:13 +00:00
</ label >
</ div >
</ div >
</ div >
2015-08-29 18:50:57 +05:30
< hr >
< center >< button type = " submit " class = " btn btn-default " name = " Submit " > Add Device </ button ></ center >
2011-03-27 10:21:19 +00:00
</ div >
2007-04-03 14:10:23 +00:00
</ form >
2014-10-02 23:14:45 +01:00
</ div >
< div class = " col-sm-3 " >
</ div >
</ div >
< script >
function changeForm () {
snmpVersion = $ ( " #snmpver " ) . val ();
if ( snmpVersion == 'v1' || snmpVersion == 'v2c' ) {
$ ( '#snmpv1_2' ) . show ();
$ ( '#snmpv3' ) . hide ();
2015-07-13 20:10:26 +02:00
}
else if ( snmpVersion == 'v3' ) {
2014-10-02 23:14:45 +01:00
$ ( '#snmpv1_2' ) . hide ();
$ ( '#snmpv3' ) . show ();
}
}
$ ( '#snmpv3' ) . toggle ();
2017-10-28 05:59:25 +02:00
function disableSnmp ( e ) {
if ( e . checked ) {
$ ( '#snmp_conf' ) . show ();
$ ( '#snmp_override' ) . hide ();
} else {
$ ( '#snmp_conf' ) . hide ();
$ ( '#snmp_override' ) . show ();
}
}
var os_suggestions = new Bloodhound ({
datumTokenizer : Bloodhound . tokenizers . obj . whitespace ( 'text' ),
queryTokenizer : Bloodhound . tokenizers . whitespace ,
remote : {
url : " ajax_ossuggest.php?term=%QUERY " ,
filter : function ( output ) {
return $ . map ( output , function ( item ) {
return {
text : item . text ,
os : item . os ,
};
});
},
wildcard : " %QUERY "
}
});
os_suggestions . initialize ();
$ ( '#os' ) . typeahead ({
hint : true ,
highlight : true ,
minLength : 1 ,
classNames : {
menu : 'typeahead-left'
}
},
{
source : os_suggestions . ttAdapter (),
async : true ,
displayKey : 'text' ,
valueKey : 'os' ,
templates : {
suggestion : Handlebars . compile ( '<p> {{text}}</p>' )
},
limit : 20
});
$ ( " #os " ) . on ( " typeahead:selected typeahead:autocompleted " , function ( e , datum ) {
$ ( " #os_id " ) . val ( datum . os );
$ ( " #os " ) . html ( '<mark>' + datum . text + '</mark>' );
});
$ ( " [name='snmp'] " ) . bootstrapSwitch ( 'offColor' , 'danger' );
< ? php
if ( $hostname !== false && ! $snmp_enabled ) {
echo ' $("[name=\'snmp\']").trigger(\'click\');' ;
}
?>
2014-10-02 23:14:45 +01:00
</ script >