From 57fb37151a6c29d857733c78e3b00909aabaf413 Mon Sep 17 00:00:00 2001 From: Robin Appelman <icewind@owncloud.com> Date: Thu, 19 Jul 2012 22:42:18 +0200 Subject: [PATCH] imap user backend --- apps/user_external/appinfo/app.php | 2 ++ apps/user_external/appinfo/info.xml | 13 ++++++++++ apps/user_external/appinfo/version | 1 + apps/user_external/lib/imap.php | 40 +++++++++++++++++++++++++++++ apps/user_external/tests/config.php | 16 ++++++++++++ apps/user_external/tests/imap.php | 34 ++++++++++++++++++++++++ 6 files changed, 106 insertions(+) create mode 100644 apps/user_external/appinfo/app.php create mode 100644 apps/user_external/appinfo/info.xml create mode 100644 apps/user_external/appinfo/version create mode 100644 apps/user_external/lib/imap.php create mode 100644 apps/user_external/tests/config.php create mode 100644 apps/user_external/tests/imap.php diff --git a/apps/user_external/appinfo/app.php b/apps/user_external/appinfo/app.php new file mode 100644 index 0000000000..e53b839daf --- /dev/null +++ b/apps/user_external/appinfo/app.php @@ -0,0 +1,2 @@ +<?php +OC::$CLASSPATH['OC_User_IMAP']='apps/user_external/lib/imap.php'; diff --git a/apps/user_external/appinfo/info.xml b/apps/user_external/appinfo/info.xml new file mode 100644 index 0000000000..1d1dcee540 --- /dev/null +++ b/apps/user_external/appinfo/info.xml @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<info> + <id>user_external</id> + <name>External user support</name> + <description>Use external user authentication methods</description> + <licence>AGPL</licence> + <author>Robin Appelman</author> + <require>4</require> + <shipped>true</shipped> + <types> + <authentication/> + </types> +</info> diff --git a/apps/user_external/appinfo/version b/apps/user_external/appinfo/version new file mode 100644 index 0000000000..ceab6e11ec --- /dev/null +++ b/apps/user_external/appinfo/version @@ -0,0 +1 @@ +0.1 \ No newline at end of file diff --git a/apps/user_external/lib/imap.php b/apps/user_external/lib/imap.php new file mode 100644 index 0000000000..584e9804b1 --- /dev/null +++ b/apps/user_external/lib/imap.php @@ -0,0 +1,40 @@ +<?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); + return $uid; + }else{ + return false; + } + } + + public function userExists($uid){ + return true; + } +} + diff --git a/apps/user_external/tests/config.php b/apps/user_external/tests/config.php new file mode 100644 index 0000000000..a32ad5d83a --- /dev/null +++ b/apps/user_external/tests/config.php @@ -0,0 +1,16 @@ +<?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. + */ + +return array( + 'imap'=>array( + 'run'=>false, + 'mailbox'=>'{imap.gmail.com:993/imap/ssl}INBOX', //see http://php.net/manual/en/function.imap-open.php + 'user'=>'foo',//valid username/password combination + 'password'=>'bar', + ), +); diff --git a/apps/user_external/tests/imap.php b/apps/user_external/tests/imap.php new file mode 100644 index 0000000000..c703b32107 --- /dev/null +++ b/apps/user_external/tests/imap.php @@ -0,0 +1,34 @@ +<?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 Test_User_Imap extends UnitTestCase{ + /** + * @var OC_User_IMAP $instance + */ + private $instance; + + private function getConfig(){ + return include(__DIR__.'/config.php'); + } + + function skip(){ + $config=$this->getConfig(); + $this->skipUnless($config['imap']['run']); + } + + function setUp(){ + $config=$this->getConfig(); + $this->instance=new OC_User_IMAP($config['imap']['mailbox']); + } + + function testLogin(){ + $config=$this->getConfig(); + $this->assertEqual($config['imap']['user'],$this->instance->checkPassword($config['imap']['user'],$config['imap']['password'])); + $this->assertFalse($this->instance->checkPassword($config['imap']['user'],$config['imap']['password'].'foo')); + } +} -- GitLab