2017-11-19 16:25:13 +00:00
< ? php
/**
2017-11-20 21:30:57 +00:00
* @ file src / Worker / GProbe . php
2017-11-19 16:25:13 +00:00
*/
2017-11-20 21:30:57 +00:00
namespace Friendica\Worker ;
2017-11-19 16:25:13 +00:00
use Friendica\Core\Cache ;
2018-10-29 21:20:46 +00:00
use Friendica\Core\Logger ;
2018-08-11 20:40:44 +00:00
use Friendica\Core\Protocol ;
2018-07-21 12:40:21 +00:00
use Friendica\Database\DBA ;
2017-12-07 14:09:28 +00:00
use Friendica\Model\GContact ;
2017-11-19 16:25:13 +00:00
use Friendica\Network\Probe ;
use Friendica\Protocol\PortableContact ;
2018-11-08 16:28:29 +00:00
use Friendica\Util\Strings ;
2017-11-19 16:25:13 +00:00
class GProbe {
2017-11-20 21:30:57 +00:00
public static function execute ( $url = '' )
2017-11-19 16:25:13 +00:00
{
if ( empty ( $url )) {
return ;
}
$r = q (
" SELECT `id`, `url`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 1 " ,
2018-11-08 16:28:29 +00:00
DBA :: escape ( Strings :: normaliseLink ( $url ))
2017-11-19 16:25:13 +00:00
);
2018-11-08 16:28:29 +00:00
Logger :: log ( " gprobe start for " . Strings :: normaliseLink ( $url ), Logger :: DEBUG );
2017-11-19 16:25:13 +00:00
2018-07-21 12:46:04 +00:00
if ( ! DBA :: isResult ( $r )) {
2017-11-19 16:25:13 +00:00
// Is it a DDoS attempt?
$urlparts = parse_url ( $url );
$result = Cache :: get ( " gprobe: " . $urlparts [ " host " ]);
if ( ! is_null ( $result )) {
2018-08-11 20:40:44 +00:00
if ( in_array ( $result [ " network " ], [ Protocol :: FEED , Protocol :: PHANTOM ])) {
2018-12-15 09:32:47 +00:00
Logger :: log ( " DDoS attempt detected for " . $urlparts [ " host " ] . " by " . defaults ( $_SERVER , " REMOTE_ADDR " , '' ) . " . server data: " . print_r ( $_SERVER , true ), Logger :: DEBUG );
2017-11-19 16:25:13 +00:00
return ;
}
}
$arr = Probe :: uri ( $url );
if ( is_null ( $result )) {
Cache :: set ( " gprobe: " . $urlparts [ " host " ], $arr );
}
2018-08-11 20:40:44 +00:00
if ( ! in_array ( $arr [ " network " ], [ Protocol :: FEED , Protocol :: PHANTOM ])) {
2017-12-07 14:09:28 +00:00
GContact :: update ( $arr );
2017-11-19 16:25:13 +00:00
}
$r = q (
" SELECT `id`, `url`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 1 " ,
2018-11-08 16:28:29 +00:00
DBA :: escape ( Strings :: normaliseLink ( $url ))
2017-11-19 16:25:13 +00:00
);
}
2018-07-21 12:46:04 +00:00
if ( DBA :: isResult ( $r )) {
2017-11-19 16:25:13 +00:00
// Check for accessibility and do a poco discovery
2019-10-05 23:30:47 +00:00
if ( GContact :: updateFromProbe ( $r [ 0 ][ 'url' ], true ) && ( $r [ 0 ][ " network " ] == Protocol :: DFRN )) {
2017-11-19 16:25:13 +00:00
PortableContact :: loadWorker ( 0 , 0 , $r [ 0 ][ 'id' ], str_replace ( '/profile/' , '/poco/' , $r [ 0 ][ 'url' ]));
}
}
2018-11-08 16:28:29 +00:00
Logger :: log ( " gprobe end for " . Strings :: normaliseLink ( $url ), Logger :: DEBUG );
2017-11-19 16:25:13 +00:00
return ;
}
}