In dieser kurzen Extbase Anleitung wird erklärt, wie man (TYPO3 V12 Ready) Secure Download Links für Dateien aus dem Fileadmin generiert.

Vorbereitung

Ich beziehe mich in dieser Anleitung auf die TYPO3 Extension Secure Downloads, welche zum Zeitpunkt dieser Anleitung als RC im Github für V12 bereitsteht. 

Es wird vorausgesetzt, dass die Extension und die .htaccess Dateien bereits eingerichtet und einsatzbereit sind. Die Anleitung dazu finden Sie hier.

Services.yaml anpassen

Da ab TYPO3 v12 eine Services.yaml für die Abhängigkeiten benötigt, und diese in unserer Extension bereits vorhanden sein sollte, passen wir diese so an:

 

services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

  LdoerrDotCom\MyExt:
    resource: '../Classes/*'

  Leuchtfeuer\SecureDownloads\Service\SecureDownloadService: ~

 

Diesen Schritt sollte man für das richtige Laden der Abhängigkeiten machen.

 

Anpassungen im Controller

In meinem Beispiel greife ich von meinem ActionController auf die Methoden der Secure Download zu.

Zuerst benötigen wir diesen Namespace:

 

use Leuchtfeuer\SecureDownloads\Service\SecureDownloadService;

 

Dann wird per Injection die Abhängigkeit generiert:

 

/**
* SecureDownloadService
* @var $secureDownloadService
*/
protected SecureDownloadService $secureDownloadService;

/**
* @param SecureDownloadService $secureDownloadService
*/
public function injectSecureDownloadService(SecureDownloadService $secureDownloadService): void
{
  $this->secureDownloadService = $secureDownloadService;
}

 

In meinem Beispiel habe ich eine Dateiliste, die einen Public-Pfad bereitstellt. Wir können mit einer Abfrage noch sicherstellen, dass der Link auch wirklich abgesichert werden soll.

 

$securedFilesLinks = [];
$c = 0;
foreach ($subfolder['files'] as $file) {
  $securedFilesLinks[$c]['title'] = $file['title'];
  $securedFilesLinks[$c]['path'] = $file['path'];
  $securedFilesLinks[$c]['securepath'] = null;

  if ($this->secureDownloadService->pathShouldBeSecured($file['path'])) {
    $securedFilesLinks[$c]['securepath'] = $this->secureDownloadService->getResourceUrl($file['path']);
  }
  $c++;
}

 

Zum Schluss können wir die Dateiliste an den View übergeben:

 

$this->view->assign('securedFileLinks' => $securedFilesLinks);

 

Im Fluid kann man jetzt mit einer simplen foreach durch die Link-Liste gehen und den "securepath" ausgeben:

 

<f:if condition="{securedFileLinks}">
  <f:for each="{securedFileLinks}" as="file">
    <a href="{file.securepath}" download="download" class="downloadLink" target="__BLANK">Datei gesichert runterladen</a>
  </f:for>
</f:if>

 

Der Link sieht dann ungefähr so aus:

 

meineseite.xyy/securedl/sdl-eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2OTAyNjk1MzIsfawfa6MTY5MDM1OTUzMiwidXNlciI6MSwiZ3JvdXBzIjpbMCwtMiwxXSwiZmlsZSI6IcccaWRtaW4vQ29udGVudC9XaW5kcGFyay9BcGVuc2VuLzIwMjMvTW9uYXRzYmVyaWNodCAtIEFwZW5zZW4gMDUtMjAyMy5wZGYiLCJdadsOX0.u_9_XKCN16Q_CeQ_81wvvxsJc-W_dmfm4yb5iYvtKuc/meineeigentlichedatei.png

 

Dies funktioniert natürlich auch mit einzelnen Dateien und kann beliebig oft eingesetzt werden.
Beachten Sie, dass diese Anleitung erschienen ist, als die TYPO3 12 Version von Secure Downloads nicht als Stable Release veröffentlicht wurde.

Previous PostPHP Tutorial: Mit XAMPP eine lokale Domain einrichten
Next PostTYPO3 Extbase: Extension-Settings nutzen und im Backend Wartbar machen