Project

General

Profile

Actions

Feature #12085

closed

Persistent download url

Added by Carsten Rose over 1 year ago. Updated over 1 year ago.

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

100%

Estimated time:
Discuss:
Prio Planung:

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 - Feature #12109: Donwload Link: Plain, SIP, Persistent Link, Peristent SIP - new notationNewCarsten Rose08.03.2021

Actions
Actions #1

Updated by Carsten Rose over 1 year 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
Actions #2

Updated by Carsten Rose over 1 year ago

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

Updated by Carsten Rose over 1 year 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
Actions #4

Updated by Carsten Rose over 1 year ago

  • Status changed from Closed to In Progress
Actions #5

Updated by Carsten Rose over 1 year ago

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

Updated by Carsten Rose over 1 year ago

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

Updated by Carsten Rose over 1 year 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.
Actions #8

Updated by Carsten Rose over 1 year ago

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

Updated by Carsten Rose over 1 year ago

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

Also available in: Atom PDF