roundcube_logo Installer le plugin Roundcube dans ownCloud n’est pas aussi simple que cela. Ce billet décrit une telle installation avec une authentification rownCloud avec le serveur IMAP de son choix.

Nous allons voir ici une installation qui fonctionne sur une distribution Debian avec un serveur NGinx et les versions suivantes:

  • ownCloud 5.0.12
  • Roundcube Webmail 0.9.2, puis 0.9.5

Prérequis

Le cas d’utilisation décrit ici, implique que ownCloud et Roundcube tournent sur un même serveur, avec le même utilisateur (par exemple www-data) et sont installé dans le même répertoire, par exemple /var/www/moncloud. Avec cela nous avons donc la structure de répertoire suivante:

/var/www/moncloud/owncloud /var/www/moncloud/mail

Installation

D’abord installer le plugin RoundCube pour ownCloud.

Avec l’utilisateur root:

cd /tmp git clone https://github.com/hypery2k/owncloud.git cp -R /tmp/owncloud/apps/roundcube /var/www/owncloud/apps/. chown -R www-data:www-data roundcube

Activer le plugin via l’interface de ownCloud.

Ensuite paramétrer l’authentification avec le serveur IMAP.

Éditer le fichier /config/config.php, ajouter (ou modifier) les éléments ci-dessous.

<?php  
  require_once(dirname(__FILE__).'/../apps/user_external/lib/imap.php');
  $CONFIG = array ( ...

et plus loin:

...
 'user_backends' => array(
    0 => array(
      'class' => 'OC_User_IMAP',
      'arguments' => array(
        0 => '{monserveurimap.com:993/imap/tls/novalidate-cert}INBOX',
      ),
    ),
 ), ...

Éditer le fichier /apps/user_external/lib/imap.php, et le modifier comme ci-dessous:

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

supprimer les lignes:

 public function userExists($uid) { return true; }

Ce patch permet de:

  1.  Vérifier le mot de passe de l’utilisateur auprès du serveur externe
  2.  Si la vérification est bonne, vérifie l’existence du compte utilisateur dans la base Owncloud 1. Si l’utilisateur existe dans la base, met à jour le mot de passe
  3. Si l’utilisateur n’existe pas dans la base, le crée, et1. sépare le nom d’utilisateur au niveau du ‘@’ (en assumant qu’il s’agit d’un mail)
  4. crée le groupe Owncloud en utilisant le nom de domaine du mail et ajoute l’utilisateur créé dans ce domaine
  5.     Enfin, supprime le code qui retourne “true” pour toutes les requête userExists()

Paramétrer NGinx

Ci-dessous un exemple de fichier basique de configuration NGinx:

# redirect http to https.
 server {
   listen 80;
   server_name_in_redirect on;
   server_name moncloud.com;
   rewrite ^ https://$server_name$request_uri? permanent;  # enforce https  }
 # owncloud (ssl/tls) server {
   listen 443 ssl;
   server_name_in_redirect on;
   server_name moncloud.com;
   ssl_certificate      /srv/ssl/moncertificat.pem;
   ssl_certificate_key  /srv/ssl/moncertificat.com.key;
   root /var/www/moncloud/owncloud;
   index index.php;
   client_max_body_size 300M;
 # set maximum upload size
   fastcgi_buffers 64 4K;
  # deny direct access
 location ~ ^/owncloud/(data|config|\.ht|db_structure\.xml|README) {
 deny all;
 }
 # default try order
 location / {
 try_files $uri $uri/ index.php;
 }
 ## # Roundcube ##
 location ~ ^/mail(/.+?\.php) {
 root /var/www/moncloud;
 fastcgi_index index.php;
 fastcgi_param PATH_INFO $1;
 include fastcgi_params;
 fastcgi_pass 127.0.0.1:9000;
 }
 location ~ ^/mail {
 root /var/www/moncloud;
 }
 # owncloud WebDAV
 location @webdav {
 fastcgi_split_path_info ^(.+\.php)(/.*)$;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param HTTPS on;
 include fastcgi_params;
 }
 # enable php
 location ~ ^(?<script_name>.+?\.php)(?<path_info>/.*)?$ {
 try_files $script_name = 404;
 include fastcgi_params;
 fastcgi_param PATH_INFO $path_info;
 fastcgi_param HTTPS on;
 fastcgi_pass 127.0.0.1:9000;
 }
 }

Sources

https://github.com/hypery2k/owncloud/wiki/Installation https://github.com/owncloud/apps/issues/302
http://forum.owncloud.org/viewtopic.php?f=23&t=13276