Project

General

Profile

Feature #12085

Persistent download url

Added by Carsten Rose about 2 months ago. Updated about 1 month ago.

Status:
Closed
Priority:
Normal
Assignee:
Target version:
Start date:
04.03.2021
Due date:
% Done:

100%

Estimated time:
Discuss:

Description

  • Fuer Teachingtools benoetigen wir Zugriff mit sprechenden und persistenten URLs (fuer den Download) auf zuvor hochgeladene Files.
  • Falls moeglich waere es gut den Zugriff trotz persistenter URL unterbinden zu koennen.

Related issues

Related to QFQ - Support #12109: Donwload Link: Plain, SIP, Persistent Link, Peristent SIP - new notationNewCarsten Rose08.03.2021

Actions
#1

Updated by Carsten Rose about 2 months ago

Konzept:

  • Download URL: <baseUrl>/typo3conf/ext/qfq/Classes/Api/download.php/<uniqId> oder <baseUrl>/dl.php/<uniqId>
  • Wird download.php ohne `s` Parameter aufgerufen, befindet es sich im 'direct download mode'
  • Option:
    • Im Install dir ist `dl.php` ein Symlink auf `typo3conf/ext/qfq/Classes/Api/download.php`.
    • Bei der ersten Installation und bei einem QFQ Update: check ob der symlink existiert und falls nicht anlegen.
  • In der QFQ Extension config gibt es einen neuen Parameter `direct download mode query'. Diese erzeugt mit der Query (als prepared statement mit Fragezeichen) einen normalen download mode link syntax. Bsp:
    SELECT CONCAT('D:output.pdf|F:', n.pathFileName) FROM notiz AS n WHERE n.id=? OR n.reference=? AND NOW()<=n.expire
    
  • Falls 'b,r,s' angegeben sind haben diesen keinen Einfluss.
  • Das was in der URL nach `dl.php` angegeben ist, sind die Bind Parameter. Der Reststring wird explodiert nach '/'. Alle gegebenen values werden bind Parameter gesetzt.
  • QFQ ermittelt die Anzahl der Fragezeichen in der Query. Gibt es mehr Fragezeichen als Parameter, wird der letzte Parameter so oft wiederholt bis die Anzahl Fragezeichen erreicht ist. Ob jemals mehr als ein Parameter noetig sein wird, ist nicht klar - aber zumindest in dem Beispiel oben gibt es eine Oder Abfrage und es braucht min. 2 bind Parameter (die in dem Fall identisch sein sollten).
  • Mit dem Beispiel oben kann sowohl nach einer ID gesucht werden als auch nach einem sprechenden Namen.
  • Der Parameter wird urldecode und anschliessend auf alnumx geprueft "[A-Za-z][0-9]@-_.,;: /() ÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜŸäëïöüÿçß"
  • Fehlermeldung mit dealyAttackSecond:
    • Der Bind Parameter leer oder ungueltig
    • Kein `direct download mode query' angegeben
    • Kein Queryergebnis oder mehr als eins
#2

Updated by Carsten Rose about 2 months ago

  • Status changed from New to Closed
  • % Done changed from 0 to 100
#3

Updated by Carsten Rose about 2 months ago

WIP:

  • Doku fehlt
  • Nur eine SQL in der Config ist vermutlich viel zu wenig
    • Es koennten weitere eingebaut werden: Erkennung anhand des Skriptnamen die dann in der QFQ Extension Config entsprechend hinterlegt werden.
  • ... AS _link Class sollte diesen Modus auch unterstuetzen
  • symlink dl.php muss aktuell noch manuell angelegt werden.
  • Unit Tests schreiben
#4

Updated by Carsten Rose about 2 months ago

  • Status changed from Closed to In Progress
#5

Updated by Carsten Rose about 2 months ago

  • Subject changed from download: access files in fileadmin/protected (or elsewhere) specified via db-record and given uniq identifier to download: persistent url
#6

Updated by Carsten Rose about 2 months ago

  • Subject changed from download: persistent url to Persistent download url
#7

Updated by Carsten Rose about 1 month ago

Aktuell erzeugt ein

CONCAT('d|s:0|F:', p.name, '|t:', p.name) AS _link

einen kaputte Link:
<a href="typo3conf/ext/qfq/Classes/Api/download.php?mode=pdf&_exportFilename=&_b64_download=RjpEb2U=" class="0" title="Download" >

Neu fuehrt s:0 automatisch dazu das ein persistent Download Link generiert wird.
  • s:0
  • d:123 - dann wird der Default typo3conf/ext/qfq/Classes/Api/download.php genommen.
  • d:dl.php/123 - dann wird die Kurzschreibweise genommen - Erkennung anhand des '.php/' - es wird immer eine PHP Datei sein. Detection von '/' reicht nicht, da evtl. mehrere Parameter, getrennt mit '/', uebergeben werden
  • Alle weiteren Parameter wie gehabt.
  • Sources a la file (`F:`), page (`p:`), url (`u:`) oder uid (`uid:)` sind in diesem Modus nicht erlaubt (schaden zwar nicht da sie ignoriert werden, es sollte aber eine Fehlermeldung damit es sofort auffaellt.
  • Hinweis in der Doku das in der Extension Config eine entsprechende URL zu definieren ist.
#8

Updated by Carsten Rose about 1 month ago

  • Status changed from In Progress to Closed
  • Target version changed from 21.4.1 to 21.3.0
#9

Updated by Carsten Rose about 1 month ago

  • Related to Support #12109: Donwload Link: Plain, SIP, Persistent Link, Peristent SIP - new notation added

Also available in: Atom PDF