minimalistische API und Konzept auf Basis eines Standard Apache Webservers mit webdav. Standard Bordmittel. Kein CGI, kein PHP o.ä nötig. KISS Prinzip, aber eigene Token-Erzeugung und Verwaltung durch den Nutzer.
ACHTUNG! Nicht auf einem öffentliche Server installieren, sondern noch zwingend einen TLS proxy vorschalten, der auch den auth übernimmt, beim Zugriff auf "/new/" und "/chain/"Bei einer Anfrage unter /new/ wird die Anfrage (wenn sie einem regex Muster eines Tokens entspricht) von apache statt in ein logfile in ein gawk script geleitet, das dann ein Verzeichnis mit diesem Namen erstellt. Unter Kenntnis dieses tokens (also verzeichnissen) können dann Daten in jenem Verzeichnis hochgeladen werden.
Zu einem bestehenden derartigen token, kann man mittels /chain/ dann weitere read-only tokens erzeugen, unter deren Kenntnis wiederum dann Zugriffe via /ro/ möglich sind. Diese sind symlinks zum rw token, jedoch über die methode GET auf nurlesenden Zugriff limitiert.
curl -Ls https://finalmedia.de/code/kb/6fbfe4089e26/setup.txt | shEmpfohlen: Alpine-Linux ab 3.23 (!) Instant-Setup via
curl -Ls https://finalmedia.de/code/kb/6fbfe4089e26/setup_alpine.txt | shLetztlich geschieht dabei das:
apk add apache2 gawk apache2-webdav apr-util-dbm_gdbm daemontools-encore curl rc-update add apache2 rm /etc/apache2/conf.d/dav.conf mkdir -p /var/www/localhost/keep/ro mkdir -p /var/www/localhost/keep/rw mkdir /var/lib/dav touch /var/lib/dav/lockdb chown apache:apache /var/lib/dav chown apache:apache /var/lib/dav/lockdb echo forbidden > /var/www/localhost/keep/ro/index.html echo forbidden > /var/www/localhost/keep/rw/index.html echo keep > /var/www/localhost/keep/index.html chown -R apache:apache /var/www/localhost/keep base64 -d << ::EOF:: | tar -C / -x -z -v H4sIAAAAAAAAA+1X33PaOBDmFf8Vi5NL7zIHMthAepNmLr2k18ykTSdt8nK5ZoS9gMe25JMEhOml f3tX/EggQJOHpp102AdktJ+s3Y/9ViLs8lgYmaCo6G7hccwja9bro5Hs7uj5taBQrVerdd/zm9Vm wavWaoFXAO+R4pmznjZcARSUlOZruPv8T9Q2SqwVC6a7Dl5hCBpNL446cQQ852EXocMHCZRfMXi2 6cNnYB//8crP//3UuLYjL7fpMbjeZLC1BZvBfQAfSi8sDD7poTaY/eqmAsq6DRcu63PFBoMBS2XI 067UhiWIOVMD5m767oX7NYwkTGAxW+5v18+cH83pU7JQITcocPB48r9X/zXvVv+NRmD17zXX+v8u 9q30f6PoLIliBeX8QZpe6/VHWyhFuxKxCNu8l5qK/frN97AabwTBKv379dvzP6j6DdK/X6tV1/r/ HrZ7HivT4+lrUids/7Hj7TnFjfeo+qje8gyB5FvBK57lKVJxZI5TPJY8eiOjXooQ8f5lNn4cD5rR eEnTFS0XkG29Akyeu3iepnKQoenKaOmqWb9d6xQPeP9YhsnBSxi1nTRuMXq1bT1J1CL/BpyjGsJR lktluDClUslOCgm8ZyRQ08LQSELEIsIrSGPiwwLaUgGdkZEU6RB0lyvUv0MLQ97TOMUiTzToYZbG IgEqpw4aQeSVaNsxlftRFgsYYCvj1CXVnzcNkRCHSkl1LDuTuGWHjVtvjaH1VGjGKf5FZSqzpSge hqi1hQH9QNTMMbJ0yLCXoTCnVLawohFPN59iIfB8m28rjiIUF2LRHYBMls3XV8w/B9tQ0jg0i966 5wFluMzhTxyWPnMo+kdtOMX/eqjN5dnpEXxkdF9hQB9dKZMRP8TMK6kybsD95cydc91S9z9DE97w NnvzmVkAKPovZtavjCG0/5wYjIZVccw7V0Yy+x9sbs0omLmXODCxXap2bmIpwGXu3s301E5y69NQ PrIlitopFm34VOVWW9BRJAEqlLvL9q2u3ox1BX8ffoDXh/sHy1EnVNcqjhDeSoELkIP9czhpt2/D ZdN495bnYC8FP0Ma8udIY8C22fZDMnlANAsYkkiIH4Y5ZZ/n1B1GuzIZGjRlbUiX2f1UvDub0rE8 W7EwfRxnsZlo+KWMhlCrBs1gx28EO4uvmJwmsQ5l354b0rK3lL9dNnOEEp3O+j67trWt7UnYF1sI WQoAFgAA ::EOF:: service apache2 start
/new/ neues rw token erstellen /chain/ symlinken eines ro token zu einem rw /unchain/ tbd: symlink entfernen /ro/ nurlese zugriff (GET HEAD) /rw/ schreibender und lesender zugriff (PUT GET HEAD)
[0-9]{6}[0-9a-f]{64}
YYYYmmxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxToken mit zwei Jahren Gültigkeit (Ablauf datum, also +2 Jahre):
echo "$((2+$(date +%Y)))$(date +%m)$(tr -dc "0-9a-f" < /dev/urandom | head -c 64)"
curl -s http://127.0.0.1/new/20271139d6dcf6c7a611f08000b42e99a765f0d2b3998a74b7460f96165dba35a0cb41 curl -s http://127.0.0.1/new/20271139d6dcf6c7a611f08000b42e99a765f0d2b3998a74b7460f96165dba35a0cb42 curl -s http://127.0.0.1/new/20271139d6dcf6c7a611f08000b42e99a765f0d2b3998a74b7460f96165dba35a0cb43
curl -s http://127.0.0.1/chain/20271139d6dcf6c7a611f08000b42e99a765f0d2b3998a74b7460f96165dba35a0cb41/20260618e7c00c8b616b6e36fdc9a524bf9101d85b74e67601ce150faa5a80db68c7a3
## should chain some ro tokens to the rw token 20271139d6dcf6c7a611f08000b42e99a765f0d2b3998a74b7460f96165dba35a0cb42 curl -s http://127.0.0.1/chain/20271139d6dcf6c7a611f08000b42e99a765f0d2b3998a74b7460f96165dba35a0cb42/20260618e7c00c8b616b6e36fdc9a524bf9101d85b74e67601ce150faa5a80db68c7a2 curl -s http://127.0.0.1/chain/20271139d6dcf6c7a611f08000b42e99a765f0d2b3998a74b7460f96165dba35a0cb42/20260618e7c00c8b616b6e36fdc9a524bf9101d85b74e67601ce150faa5a80db68c7a1 curl -s http://127.0.0.1/chain/20271139d6dcf6c7a611f08000b42e99a765f0d2b3998a74b7460f96165dba35a0cb42/20260618e7c00c8b616b6e36fdc9a524bf9101d85b74e67601ce150faa5a80db68c7a0
echo ich_bin_content | curl -s -X PUT -T- http://127.0.0.1/rw/20271139d6dcf6c7a611f08000b42e99a765f0d2b3998a74b7460f96165dba35a0cb41/blonk.txt
curl http://127.0.0.1/ro/20260618e7c00c8b616b6e36fdc9a524bf9101d85b74e67601ce150faa5a80db68c7a3/blonk.txt
curl http://127.0.0.1/rw/20260618e7c00c8b616b6e36fdc9a524bf9101d85b74e67601ce150faa5a80db68c7a3/blonk.txt