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 18:30:19 +00:00
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 )) {
2017-06-04 10:26:25 +00:00
// throw new Exception("Firmwareverzeichnis existiert nicht!");
throw new Exception ( $firmware_download_path );
2016-10-23 10:16:47 +00:00
}
$err = 0 ;
2016-10-23 18:30:19 +00:00
$entwicklung_count = count ( $entwicklung );
$installation_count = count ( $installation );
for ( $i = 0 ; $i < $entwicklung_count ; $i ++ ) {
for ( $j = 0 ; $j < $installation_count ; $j ++ ) {
2016-10-23 10:16:47 +00:00
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 );
2016-10-23 18:30:19 +00:00
$file_count = count ( $files [ $entwicklung [ $i ]][ $installation [ $j ]]);
2016-10-23 18:37:58 +00:00
for ( $x = 0 ; $x < $file_count ; $x ++ ) {
2016-10-23 10:16:47 +00:00
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-11-14 10:14:40 +00:00
$file_count -- ;
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-11-14 10:14:40 +00:00
$file_count -- ;
2016-10-23 10:16:47 +00:00
}
2016-10-01 11:59:21 +00:00
}
}
}
}
}
}
2016-10-23 18:30:19 +00:00
for ( $i = 0 ; $i < $entwicklung_count ; $i ++ ) {
for ( $j = 0 ; $j < $installation_count ; $j ++ ) {
2016-10-23 10:16:47 +00:00
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 ();
2016-10-23 18:30:19 +00:00
for ( $i = 0 ; $i < $entwicklung_count ; $i ++ ) {
for ( $j = 0 ; $j < $installation_count ; $j ++ ) {
2016-10-23 10:16:47 +00:00
if ( $variante [ $entwicklung [ $i ]][ $installation [ $j ]] == 1 ) {
2016-10-23 18:30:19 +00:00
$file_count = count ( $files [ $entwicklung [ $i ]][ $installation [ $j ]]);
2016-10-23 18:37:58 +00:00
for ( $x = 0 ; $x < $file_count ; $x ++ ) {
2016-10-23 10:16:47 +00:00
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 ;
2016-10-23 18:30:19 +00:00
$router_count = count ( $router );
for ( $z = 0 ; $z < $router_count ; $z ++ ) {
2016-10-23 10:16:47 +00:00
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! " );
}
$err = 0 ;
2016-10-23 18:30:19 +00:00
$entwicklung_count = count ( $entwicklung );
$installation_count = count ( $installation );
for ( $i = 0 ; $i < $entwicklung_count ; $i ++ ) {
if ( remoteFileExists ( $firmware_download_path . $entwicklung [ $i ] . " / " )) {
for ( $j = 0 ; $j < $installation_count ; $j ++ ) {
//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)
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 " ))) {
throw new Exception ( " Firmwareverzeichnis darf keine index files besitzen! " );
}
$variante [ $entwicklung [ $i ]][ $installation [ $j ]] = 1 ;
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 ){
2016-11-14 10:14:40 +00:00
if (( strpos ( $value , 'manifest' ) !== false ) || ( strpos ( $value , '?C=M;O=A' ) !== false ) || ( strpos ( $value , '?C=S;O=A' ) !== false ) || ( strpos ( $value , '?C=S;O=A' ) !== false )) {
2016-10-23 18:30:19 +00:00
unset ( $files_in_HTTP [ " 0 " ][ $key ]);
2016-10-23 10:16:47 +00:00
}
}
2016-10-23 18:30:19 +00:00
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
}
}
}
2016-10-23 18:30:19 +00:00
for ( $i = 0 ; $i < $entwicklung_count ; $i ++ ) {
for ( $j = 0 ; $j < $installation_count ; $j ++ ) {
2016-10-23 10:16:47 +00:00
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 ();
2016-10-23 18:30:19 +00:00
for ( $i = 0 ; $i < $entwicklung_count ; $i ++ ) {
for ( $j = 0 ; $j < $installation_count ; $j ++ ) {
2016-10-23 10:16:47 +00:00
if ( $variante [ $entwicklung [ $i ]][ $installation [ $j ]] == 1 ) {
2016-10-23 18:30:19 +00:00
$file_count = count ( $files [ $entwicklung [ $i ]][ $installation [ $j ]]);
2016-10-23 18:40:40 +00:00
for ( $x = 0 ; $x < $file_count ; $x ++ ) {
2016-10-23 18:30:19 +00:00
$anzahl_hersteller = count ( $hersteller );
2016-10-23 10:16:47 +00:00
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 ;
2016-10-23 18:30:19 +00:00
$router_count = count ( $router );
for ( $z = 0 ; $z < $router_count ; $z ++ ) {
2016-10-23 10:16:47 +00:00
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 18:30:19 +00:00
$router_count = count ( $router );
for ( $i = 0 ; $i < $router_count ; $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
}