tine-groupware/tine

Zugriff über Android (Dateimanager)

Closed this issue · 17 comments

Gibt es einen Weg unter Android auf die Dateien zuzugreifen Geht neuerdings mit keinen der Google Play Cliens mehr.

Wie sieht der Fehler aus? Wie die URL?

Bei mir werden mit /webdav zwar Ordner angezeigt, ich kann die aber nicht auswählen ("Not found"). Wenn ich nur die Domain angebe, kann ich Filemanager auswählen und dann sind alle Ordner sichtbar. Client ist FV Datei Explorer.

Die einzige möglichkeit sich einzuloggen ist unter Cirrus. dort kann ich aber neuere Dateien nicht mehr öffnen Alle anderen Clients sagen veraltetes Protokoll. Webdav geht nur über Total Comander aber kein Zugriff Password wird nicht akzeptiert.

Das hilft leider nicht. Benutzt du Apache als Webserver (in der config/htaccess hatte ich was umzustellen, aber wäre Zufall wenn auch bei dir so...)? Hast du ein Log? Der o.g. Android Dateibrowser kann meine Dateien in Tine über WebDAV öffnen... EDIT: Ich hatte auch noch einen Uralt-owncloud client auf dem Handy, der ging auch.

logs habe ich keine. mein hoster benutzt Apache. Bei mir funktioniert nur der Uralt Client, nur dass ich neuere Dateien (EPUB) nicht mehr öffnen kann. bei alten Dateien geht es. Es wird kein Fehler angezeigt nur die Option öffnen steht halt nicht zur Verfügung.

Ich hatte heute in der Familie einen Fall mit Windows 10-Client. Da kam wieder das CONTENT_LENGTH-Problem. Vielleicht ist es das auch bei dir? Für einen Workaround siehe #6.

Login klappt jetzt. Wenn ich aber versuche die Ordner zu öffnen sagt er nur Datei nicht vorhanden.

Ja, sowas habe ich auch. Also Übersicht wird angezeigt, kann nur keine Datei öffnen. Muß mal checken, ob das mit nginx geht.

Hast du ein Log? Da muss dann was drin stehen mit "GET" und "not found" und "expressive" Router.

Nein, Nur die Meldung das die Datei nicht existiert..

Ok, ähnlich aber anders. Bei dir kommt INFO (6): Tinebase_Expressive_Middleware_FastRoute::process::67 returning 404 method not found schon beim PROPFIND, was ich durch den Workaround mit Content-Length (siehe oben) abstellen konnte.

Ich habe das Problem, dass nachdem der PROPFIND durch ist, der 404-Routingfehler beim GET auftaucht. D.h. nicht schon beim Lesen des Verzeichnisinhalts, sondern erst beim Öffnen der Dateien.

Hab die Zeile aus dem Workaround eingefügt, ändert aber nichts.
Muss ich die an einer bestimmten Stelle einfügen?

Du verwendest eine .htaccess-Datei? Dann dort vor die Rewrites. Und ins Log schauen, ob es eine Fehlermeldung gibt.

Danke, ändert nichts.

Magst du mal deine .htaccess-Datei posten? Du verwendest ja kein nginx, oder? Bei welchem Hoster bist du?

Bei mir sieht die Config so aus, ist aber direkt in der Apache Config als <VirtualHost, nicht in separater Datei (vermutlich hast du deshalb führende / bei den Rewrites).

Um WebDAV voll nutzen zu können, brauchte ich einerseits den o.g. Tweak, andererseits musste ich den User-Agent abfangen. Hier mal die relevanten Fixes (die Zeilen unter dem Kommentar FIX):

 #
 # Tine 2.0
 #

 ProxyTimeout 1860
 ProxyPass /ocs/ !
 ProxyPass /remote.php !
 # FIX: PHP does not include Content-Length into HTTP_*
 SetEnvIf Content-Length "(.*)" HTTP_CONTENT_LENGTH=$1
 ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/tine/$1

 <Directory /var/www/tine>
  Options FollowSymlinks
  DirectoryIndex index.php
  AllowOverride All
  Require all granted

  RewriteEngine On

  # ActiveSync
  RewriteBase /
  RewriteRule ^Microsoft-Server-ActiveSync index.php?frontend=activesync [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

  # OpenID
  RewriteRule ^users/(.*) index.php?frontend=openid&username=$1 [L,QSA]

  # Anonymous downloads
  RewriteRule ^download/get/(.*)  index.php?method=Download.downloadNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
  RewriteRule ^download/show/(.*) index.php?method=Download.displayNode&path=$1  [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

  # *DAV well known
  RewriteRule ^\.well-known/caldav  calendars    [R]
  RewriteRule ^\.well-known/carddav addressbooks [R]

  # Tine's nginx config mentiones: see #177979: [VS] rewrite rule für webdav auf / (root folder)
  # iPhone + only office + other broken clients
  RewriteCond "%{HTTP_USER_AGENT}" "^Documents/" [OR]
  RewriteCond "%{HTTP_USER_AGENT}" "^Dokumente/.*CFNetwork/" [OR]
  RewriteCond "%{HTTP_USER_AGENT}" "^okhttp/" [OR]
  # FIX 2: Force webdav for Gnome Virtual File System
  RewriteCond "%{HTTP_USER_AGENT}" "^gvfs/" [OR]
  # FIX 3: Force webdav for Windows Clients and those pretending (therefore without '^')
  RewriteCond "%{HTTP_USER_AGENT}" "Microsoft-WebDAV-MiniRedir/" [OR]
  RewriteCond "%{HTTP_USER_AGENT}" "^Dalvik/"
  RewriteRule ^.*$          index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

  # *DAV
  RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
  RewriteRule ^.*$          index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
  RewriteRule ^addressbooks index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
  RewriteRule ^calendars    index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
  RewriteRule ^principals   index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
  RewriteRule ^webdav       index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
  RewriteRule ^remote.php   index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

  # SabreDAV Images
  RewriteCond %{QUERY_STRING} ^sabreAction=asset&(.*)$
  RewriteRule ^ webdav [L,QSA]

  # Static Files & Routing
  RewriteCond %{REQUEST_FILENAME} -s [OR]
  RewriteCond %{REQUEST_FILENAME} -l [OR]
  RewriteCond %{REQUEST_FILENAME} -d
  RewriteRule ^.*$ - [NC,L]
  RewriteRule ^.*$ /index.php?doRouting=1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

  # caching
  ExpiresActive On
  ExpiresDefault A604800
  ExpiresByType image/x-icon A604800
  ExpiresByType image/jpeg A604800
  ExpiresByType image/png A604800
  ExpiresByType image/gif A604800
  ExpiresByType image/js A604800
  ExpiresByType application/x-shockwave-flash A604800
  SetOutputFilter DEFLATE
  FileETag None
 </Directory>

Der erste Block übergibt an PHP, der FIX muss davor stehen. Wie auch immer bei dir die Übergabe funktioniert, /ocs/ und /remote.php dürfen nicht unmittelbar übergeben werden - das ist die Kompatibilitätsschicht für ownCloud / nextCloud.

Getestet mit Windows 11 und Gnome 45.3.

Falls es das löst, schließe bitte den issue. Ich mache ohnehin einen neuen auf.

Hoster: All-Inkl

.htaccess:

DirectoryIndex index.php

Header always set X-Content-Type-Options nosniff
Header set  Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header set X-Frame-Options SAMEORIGIN
Header unset Content-Security-Policy
Header always set Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'"
Header unset X-Content-Security-Policy
Header add X-Content-Security-Policy "default-src 'self'"
Header unset X-WebKit-CSP
Header add X-WebKit-CSP "default-src 'self'"
Header set X-XSS-Protection: "1;mode=block"

SetEnvIf Content-Length "(.*)" HTTP_CONTENT_LENGTH=$1

#<IfModule mod_php5.c>
#      Define PHP_MODULE_INSTALLED
#</IfModule>

<IfModule mod_php7.4.c>
      Define PHP_MODULE_INSTALLED
</IfModule>

<IfDefine PHP_MODULE_INSTALLED>
    php_value max_input_time 120
    php_value session.gc_maxlifetime 86400
    php_value memory_limit 128M
    php_value upload_max_filesize 20M
    php_value post_max_size 20M
    php_value safe_mode off
    php_flag display_errors off
    php_flag log_errors on
    php_flag magic_quotes_gpc off
    php_flag magic_quotes_runtime off
    php_flag register_globals off
    php_value max_execution_time 90
</IfDefine>

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    RewriteRule ^index(.*)                   index.php
    # ActiveSync
    RewriteRule ^Microsoft-Server-ActiveSync index.php?frontend=activesync         [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    # OpenID
    RewriteRule ^users/(.*)                  index.php?frontend=openid&username=$1 [L,QSA]

    # WebDAV / CalDAV / CardDAV
    RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
    RewriteRule ^$                           index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    RewriteRule ^addressbooks                index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^calendars                   index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^webdav                      index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^principals                  index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^remote.php                  index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    # Anonymous downloads
    RewriteRule ^download/get/(.*)           index.php?method=Download.downloadNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^download/show/(.*)          index.php?method=Download.displayNode&path=$1  [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    # Routing
#    <Location />
        RewriteCond %{REQUEST_FILENAME} -s [OR]
        RewriteCond %{REQUEST_FILENAME} -l [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^.*$ index.php?doRouting=1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
#     </Location>
</IfModule>

<IfModule mod_expires.c>
    ExpiresActive on

    ExpiresByType image/gif "access plus 1 month 1 days"
    ExpiresByType image/jpeg "access plus 1 month 1 days"
    ExpiresByType image/png "access plus 1 month 1 days"
</IfModule>

Das SetEnvIfpasst. Am Anfang deines WebDAV-Blocks würde ich RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$ empfehlen (also zusätzlich HEAD), eine Zeile drauf ist besser die URI mitzunehmen RewriteRule ^.*$. Für die letzte Änderung setze noch vor den WebDAV-Block die Einzelroutings.

Ich würde die .htaccess so zusammensetzen:

DirectoryIndex index.php

Header always set X-Content-Type-Options nosniff
Header set  Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header set X-Frame-Options SAMEORIGIN
Header unset Content-Security-Policy
Header always set Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'"
Header unset X-Content-Security-Policy
Header add X-Content-Security-Policy "default-src 'self'"
Header unset X-WebKit-CSP
Header add X-WebKit-CSP "default-src 'self'"
Header set X-XSS-Protection: "1;mode=block"

SetEnvIf Content-Length "(.*)" HTTP_CONTENT_LENGTH=$1

#<IfModule mod_php5.c>
#      Define PHP_MODULE_INSTALLED
#</IfModule>

<IfModule mod_php7.4.c>
      Define PHP_MODULE_INSTALLED
</IfModule>

<IfDefine PHP_MODULE_INSTALLED>
    php_value max_input_time 120
    php_value session.gc_maxlifetime 86400
    php_value memory_limit 128M
    php_value upload_max_filesize 20M
    php_value post_max_size 20M
    php_value safe_mode off
    php_flag display_errors off
    php_flag log_errors on
    php_flag magic_quotes_gpc off
    php_flag magic_quotes_runtime off
    php_flag register_globals off
    php_value max_execution_time 90
</IfDefine>

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    RewriteRule ^index(.*)                   index.php
    # ActiveSync
    RewriteRule ^Microsoft-Server-ActiveSync index.php?frontend=activesync         [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    # OpenID
    RewriteRule ^users/(.*)                  index.php?frontend=openid&username=$1 [L,QSA]

    # Tine's nginx config mentiones: see #177979: [VS] rewrite rule für webdav auf / (root folder)
    # iPhone + only office + other broken clients
    RewriteCond "%{HTTP_USER_AGENT}" "^Documents/" [OR]
    RewriteCond "%{HTTP_USER_AGENT}" "^Dokumente/.*CFNetwork/" [OR]
    RewriteCond "%{HTTP_USER_AGENT}" "^okhttp/" [OR]
    # FIX 2: Force webdav for Gnome Virtual File System
    RewriteCond "%{HTTP_USER_AGENT}" "^gvfs/" [OR]
    # FIX 3: Force webdav for Windows Clients and those pretending (therefore without '^')
    RewriteCond "%{HTTP_USER_AGENT}" "Microsoft-WebDAV-MiniRedir/" [OR]
    RewriteCond "%{HTTP_USER_AGENT}" "^Dalvik/"
    RewriteRule ^.*$                         index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    # WebDAV / CalDAV / CardDAV
    RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
    RewriteRule ^.*$                         index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    RewriteRule ^addressbooks                index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^calendars                   index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^webdav                      index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^principals                  index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^remote.php                  index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    # Anonymous downloads
    RewriteRule ^download/get/(.*)           index.php?method=Download.downloadNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^download/show/(.*)          index.php?method=Download.displayNode&path=$1  [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    # Routing
#    <Location />
        RewriteCond %{REQUEST_FILENAME} -s [OR]
        RewriteCond %{REQUEST_FILENAME} -l [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^.*$ index.php?doRouting=1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
#     </Location>
</IfModule>

<IfModule mod_expires.c>
    ExpiresActive on

    ExpiresByType image/gif "access plus 1 month 1 days"
    ExpiresByType image/jpeg "access plus 1 month 1 days"
    ExpiresByType image/png "access plus 1 month 1 days"
</IfModule>

Kannst du das probieren?

Jetzt funktioniert WebDav.

Danke.