Commit d7f0c330 authored by Dominik Hebeler's avatar Dominik Hebeler
Browse files

Merge branch 'master' into '57-die-settingsseite-ubersetzen'

Updates from Master



See merge request !73
parents 3c38a08d 22cea274
...@@ -15,6 +15,7 @@ class MetaGerSearch extends Controller ...@@ -15,6 +15,7 @@ class MetaGerSearch extends Controller
{ {
public function search(Request $request, MetaGer $metager) public function search(Request $request, MetaGer $metager)
{ {
#die($request->header('User-Agent'));
$time = microtime(); $time = microtime();
# Mit gelieferte Formulardaten parsen und abspeichern: # Mit gelieferte Formulardaten parsen und abspeichern:
$metager->parseFormData($request); $metager->parseFormData($request);
...@@ -43,10 +44,13 @@ class MetaGerSearch extends Controller ...@@ -43,10 +44,13 @@ class MetaGerSearch extends Controller
# Zunächst den Spruch # Zunächst den Spruch
$spruecheFile = storage_path() . "/app/public/sprueche.txt"; $spruecheFile = storage_path() . "/app/public/sprueche.txt";
if( file_exists($spruecheFile) ) if( file_exists($spruecheFile) && $_GET['sprueche'])
{ {
$sprueche = file($spruecheFile); $sprueche = file($spruecheFile);
$spruch = $sprueche[array_rand($sprueche)]; $spruch = $sprueche[array_rand($sprueche)];
}else
{
$spruch = "";
} }
# Die manuellen Quicktips: # Die manuellen Quicktips:
......
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
#use App\MetaGer\Forwarder;
#use App\MetaGer\Results;
#use App\MetaGer\Search;
use App;
use App\MetaGer;
use Response;
class Pictureproxy extends Controller
{
function get(Request $request) {
if( $request->has('url') )
{
$file = file_get_contents($request->input('url'));
$responseCode = explode(" ", $http_response_header[0])[1];
$contentType = "";
foreach($http_response_header as $header)
{
if( strpos($header, "Content-Type:") === 0)
{
$tmp = explode(": ", $header);
$contentType = $tmp[1];
}
}
$response = Response::make($file, $responseCode);
$response->header('Content-Type', $contentType);
return $response;
}
}
}
\ No newline at end of file
...@@ -4,6 +4,7 @@ namespace App\Http\Controllers; ...@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Response;
class StartpageController extends Controller class StartpageController extends Controller
{ {
...@@ -64,4 +65,35 @@ class StartpageController extends Controller ...@@ -64,4 +65,35 @@ class StartpageController extends Controller
\App::setLocale($locale); \App::setLocale($locale);
return loadPage($subpage); return loadPage($subpage);
} }
public function loadPlugin(Request $request, $locale = "de")
{
$requests = $request->all();
$params = [];
foreach($requests as $key => $value)
{
if( strpos($key, "param_") === 0 )
{
$key = substr($key, strpos($key, "param_") + 6 );
}
$params[$key] = $value;
}
if(!isset($params['focus']))
$params['focus'] = 'web';
if(!isset($params['encoding']))
$params['encoding'] = 'utf8';
if(!isset($params['lang']))
$params['lang'] = 'all';
$params["eingabe"] = "";
$link = action('MetaGerSearch@search', $params);
$response = Response::make(
view('plugin')->with('link', $link), "200");
$response->header('Content-Type', "application/xml");
return $response;
return $link;
}
} }
\ No newline at end of file
...@@ -97,7 +97,9 @@ ...@@ -97,7 +97,9 @@
Route::get('meta/meta.ger3', 'MetaGerSearch@search'); Route::get('meta/meta.ger3', 'MetaGerSearch@search');
Route::get('meta/picture', 'Pictureproxy@get');
Route::get('qt', 'MetaGerSearch@quicktips'); Route::get('qt', 'MetaGerSearch@quicktips');
Route::get('tips', 'MetaGerSearch@tips'); Route::get('tips', 'MetaGerSearch@tips');
Route::get('opensearch.xml', 'StartpageController@loadPlugin');
}); });
...@@ -6,6 +6,8 @@ use Jenssegers\Agent\Agent; ...@@ -6,6 +6,8 @@ use Jenssegers\Agent\Agent;
use App; use App;
use Storage; use Storage;
use Log; use Log;
use Config;
use Redis;
use App\lib\TextLanguageDetect\TextLanguageDetect; use App\lib\TextLanguageDetect\TextLanguageDetect;
use App\lib\TextLanguageDetect\LanguageDetect\TextLanguageDetectException; use App\lib\TextLanguageDetect\LanguageDetect\TextLanguageDetectException;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
...@@ -49,7 +51,7 @@ class MetaGer ...@@ -49,7 +51,7 @@ class MetaGer
function __construct() function __construct()
{ {
$this->time = microtime(); $this->starttime = microtime(true);
define('CRLF', "\r\n"); define('CRLF', "\r\n");
define('BUFFER_LENGTH', 8192); define('BUFFER_LENGTH', 8192);
if( file_exists(config_path() . "/blacklistDomains.txt") && file_exists(config_path() . "/blacklistUrl.txt") ) if( file_exists(config_path() . "/blacklistDomains.txt") && file_exists(config_path() . "/blacklistUrl.txt") )
...@@ -86,12 +88,21 @@ class MetaGer ...@@ -86,12 +88,21 @@ class MetaGer
$viewResults[] = get_object_vars($result); $viewResults[] = get_object_vars($result);
} }
# Wir müssen natürlich noch den Log für die durchgeführte Suche schreiben:
$this->createLogs();
if( $this->fokus === "bilder" ) if( $this->fokus === "bilder" )
{ {
switch ($this->out) switch ($this->out)
{ {
case 'results': case 'results':
return ''; return view('metager3bilderresults')
->with('results', $viewResults)
->with('eingabe', $this->eingabe)
->with('mobile', $this->mobile)
->with('warnings', $this->warnings)
->with('errors', $this->errors)
->with('metager', $this);
default: default:
return view('metager3bilder') return view('metager3bilder')
->with('results', $viewResults) ->with('results', $viewResults)
...@@ -113,9 +124,18 @@ class MetaGer ...@@ -113,9 +124,18 @@ class MetaGer
->with('errors', $this->errors) ->with('errors', $this->errors)
->with('metager', $this); ->with('metager', $this);
break; break;
default: case 'results-with-style':
return view('metager3') return view('metager3')
->with('results', $viewResults) ->with('results', $viewResults)
->with('eingabe', $this->eingabe)
->with('mobile', $this->mobile)
->with('warnings', $this->warnings)
->with('errors', $this->errors)
->with('metager', $this)
->with('suspendheader', "yes");
break;
default:
return view('metager3')
->with('eingabe', $this->eingabe) ->with('eingabe', $this->eingabe)
->with('mobile', $this->mobile) ->with('mobile', $this->mobile)
->with('warnings', $this->warnings) ->with('warnings', $this->warnings)
...@@ -125,6 +145,36 @@ class MetaGer ...@@ -125,6 +145,36 @@ class MetaGer
} }
} }
private function createLogs()
{
$redis = Redis::connection('redisLogs');
if( $redis )
{
$logEntry = "";
$logEntry .= "[" . date(DATE_RFC822, mktime(date("H"),date("i"), date("s"), date("m"), date("d"), date("Y"))) . "]";
$logEntry .= " From=" . $this->ip;
$logEntry .= " pid=" . getmypid();
$anonId= md5("MySeCrEtSeEdFoRmd5"
.$this->request->header('Accept')
.$this->request->header('Accept-Charset')
.$this->request->header('Accept-Encoding')
.$this->request->header('HTTP_LANGUAGE')
.$this->request->header('User-Agent')
.$this->request->header('Keep-Alive')
.$this->request->header('X-Forwarded-For'));
$logEntry .= " anonId=$anonId";
$logEntry .= " ref=" . $this->request->header('Referer');
$useragent = $this->request->header('User-Agent');
$useragent = str_replace("(", " ", $useragent);
$useragent = str_replace(")", " ", $useragent);
$useragent = str_replace(" ", "", $useragent);
$logEntry .= " ua=" . $useragent;
$logEntry .= " iter= mm= time=" . round((microtime(true)-$this->starttime), 2) . " serv=" . $this->fokus . " which= hits= stringSearch= QuickTips= SSS= check=";
$logEntry .= " search=" . $this->eingabe;
$redis->rpush('logs.search', $logEntry);
}
}
public function removeInvalids () public function removeInvalids ()
{ {
$results = []; $results = [];
...@@ -211,6 +261,19 @@ class MetaGer ...@@ -211,6 +261,19 @@ class MetaGer
} }
$this->results = $paginatedSearchResults; $this->results = $paginatedSearchResults;
if( isset($this->password) )
{
# Wir bieten einen bezahlten API-Zugriff an, bei dem dementsprechend die Werbung ausgeblendet wurde:
# Aktuell ist es nur die Uni-Mainz. Deshalb überprüfen wir auch nur diese.
$password = getenv('mainz');
$eingabe = $this->eingabe;
$password = md5($eingabe . $password);
if( $this->password === $password )
{
$this->ads = [];
}
}
} }
public function createSearchEngines (Request $request) public function createSearchEngines (Request $request)
...@@ -218,12 +281,11 @@ class MetaGer ...@@ -218,12 +281,11 @@ class MetaGer
#die(SocketRocket::get("tls", "dominik-pfennig.de", "", 443)); #die(SocketRocket::get("tls", "dominik-pfennig.de", "", 443));
# Überprüfe, welche Sumas eingeschaltet sind # Überprüfe, welche Sumas eingeschaltet sind
$xml = simplexml_load_file($this->sumaFile); $xml = simplexml_load_file($this->sumaFile);
$enabledSearchengines = []; $enabledSearchengines = [];
$overtureEnabled = FALSE; $overtureEnabled = FALSE;
$countSumas = 0;
if($this->fokus === "angepasst") if($this->fokus === "angepasst")
{ {
$sumas = $xml->xpath("suma"); $sumas = $xml->xpath("suma");
...@@ -239,12 +301,12 @@ class MetaGer ...@@ -239,12 +301,12 @@ class MetaGer
foreach($sumas as $suma) foreach($sumas as $suma)
{ {
if($request->has($suma["service"]) if($request->has($suma["service"])
|| ( $this->fokus !== "bilder" #|| ( $this->fokus !== "bilder"
&& ($suma["name"]->__toString() === "qualigo" # && ($suma["name"]->__toString() === "qualigo"
|| $suma["name"]->__toString() === "similar_product_ads" # || $suma["name"]->__toString() === "similar_product_ads"
|| ( !$overtureEnabled && $suma["name"]->__toString() === "overtureAds" ) # || ( !$overtureEnabled && $suma["name"]->__toString() === "overtureAds" )
) # )
) # )
#|| 1 === 1 #Todo: entfernen #|| 1 === 1 #Todo: entfernen
){ ){
...@@ -254,7 +316,8 @@ class MetaGer ...@@ -254,7 +316,8 @@ class MetaGer
{ {
$overtureEnabled = TRUE; $overtureEnabled = TRUE;
} }
if( $suma["name"]->__toString() !== "qualigo" && $suma["name"]->__toString() !== "similar_product_ads" && $suma["name"]->__toString() !== "overtureAds" )
$countSumas += 1;
$enabledSearchengines[] = $suma; $enabledSearchengines[] = $suma;
} }
} }
...@@ -277,13 +340,15 @@ class MetaGer ...@@ -277,13 +340,15 @@ class MetaGer
{ {
$overtureEnabled = TRUE; $overtureEnabled = TRUE;
} }
if( $suma["name"]->__toString() !== "qualigo" && $suma["name"]->__toString() !== "similar_product_ads" && $suma["name"]->__toString() !== "overtureAds" )
$countSumas += 1;
$enabledSearchengines[] = $suma; $enabledSearchengines[] = $suma;
} }
} }
} }
} }
if( ( $this->fokus !== "bilder" && sizeof($enabledSearchengines) <= 3 ) || ( $this->fokus === "bilder" && sizeof($enabledSearchengines) === 0) ) if( $countSumas <= 0 )
{ {
$this->errors[] = "Achtung: Sie haben in ihren Einstellungen keine Suchmaschine ausgewählt."; $this->errors[] = "Achtung: Sie haben in ihren Einstellungen keine Suchmaschine ausgewählt.";
} }
...@@ -313,19 +378,48 @@ class MetaGer ...@@ -313,19 +378,48 @@ class MetaGer
$this->sockets[$tmp->name] = $tmp->fp; $this->sockets[$tmp->name] = $tmp->fp;
} }
} }
# Nun passiert ein elementarer Schritt. # Nun passiert ein elementarer Schritt.
# Wir warten auf die Antwort der Suchmaschinen, da wir vorher nicht weiter machen können. # Wir warten auf die Antwort der Suchmaschinen, da wir vorher nicht weiter machen können.
# aber natürlich nicht ewig. # aber natürlich nicht ewig.
# Die Verbindung steht zu diesem Zeitpunkt und auch unsere Request wurde schon gesendet. # Die Verbindung steht zu diesem Zeitpunkt und auch unsere Request wurde schon gesendet.
# Wir geben der Suchmaschine nun bis zu 500ms Zeit zu antworten. # Wir geben der Suchmaschine nun bis zu 500ms Zeit zu antworten.
usleep(500000);
# Jetzt lesen wir alles aus, was da ist und verwerfen den Rest: # Jetzt lesen wir alles aus, was da ist und verwerfen den Rest:
foreach($engines as $engine) $enginesToLoad = count($engines);
$loadedEngines = 0;
$time = 0;
while( true )
{ {
$engine->retrieveResults(); # Abbruchbedingung
if($time < 500)
{
if($loadedEngines >= $enginesToLoad)
break;
}elseif( $time >= 500 && $time < $this->time)
{
if( ($loadedEngines / ($enginesToLoad * 1.0)) >= 0.8 )
break;
}else
{
break;
}
foreach($engines as $engine)
{
if(!$engine->loaded)
{
$success = $engine->retrieveResults();
if($engine->loaded)
$loadedEngines += 1;
}
}
usleep(50000);
$time += 50;
}
foreach( $engines as $engine )
{
if( !$engine->loaded )
$engine->shutdown();
} }
$this->engines = $engines; $this->engines = $engines;
} }
...@@ -372,13 +466,8 @@ class MetaGer ...@@ -372,13 +466,8 @@ class MetaGer
$this->q = $this->eingabe; $this->q = $this->eingabe;
# IP: # IP:
if( isset($_SERVER['HTTP_FROM']) ) $this->ip = $request->ip();
{
$this->ip = $_SERVER['HTTP_FROM'];
}else
{
$this->ip = "127.0.0.1";
}
# Language: # Language:
if( isset($_SERVER['HTTP_LANGUAGE']) ) if( isset($_SERVER['HTTP_LANGUAGE']) )
{ {
...@@ -390,7 +479,8 @@ class MetaGer ...@@ -390,7 +479,8 @@ class MetaGer
# Category # Category
$this->category = $request->input('category', ''); $this->category = $request->input('category', '');
# Request Times: # Request Times:
$this->time = $request->input('time', 1); $this->time = $request->input('time', 1000);
# Page # Page
$this->page = $request->input('page', 1); $this->page = $request->input('page', 1);
# Lang # Lang
...@@ -401,20 +491,25 @@ class MetaGer ...@@ -401,20 +491,25 @@ class MetaGer
} }
$this->agent = new Agent(); $this->agent = new Agent();
$this->mobile = $this->agent->isMobile(); $this->mobile = $this->agent->isMobile();
#Sprüche #Sprüche
$this->sprueche = $request->input('sprueche', 'on'); $this->sprueche = $request->input('sprueche', 'off');
if($this->sprueche === "off" )
$this->sprueche = true;
else
$this->sprueche = false;
# Ergebnisse pro Seite: # Ergebnisse pro Seite:
$this->resultCount = $request->input('resultCount', '20'); $this->resultCount = $request->input('resultCount', '20');
# Manchmal müssen wir Parameter anpassen um den Sucheinstellungen gerecht zu werden: # Manchmal müssen wir Parameter anpassen um den Sucheinstellungen gerecht zu werden:
if( $request->has('dart') ) if( $request->has('dart') )
{ {
$this->time = 10; $this->time = 10000;
$this->warnings[] = "Hinweis: Sie haben Dart-Europe aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 10 Sekunden hochgesetzt."; $this->warnings[] = "Hinweis: Sie haben Dart-Europe aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 10 Sekunden hochgesetzt.";
} }
if( $this->time < 0 || $this->time > 20 ) if( $this->time <= 500 || $this->time > 20000 )
{ {
$this->time = 1; $this->time = 1000;
} }
if( $request->has('minism') && ( $request->has('fportal') || $request->has('harvest') ) ) if( $request->has('minism') && ( $request->has('fportal') || $request->has('harvest') ) )
{ {
...@@ -431,7 +526,7 @@ class MetaGer ...@@ -431,7 +526,7 @@ class MetaGer
} }
if( $request->has('ebay') ) if( $request->has('ebay') )
{ {
$this->time = 2; $this->time = 2000;
$this->warnings[] = "Hinweis: Sie haben Ebay aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 2 Sekunden hochgesetzt."; $this->warnings[] = "Hinweis: Sie haben Ebay aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 2 Sekunden hochgesetzt.";
} }
if( App::isLocale("en") ) if( App::isLocale("en") )
...@@ -460,6 +555,13 @@ class MetaGer ...@@ -460,6 +555,13 @@ class MetaGer
{ {
$this->tab = "_blank"; $this->tab = "_blank";
} }
if( $request->has('password') )
$this->password = $request->input('password');
if( $request->has('quicktips') )
$this->quicktips = false;
else
$this->quicktips = true;
$this->out = $request->input('out', "html"); $this->out = $request->input('out', "html");
if($this->out !== "html" && $this->out !== "json" && $this->out !== "results" && $this->out !== "results-with-style") if($this->out !== "html" && $this->out !== "json" && $this->out !== "results" && $this->out !== "results-with-style")
$this->out = "html"; $this->out = "html";
...@@ -475,6 +577,11 @@ class MetaGer ...@@ -475,6 +577,11 @@ class MetaGer
$this->q = $match[1] . $match[3]; $this->q = $match[1] . $match[3];
$this->warnings[] = "Sie führen eine Sitesearch durch. Es werden nur Ergebnisse von der Seite: \"" . $this->site . "\" angezeigt."; $this->warnings[] = "Sie führen eine Sitesearch durch. Es werden nur Ergebnisse von der Seite: \"" . $this->site . "\" angezeigt.";
} }
if( $request->has('site') )
{
$this->site = $request->input('site');
$this->warnings[] = "Sie führen eine Sitesearch durch. Es werden nur Ergebnisse von der Seite: \"" . $this->site . "\" angezeigt.";
}
# Wenn die Suchanfrage um das Schlüsselwort "-host:*" ergänzt ist, sollen bestimmte Hosts nicht eingeblendet werden # Wenn die Suchanfrage um das Schlüsselwort "-host:*" ergänzt ist, sollen bestimmte Hosts nicht eingeblendet werden
# Wir prüfen, ob das hier der Fall ist: # Wir prüfen, ob das hier der Fall ist:
while(preg_match("/(.*)(^|\s)-host:(\S+)(.*)/si", $this->q, $match)) while(preg_match("/(.*)(^|\s)-host:(\S+)(.*)/si", $this->q, $match))
...@@ -676,7 +783,7 @@ class MetaGer ...@@ -676,7 +783,7 @@ class MetaGer
public function generateSiteSearchLink($host) public function generateSiteSearchLink($host)
{ {
$host = urlencode($host); $host = urlencode($host);
$requestData = $this->request->except('page'); $requestData = $this->request->except(['page','out']);
$requestData['eingabe'] .= " site:$host"; $requestData['eingabe'] .= " site:$host";
$requestData['focus'] = "web"; $requestData['focus'] = "web";
$link = action('MetaGerSearch@search', $requestData); $link = action('MetaGerSearch@search', $requestData);
...@@ -686,7 +793,7 @@ class MetaGer ...@@ -686,7 +793,7 @@ class MetaGer
public function generateRemovedHostLink ($host) public function generateRemovedHostLink ($host)
{ {
$host = urlencode($host); $host = urlencode($host);
$requestData = $this->request->except('page'); $requestData = $this->request->except(['page','out']);
$requestData['eingabe'] .= " -host:$host"; $requestData['eingabe'] .= " -host:$host";
$link = action('MetaGerSearch@search', $requestData); $link = action('MetaGerSearch@search', $requestData);
return $link; return $link;
...@@ -695,7 +802,7 @@ class MetaGer ...@@ -695,7 +802,7 @@ class MetaGer
public function generateRemovedDomainLink ($domain) public function generateRemovedDomainLink ($domain)
{ {
$domain = urlencode($domain); $domain = urlencode($domain);
$requestData = $this->request->except('page'); $requestData = $this->request->except(['page','out']);
$requestData['eingabe'] .= " -domain:$domain"; $requestData['eingabe'] .= " -domain:$domain";
$link = action('MetaGerSearch@search', $requestData); $link = action('MetaGerSearch@search', $requestData);
return $link; return $link;
...@@ -716,4 +823,15 @@ class MetaGer ...@@ -716,4 +823,15 @@ class MetaGer
else else
return null; return null;
} }
public function getImageProxyLink($link)
{
$requestData = [];
$requestData["url"] = $link;
$link = action('Pictureproxy@get', $requestData);
return $link;
}