2016-07-24 16:06:10 +00:00
< ? php
/**
* @ author Caspar Armster
* @ copyright 2016 Caspar Armster , Freifunk Hennef / Freie Netzwerker e . V . ( www . freifunk - hennef . de / www . freie - netzwerker . de )
* @ license Licensed under GPLv3
*/
2016-10-23 14:29:50 +00:00
function remoteFileExists ( $url ) {
$curl = curl_init ( $url );
//don't fetch the actual page, you only want to check the connection is ok
curl_setopt ( $curl , CURLOPT_NOBODY , true );
//do request
$result = curl_exec ( $curl );
$ret = false ;
//if request did not fail
if ( $result !== false ) {
//if request was ok, check response code
$statusCode = curl_getinfo ( $curl , CURLINFO_HTTP_CODE );
if ( $statusCode == 200 ) {
$ret = true ;
}
}
curl_close ( $curl );
return $ret ;
}
2016-10-23 10:16:47 +00:00
if ( filter_var ( $community [ $community_id ][ " download_path " ], FILTER_VALIDATE_URL ) === FALSE ) {
if ( ! is_dir ( $firmware_download_path )) {
throw new Exception ( " Firmwareverzeichnis existiert nicht! " );
}
$err = 0 ;
for ( $i = 0 ; $i < count ( $entwicklung ); $i ++ ) {
for ( $j = 0 ; $j < count ( $installation ); $j ++ ) {
if ( is_dir ( $firmware_download_path . $entwicklung [ $i ] . " / " )) {
if ( is_dir ( $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " )) {
$variante [ $entwicklung [ $i ]][ $installation [ $j ]] = 1 ;
$files [ $entwicklung [ $i ]][ $installation [ $j ]] = array_slice ( scandir ( $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " ), 2 );
for ( $x = 0 ; $x < count ( $files [ $entwicklung [ $i ]][ $installation [ $j ]]); $x ++ ) {
if ( is_dir ( $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " . $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ])) {
2016-10-01 11:59:21 +00:00
array_splice ( $files [ $entwicklung [ $i ]][ $installation [ $j ]], $x , 1 );
$x -- ;
2016-10-23 10:16:47 +00:00
} else {
$pos = stripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], 'manifest' );
if ( $pos !== false ) {
array_splice ( $files [ $entwicklung [ $i ]][ $installation [ $j ]], $x , 1 );
$x -- ;
}
2016-10-01 11:59:21 +00:00
}
}
}
}
}
}
2016-10-23 10:16:47 +00:00
for ( $i = 0 ; $i < count ( $entwicklung ); $i ++ ) {
for ( $j = 0 ; $j < count ( $installation ); $j ++ ) {
if ( $variante [ $entwicklung [ $i ]][ $installation [ $j ]] == 1 ) {
$x = 0 ;
while ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ] !== false ) {
$pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] = stripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " tp-link " );
if ( $pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] !== false ) {
break ;
}
$x ++ ;
2016-10-01 11:59:21 +00:00
}
2016-10-23 10:16:47 +00:00
} else {
$pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] = 0 ;
2016-10-01 11:59:21 +00:00
}
}
}
2016-10-23 10:16:47 +00:00
$router = array ();
for ( $i = 0 ; $i < count ( $entwicklung ); $i ++ ) {
for ( $j = 0 ; $j < count ( $installation ); $j ++ ) {
if ( $variante [ $entwicklung [ $i ]][ $installation [ $j ]] == 1 ) {
for ( $x = 0 ; $x < count ( $files [ $entwicklung [ $i ]][ $installation [ $j ]]); $x ++ ) {
for ( $y = 0 ; $y < $anzahl_hersteller ; $y ++ ) {
if ( $pos = stripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], $hersteller [ $y ][ 'filename' ], $pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] - 1 ) !== false ) {
$router_tmp [ $x ][ 'hersteller' ] = $hersteller [ $y ][ 'name' ];
switch ( $router_tmp [ $x ][ 'hersteller' ]) {
case " D-Link " :
$router_tmp [ $x ][ 'version' ] = substr ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], strripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " rev " ), - 4 - $offset_sysupgrade [ $j ]);
break ;
case " GL-Inet (alt) " :
$router_tmp [ $x ][ 'version' ] = substr ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], strripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " v " ), - 4 - $offset_sysupgrade [ $j ]);
break ;
case " TP-Link " :
$router_tmp [ $x ][ 'version' ] = substr ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], strripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " v " ), - 4 - $offset_sysupgrade [ $j ]);
break ;
default :
$router_tmp [ $x ][ 'version' ] = " Alle " ;
}
$router_tmp [ $x ][ 'modell' ] = strtoupper ( substr ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], $pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] + $hersteller [ $y ][ 'offset_modell' ], strripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " . " , - 4 ) - strlen ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ]) - strlen ( $router_tmp [ $x ][ 'version' ]) + $hersteller [ $y ][ 'offset_version' ] - $offset_sysupgrade [ $j ]));
}
}
if ( isset ( $router_tmp [ $x ][ 'hersteller' ]) != true ) {
$error_text [ $err ] = " Unbekannten Hersteller im Dateinamen gefunden, bitte Script updaten! ( " . $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ] . " ) " ;
$err ++ ;
} else {
$router_neu = 1 ;
for ( $z = 0 ; $z < count ( $router ); $z ++ ) {
if ( isset ( $router [ $z ])) {
if (( strcasecmp ( $router [ $z ] -> hersteller , $router_tmp [ $x ][ 'hersteller' ]) == 0 ) && ( strcasecmp ( $router [ $z ] -> modell , $router_tmp [ $x ][ 'modell' ]) == 0 ) && ( strcasecmp ( $router [ $z ] -> version , $router_tmp [ $x ][ 'version' ]) == 0 )) {
$entinst = $entwicklung [ $i ] . $installation [ $j ];
$entinstlink = $entwicklung [ $i ] . $installation [ $j ] . " link " ;
$router [ $z ] -> $entinst = 1 ;
$router [ $z ] -> $entinstlink = $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " . $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ];
$router_neu = 0 ;
break ;
}
}
}
if ( $router_neu == 1 ) {
$z = count ( $router );
$router [ $z ] = new ffrouter ();
$router [ $z ] -> hersteller = $router_tmp [ $x ][ 'hersteller' ];
$router [ $z ] -> version = $router_tmp [ $x ][ 'version' ];
$router [ $z ] -> modell = $router_tmp [ $x ][ 'modell' ];
$entinst = $entwicklung [ $i ] . $installation [ $j ];
$entinstlink = $entwicklung [ $i ] . $installation [ $j ] . " link " ;
$router [ $z ] -> $entinst = 1 ;
$router [ $z ] -> $entinstlink = $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " . $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ];
2016-10-01 11:59:21 +00:00
}
}
}
2016-10-23 10:16:47 +00:00
}
$router_tmp = array ();
}
}
} else {
//Check if URL is reachable
2016-10-23 14:29:50 +00:00
if ( ! remoteFileExists ( $firmware_download_path )) {
2016-10-23 10:16:47 +00:00
throw new Exception ( " Firmwareverzeichnis offline oder nicht existent! " );
}
//Check if URL has index file (refer to https://forums.phpfreaks.com/topic/112764-using-scandir-on-other-websites/?p=579166 <- scandir has problem with index files)
2016-10-23 14:29:50 +00:00
if (( @ remoteFileExists ( $firmware_download_path . " /index.htm " )) || ( @ remoteFileExists ( $firmware_download_path . " /index.html " )) || ( @ remoteFileExists ( $firmware_download_path . " /index.php " ))) {
2016-10-23 10:16:47 +00:00
throw new Exception ( " Firmwareverzeichnis darf keine index files besitzen! " );
}
2016-10-23 14:29:50 +00:00
2016-10-23 10:16:47 +00:00
$err = 0 ;
for ( $i = 0 ; $i < count ( $entwicklung ); $i ++ ) {
for ( $j = 0 ; $j < count ( $installation ); $j ++ ) {
2016-10-23 14:29:50 +00:00
if ( remoteFileExists ( $firmware_download_path . $entwicklung [ $i ] . " / " )) {
if ( @ remoteFileExists ( $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " )) {
2016-10-23 10:16:47 +00:00
//Check if URL has index file (refer to https://forums.phpfreaks.com/topic/112764-using-scandir-on-other-websites/?p=579166 <- scandir has problem with index files)
2016-10-23 14:29:50 +00:00
if (( @ remoteFileExists ( $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " /index.htm " )) || ( @ remoteFileExists ( $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " /index.html " )) || ( @ remoteFileExists ( $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " /index.php " ))) {
2016-10-23 10:16:47 +00:00
throw new Exception ( " Firmwareverzeichnis darf keine index files besitzen! " );
}
$variante [ $entwicklung [ $i ]][ $installation [ $j ]] = 1 ;
2016-10-23 14:29:50 +00:00
preg_match_all ( '/href=[\'"]?([^\'" >]+)/' , file_get_contents ( $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " ), $files_in_HTTP );
foreach ( $files_in_HTTP [ " 0 " ] as $key => $value ){
$files_in_HTTP [ " 0 " ][ $key ] = substr ( $value , 6 );
}
$files [ $entwicklung [ $i ]][ $installation [ $j ]] = array_slice ( $files_in_HTTP [ " 0 " ], 1 );
2016-10-23 10:16:47 +00:00
for ( $x = 0 ; $x < count ( $files [ $entwicklung [ $i ]][ $installation [ $j ]]); $x ++ ) {
2016-10-23 14:29:50 +00:00
if ( @ remoteFileExists ( $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " . $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ])) {
2016-10-23 10:16:47 +00:00
array_splice ( $files [ $entwicklung [ $i ]][ $installation [ $j ]], $x , 1 );
2016-10-23 14:29:50 +00:00
// $x--;
2016-10-23 10:16:47 +00:00
} else {
$pos = stripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], 'manifest' );
if ( $pos !== false ) {
array_splice ( $files [ $entwicklung [ $i ]][ $installation [ $j ]], $x , 1 );
2016-10-23 14:29:50 +00:00
// $x--;
2016-10-23 10:16:47 +00:00
}
}
}
}
}
}
}
for ( $i = 0 ; $i < count ( $entwicklung ); $i ++ ) {
for ( $j = 0 ; $j < count ( $installation ); $j ++ ) {
if ( $variante [ $entwicklung [ $i ]][ $installation [ $j ]] == 1 ) {
$x = 0 ;
while ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ] !== false ) {
$pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] = stripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " tp-link " );
if ( $pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] !== false ) {
break ;
}
$x ++ ;
}
} else {
$pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] = 0 ;
}
}
}
$router = array ();
for ( $i = 0 ; $i < count ( $entwicklung ); $i ++ ) {
for ( $j = 0 ; $j < count ( $installation ); $j ++ ) {
if ( $variante [ $entwicklung [ $i ]][ $installation [ $j ]] == 1 ) {
for ( $x = 0 ; $x < count ( $files [ $entwicklung [ $i ]][ $installation [ $j ]]); $x ++ ) {
for ( $y = 0 ; $y < $anzahl_hersteller ; $y ++ ) {
if ( $pos = stripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], $hersteller [ $y ][ 'filename' ], $pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] - 1 ) !== false ) {
$router_tmp [ $x ][ 'hersteller' ] = $hersteller [ $y ][ 'name' ];
switch ( $router_tmp [ $x ][ 'hersteller' ]) {
case " D-Link " :
$router_tmp [ $x ][ 'version' ] = substr ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], strripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " rev " ), - 4 - $offset_sysupgrade [ $j ]);
break ;
case " GL-Inet (alt) " :
$router_tmp [ $x ][ 'version' ] = substr ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], strripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " v " ), - 4 - $offset_sysupgrade [ $j ]);
break ;
case " TP-Link " :
$router_tmp [ $x ][ 'version' ] = substr ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], strripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " v " ), - 4 - $offset_sysupgrade [ $j ]);
break ;
default :
$router_tmp [ $x ][ 'version' ] = " Alle " ;
2016-10-01 11:59:21 +00:00
}
2016-10-23 10:16:47 +00:00
$router_tmp [ $x ][ 'modell' ] = strtoupper ( substr ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], $pos_hersteller [ $entwicklung [ $i ]][ $installation [ $j ]] + $hersteller [ $y ][ 'offset_modell' ], strripos ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ], " . " , - 4 ) - strlen ( $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ]) - strlen ( $router_tmp [ $x ][ 'version' ]) + $hersteller [ $y ][ 'offset_version' ] - $offset_sysupgrade [ $j ]));
2016-10-01 11:59:21 +00:00
}
}
2016-10-23 10:16:47 +00:00
if ( isset ( $router_tmp [ $x ][ 'hersteller' ]) != true ) {
$error_text [ $err ] = " Unbekannten Hersteller im Dateinamen gefunden, bitte Script updaten! ( " . $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ] . " ) " ;
$err ++ ;
} else {
$router_neu = 1 ;
for ( $z = 0 ; $z < count ( $router ); $z ++ ) {
if ( isset ( $router [ $z ])) {
if (( strcasecmp ( $router [ $z ] -> hersteller , $router_tmp [ $x ][ 'hersteller' ]) == 0 ) && ( strcasecmp ( $router [ $z ] -> modell , $router_tmp [ $x ][ 'modell' ]) == 0 ) && ( strcasecmp ( $router [ $z ] -> version , $router_tmp [ $x ][ 'version' ]) == 0 )) {
$entinst = $entwicklung [ $i ] . $installation [ $j ];
$entinstlink = $entwicklung [ $i ] . $installation [ $j ] . " link " ;
$router [ $z ] -> $entinst = 1 ;
$router [ $z ] -> $entinstlink = $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " . $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ];
$router_neu = 0 ;
break ;
}
}
}
if ( $router_neu == 1 ) {
$z = count ( $router );
$router [ $z ] = new ffrouter ();
$router [ $z ] -> hersteller = $router_tmp [ $x ][ 'hersteller' ];
$router [ $z ] -> version = $router_tmp [ $x ][ 'version' ];
$router [ $z ] -> modell = $router_tmp [ $x ][ 'modell' ];
$entinst = $entwicklung [ $i ] . $installation [ $j ];
$entinstlink = $entwicklung [ $i ] . $installation [ $j ] . " link " ;
$router [ $z ] -> $entinst = 1 ;
$router [ $z ] -> $entinstlink = $firmware_download_path . $entwicklung [ $i ] . " / " . $installation [ $j ] . " / " . $files [ $entwicklung [ $i ]][ $installation [ $j ]][ $x ];
}
2016-10-01 11:59:21 +00:00
}
}
}
2016-10-23 10:16:47 +00:00
$router_tmp = array ();
2016-10-01 11:59:21 +00:00
}
}
2016-07-24 16:06:10 +00:00
}
2016-10-23 10:16:47 +00:00
2016-07-24 16:06:10 +00:00
for ( $i = 0 ; $i < count ( $router ); $i ++ ) { // Routerbilder einbauen
2016-10-01 11:59:21 +00:00
if ( is_dir ( strtolower ( " router_images/ " . $router [ $i ] -> hersteller ))) {
if ( is_file ( strtolower ( " router_images/ " . $router [ $i ] -> hersteller . " / " . $router [ $i ] -> modell . " - " . $router [ $i ] -> version . " .jpg " ))) {
$router [ $i ] -> imagefront = strtolower ( " router_images/ " . $router [ $i ] -> hersteller . " / " . $router [ $i ] -> modell . " - " . $router [ $i ] -> version . " .jpg " );
} else {
$router [ $i ] -> imagefront = " router_images/keinbild.jpg " ;
}
if ( is_file ( strtolower ( " router_images/ " . $router [ $i ] -> hersteller . " / " . $router [ $i ] -> modell . " - " . $router [ $i ] -> version . " _back.jpg " ))) {
$router [ $i ] -> imageback = strtolower ( " router_images/ " . $router [ $i ] -> hersteller . " / " . $router [ $i ] -> modell . " - " . $router [ $i ] -> version . " _back.jpg " );
} else {
$router [ $i ] -> imageback = " router_images/keinbild.jpg " ;
}
} else {
$router [ $i ] -> imagefront = " router_images/keinbild.jpg " ;
$router [ $i ] -> imageback = " router_images/keinbild.jpg " ;
}
2016-07-24 16:06:10 +00:00
}