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

Die Mög­lich­keit, Ord­ner und Datei­en über meh­re­re Gerä­te zu syn­chro­ni­sie­ren, möch­te ich nicht mehr mis­sen. Egal ob ich auf der Arbeit, zu Hau­se oder unter­wegs bin — über­all habe ich den glei­chen Daten­be­stand.

Wenn ich ver­schie­de­ne Diens­te im Netz nut­ze, brau­che ich meist für jeden eine eige­ne App bzw. ein eige­nes Pro­gramm. Eini­ge Diens­te schei­nen auf den ers­ten Blick gar kei­ne Syn­chro­ni­sa­ti­on zu erlau­ben (z.B. der FTP-Zugang für den Webs­pace). Dafür gibt es eine Lösung über Own­cloud. Own­cloud kann näm­lich schon sehr lan­ge exter­ne Daten­quel­len ein­bin­den.

Dazu muss man sich zunächst ein­mal bei Own­cloud als Admi­nis­tra­tor ein­log­gen und unter Apps auf das +-Zei­chen kli­cken.

owncloud01Danach akti­viert man unter „not enab­led” das Plug­in „Exter­nal Sto­ra­ge”.

owncloud02Anschlie­ßend muss man in den Admin­be­reich gehen

owncloud03… und allen Nut­zern erlau­ben, das Plug­in zu nut­zen:

owncloud05Dabei sind die unter­schied­lichs­ten Pro­to­kol­le mög­lich, z.B. auch ande­re Own­cloud­sys­te­me. Man kann auch glo­ba­le Ord­ner defi­nie­ren, die allen oder nur eini­gen Nut­zern der Own­cloud-Instanz zur Ver­fü­gung ste­hen. Anschlie­ßend kann sich jeder Nut­zer unter dem Men­u­punkt „Per­so­nal” eige­ne Daten­quel­len defi­nie­ren:

owncloud06Natür­lich kann ich auch nur ein­zel­ne Ord­ner der exter­nen Quel­le syn­chro­ni­sie­ren:

owncloud07Own­cloud ver­hält sich gegen­über den exter­nen Quel­len wie ein nor­ma­ler Cli­ent, d.h. es wer­den kei­ne Daten auf dem Own­cloud­ser­ver gespei­chert — er stellt ledig­lich die Schnitt­stel­le zu ande­ren Diens­ten hier.

Der Trick ist, dass ich für alle die­se Diens­te dann nur noch eine App auf dem Tablet, dem Smart­pho­ne oder dem Rech­ner benö­ti­ge, um mit ganz unter­schied­li­chen Quel­len Datei­en und Daten aus­zu­tau­schen, auch wenn die­se offi­zi­ell über­haupt kei­ne Syn­chro­ni­sa­ti­ons­funk­ti­on unter­stüt­zen. Die­se Diens­te erschei­nen in der Own­cloud-App ein­fach unter dem Namen, den ich für den Ord­ner ver­ge­ben habe.

Eine Syn­chro­ni­sa­ti­ons­app für IServ, mei­nen Lan­des­ser­ver, Goog­le, jeden belie­bi­gen Webs­pace usw. — reiz­voll — oder?

Owncloud an bestehende Authentifizierungsysteme anbinden

Own­cloud bie­tet ab der Ver­si­on 6 neben den übli­chen inter­es­san­ten Fea­tures eine kol­la­bo­ra­ti­ve Text­ver­ar­bei­tung an, d.h. meh­re­re Benut­zer kön­nen genau wie bei Ether­pad oder Ether­pad lite gleich­zei­tig an einem Doku­ment arbei­ten. Die For­ma­tie­rungs­mög­lich­kei­ten sind dabei umfang­rei­cher als bei der Ether­pad­de­ri­va­ten, jedoch gegen­über Lösun­gen wir Goog­le­Docs noch recht rudi­men­tär. Für vie­le Anwen­dungs­fäl­le reicht es jedoch voll­auf. Wer möch­te, darf das hier nach Ein­ga­be eines Spitz­na­mens ger­ne ein­mal aus­pro­bie­ren. Own­cloud nutzt ODT als nati­ves For­mat.

Vie­le Schu­len möch­ten ger­ne Own­cloud nut­zen und ver­fü­gen oft schon über eine Schul­ser­ver­lö­sung. Idea­ler­wei­se bie­tet die­se bereits E-Mail­adres­sen für alle Schul­an­ge­hö­ri­gen über das IMAP-Pro­to­koll an. Das ist z.B. bei IServ der Fall — einer in Nie­der­sach­sen sehr ver­brei­te­ten Lösung. Durch zwei klei­ne Ände­run­gen muss kei­ne sepa­ra­te Nut­zer­ver­wal­tung in Own­cloud mehr betrie­ben wer­den, wenn bereits ein IMAP-Ser­ver im Schul­netz vor­han­den ist.

Es kann eine Grund­in­stal­la­ti­on von Own­cloud als Basis genom­men wer­den. Bei den Apps muss „Exter­nal user sup­port” zuvor akti­viert wer­den. Eine Datei ist danach zu ändern, eine hin­zu­zu­fü­gen.

Zu ändern­de Datei

Name: config/config.php

Quell­code:

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}')
   )
  ),
);

Kom­men­tar:
In Zei­le 2 wird der neu zu erstel­len­de Code (s.u.) ein­ge­bun­den, ab Zei­le 17 wird es inter­es­sant, vor allem in der Zei­le, die mit „argu­ments” beginnt. Die Anga­ben für Ser­ver und Port sind mit den eige­nen Anga­ben zu fül­len. Ich brau­che für den IServ die Anga­be „nova­li­da­te-cert”, da es sich um ein selbst­si­gnier­tes Cert han­delt — daher zicken auch Apple­ge­rä­te ger­ne mit dem IServ, weil sie sich in der Feh­ler­mel­dung nicht klar aus­drü­cken. Nutzt man eine unver­schlüs­sel­te Ver­bin­dung, was allen­falls zu Test­zwe­cken dien­lich ist, sieht das z.B. so aus:

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

Hin­zu­zu­fü­gen­de Datei:

Name: apps/user_external/lib/imap_new.php

Quell­code:

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;
                }
        }
 
}

Kom­men­tar:
Die­ses Code­stück sorgt dafür, dass beim ers­ten Log­in eines Benut­zers ein Ein­trag in die User-Daten­bank von Own­cloud erfolgt. Dabei wird auch das Pass­wort ver­schlüs­selt gespei­chert, da ansons­ten kei­ne Nut­zung über die Apps von Own­cloud mög­lich ist. Der Nut­zer muss sich mit den glei­chen Daten wie am E-Mail­ser­ver anmel­den. Ändert der Nut­zer sein Pass­wort im IServ oder auf dem E-Mail­ser­ver, wird die­se Ände­rung bei bestehen­dem Log­in in Own­cloud über­nom­men.

Update:
Mit dem Hack funk­tio­niert auch die Nut­zung mit der Own­cloud-App pro­blem­los.