Über Owncloud mit Quellen syncen, die eigentlich nicht syncen können

Die Möglichkeit, Ordner und Dateien über mehrere Geräte zu synchronisieren, möchte ich nicht mehr missen. Egal ob ich auf der Arbeit, zu Hause oder unterwegs bin – überall habe ich den gleichen Datenbestand.

Wenn ich verschiedene Dienste im Netz nutze, brauche ich meist für jeden eine eigene App bzw. ein eigenes Programm. Einige Dienste scheinen auf den ersten Blick gar keine Synchronisation zu erlauben (z.B. der FTP-Zugang für den Webspace). Dafür gibt es eine Lösung über Owncloud. Owncloud kann nämlich schon sehr lange externe Datenquellen einbinden.

Dazu muss man sich zunächst einmal bei Owncloud als Administrator einloggen und unter Apps auf das +-Zeichen klicken.

owncloud01Danach aktiviert man unter „not enabled“ das Plugin „External Storage“.

owncloud02Anschließend muss man in den Adminbereich gehen

owncloud03… und allen Nutzern erlauben, das Plugin zu nutzen:

owncloud05Dabei sind die unterschiedlichsten Protokolle möglich, z.B. auch andere Owncloudsysteme. Man kann auch globale Ordner definieren, die allen oder nur einigen Nutzern der Owncloud-Instanz zur Verfügung stehen. Anschließend kann sich jeder Nutzer unter dem Menupunkt „Personal“ eigene Datenquellen definieren:

owncloud06Natürlich kann ich auch nur einzelne Ordner der externen Quelle synchronisieren:

owncloud07Owncloud verhält sich gegenüber den externen Quellen wie ein normaler Client, d.h. es werden keine Daten auf dem Owncloudserver gespeichert – er stellt lediglich die Schnittstelle zu anderen Diensten hier.

Der Trick ist, dass ich für alle diese Dienste dann nur noch eine App auf dem Tablet, dem Smartphone oder dem Rechner benötige, um mit ganz unterschiedlichen Quellen Dateien und Daten auszutauschen, auch wenn diese offiziell überhaupt keine Synchronisationsfunktion unterstützen. Diese Dienste erscheinen in der Owncloud-App einfach unter dem Namen, den ich für den Ordner vergeben habe.

Eine Synchronisationsapp für IServ, meinen Landesserver, Google, jeden beliebigen Webspace usw. – reizvoll – oder?

Owncloud an bestehende Authentifizierungsysteme anbinden

Owncloud bietet ab der Version 6 neben den üblichen interessanten Features eine kollaborative Textverarbeitung an, d.h. mehrere Benutzer können genau wie bei Etherpad oder Etherpad lite gleichzeitig an einem Dokument arbeiten. Die Formatierungsmöglichkeiten sind dabei umfangreicher als bei der Etherpadderivaten, jedoch gegenüber Lösungen wir GoogleDocs noch recht rudimentär. Für viele Anwendungsfälle reicht es jedoch vollauf. Wer möchte, darf das hier nach Eingabe eines Spitznamens gerne einmal ausprobieren. Owncloud nutzt ODT als natives Format.

Viele Schulen möchten gerne Owncloud nutzen und verfügen oft schon über eine Schulserverlösung. Idealerweise bietet diese bereits E-Mailadressen für alle Schulangehörigen über das IMAP-Protokoll an. Das ist z.B. bei IServ der Fall – einer in Niedersachsen sehr verbreiteten Lösung. Durch zwei kleine Änderungen muss keine separate Nutzerverwaltung in Owncloud mehr betrieben werden, wenn bereits ein IMAP-Server im Schulnetz vorhanden ist.

Es kann eine Grundinstallation von Owncloud als Basis genommen werden. Bei den Apps muss „External user support“ zuvor aktiviert werden. Eine Datei ist danach zu ändern, eine hinzuzufügen.

Zu ändernde Datei

Name: config/config.php

Quellcode:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
require_once(dirname(__FILE__).'/../apps/user_external/lib/imap_new.php');
 
$CONFIG = array (
  'instanceid' => '<hier_steht_schon_etwas>',
  'passwordsalt' => '<hier_steht_schon_etwas>',
  'datadirectory' => '<hier_steht_schon_etwas>',
  'dbtype' => 'mysql',
  'version' => '6.0.0.14',
  'dbname' => '<hier_steht_schon_etwas>',
  'dbhost' => 'localhost',
  'dbtableprefix' => 'oc_',
  'dbuser' => '<hier_steht_schon_etwas>',
  'dbpassword' => '<hier_steht_schon_etwas>',
  'installed' => true,
  'forcessl' => true,
  'user_backends'=>array(
   array(
      'class'=>'OC_User_IMAP',
      'arguments'=>array('{<server>:<port>/imap/ssl/novalidate-cert}')
   )
  ),
);

Kommentar:
In Zeile 2 wird der neu zu erstellende Code (s.u.) eingebunden, ab Zeile 17 wird es interessant, vor allem in der Zeile, die mit „arguments“ beginnt. Die Angaben für Server und Port sind mit den eigenen Angaben zu füllen. Ich brauche für den IServ die Angabe „novalidate-cert“, da es sich um ein selbstsigniertes Cert handelt – daher zicken auch Applegeräte gerne mit dem IServ, weil sie sich in der Fehlermeldung nicht klar ausdrücken. Nutzt man eine unverschlüsselte Verbindung, was allenfalls zu Testzwecken dienlich ist, sieht das z.B. so aus:

      'arguments'=>array('{meinserver.xy:143/imap}')

Hinzuzufügende Datei:

Name: apps/user_external/lib/imap_new.php

Quellcode:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
/**
 * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
 * This file is licensed under the Affero General Public License version 3 or
 * later.
 * See the COPYING-README file.
 */
 
class OC_User_IMAP extends OC_User_Backend{
        private $mailbox;
 
        public function __construct($mailbox) {
                $this->mailbox=$mailbox;
        }
 
        /**
         * @brief Check if the password is correct
         * @param $uid The username
         * @param $password The password
         * @returns true/false
         *
         * Check if the password is correct without logging in the user
         */
        public function checkPassword($uid, $password) {
 
                $mbox = @imap_open($this->mailbox, $uid, $password);
                imap_errors();
                imap_alerts();
 
 
                if($mbox) {
                        imap_close($mbox);
 
                        if(OC_User::userExists($uid)) {
                                  OC_User::setPassword($uid, $password);
                        } else {
                                  OC_User::createUser($uid, $password);
                                  $uida=explode('@',$uid,2);
                                  if(($uida[1] || '') !== '') {
                                        OC_Group::createGroup($uida[1]);
                                        OC_Group::addToGroup($uid, $uida[1]);
                       }
 
                }
                        return $uid;
                } else {
                        return false;
                }
        }
 
}

Kommentar:
Dieses Codestück sorgt dafür, dass beim ersten Login eines Benutzers ein Eintrag in die User-Datenbank von Owncloud erfolgt. Dabei wird auch das Passwort verschlüsselt gespeichert, da ansonsten keine Nutzung über die Apps von Owncloud möglich ist. Der Nutzer muss sich mit den gleichen Daten wie am E-Mailserver anmelden. Ändert der Nutzer sein Passwort im IServ oder auf dem E-Mailserver, wird diese Änderung bei bestehendem Login in Owncloud übernommen.

Update:
Mit dem Hack funktioniert auch die Nutzung mit der Owncloud-App problemlos.