FriendsOfREDAXO / zip_install

Mit diesem AddOn kannst du gezippte AddOns oder PlugIns einfach im Backend hochladen und installieren.
MIT License
35 stars 4 forks source link

URL install is here! :) #7

Closed cukabeka closed 6 years ago

cukabeka commented 6 years ago

Endlich Github-Projekte direkt via ZIP-URL installieren.

Viel Spaß beim Addons ausprobieren :)

hirbod commented 6 years ago

Danke für den PR. Ich verstehe nur nicht, wieso du nicht rex_socket dafür genutzt hast? Sockets haben den Vorteil, das diese auf jedem Server funktionieren. file_get_contents() auf externe URLs ist auf vielen Webspaces gesperrt. CURL nicht immer installiert In der Form würde ich das nicht mergen, bitte baue es auf die Redaxo interne Socket-Class um.

stefan-beyer commented 6 years ago

rex_socket behandelt keine HTTP-Redirects (z.B. Status 302 etc.) sehe ich das richtig?

skerbis commented 6 years ago

Habe mir den Quellcode nicht angeschaut. Wenn file_get_contents() ein Problem darstellt, warum nicht mit Curl. Curl sollte auf den meisten Systemen zur Verfügung stehen.

// Funktion die file_get_contents mit curl ersetzt
function curl_file_get_contents($url) {
    $curly = curl_init();

    curl_setopt($curly, CURLOPT_HEADER, 0);
    curl_setopt($curly, CURLOPT_RETURNTRANSFER, 1); //Return Data
    curl_setopt($curly, CURLOPT_URL, $url);

    $content = curl_exec($curly);
    curl_close($curly);

    return $content;
}
hirbod commented 6 years ago

Aus Slack, ungetestet:

$response = $files_socket->doGet();

$redircount = 0;
while ($response->isRedirection() && $redircount < 3) {
    $scanurl = $response->getHeader('location');
    $files_socket = rex_socket::factoryURL($scanurl);
    $response = $files_socket->doGet();
    $redircount++;
}

@cukabeka @stefan-beyer bitte dann auf rex_socket umbauen und den redirect-case 301/302 einfach mittels der einfachen while-schleife abdecken, dann ist der PR top und wird sofort gemerged & released.

hirbod commented 6 years ago

Wichtiger Hinweis noch von @gharlan Wobei man dann den Host voran setzen müsste, der ursprungsurl, die man abruft.

Sprich an $scanurl wäre noch ein Host zu hängen, da es bei nem internen 302 z.B. auch nur "/pfad" geben könnte.

So in der Art macht es search_it: (jedoch für Redaxointerne URLs)

if (strpos($scanurl,'//') === false ) {
    $scanurl = rtrim($host, "/") . '/' . ltrim(str_replace(array('../', './'), '', $scanurl), "/");
}
stefan-beyer commented 6 years ago

Ich habe auf rex_socket umgebaut. Danke für die schnellen Hinweise!

ghost commented 6 years ago

bitte mergen.

hirbod commented 6 years ago

mach ich nach meinen tests

cukabeka commented 6 years ago

Ping.. ;)

hirbod commented 6 years ago

Thx an alle. Paket muss noch geschnürt und hochgeladen werden