From dc4d907a3f9758730d249cb430ebc52c9d54a075 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 19 Jul 2012 22:42:18 +0200 Subject: [PATCH] imap user backend --- appinfo/app.php | 2 ++ appinfo/info.xml | 13 +++++++++++++ appinfo/version | 1 + lib/imap.php | 40 ++++++++++++++++++++++++++++++++++++++++ tests/config.php | 16 ++++++++++++++++ tests/imap.php | 34 ++++++++++++++++++++++++++++++++++ 6 files changed, 106 insertions(+) create mode 100644 appinfo/app.php create mode 100644 appinfo/info.xml create mode 100644 appinfo/version create mode 100644 lib/imap.php create mode 100644 tests/config.php create mode 100644 tests/imap.php diff --git a/appinfo/app.php b/appinfo/app.php new file mode 100644 index 0000000..e53b839 --- /dev/null +++ b/appinfo/app.php @@ -0,0 +1,2 @@ + + + user_external + External user support + Use external user authentication methods + AGPL + Robin Appelman + 4 + true + + + + diff --git a/appinfo/version b/appinfo/version new file mode 100644 index 0000000..ceab6e1 --- /dev/null +++ b/appinfo/version @@ -0,0 +1 @@ +0.1 \ No newline at end of file diff --git a/lib/imap.php b/lib/imap.php new file mode 100644 index 0000000..584e980 --- /dev/null +++ b/lib/imap.php @@ -0,0 +1,40 @@ + + * 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/tests/config.php b/tests/config.php new file mode 100644 index 0000000..a32ad5d --- /dev/null +++ b/tests/config.php @@ -0,0 +1,16 @@ + + * 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/tests/imap.php b/tests/imap.php new file mode 100644 index 0000000..c703b32 --- /dev/null +++ b/tests/imap.php @@ -0,0 +1,34 @@ + + * 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')); + } +}