diff options
author | Robin Appelman <icewind@owncloud.com> | 2012-07-19 22:42:18 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-07-19 22:42:18 +0200 |
commit | 57fb37151a6c29d857733c78e3b00909aabaf413 (patch) | |
tree | 1ac8e5cf73e599a79c03f5dd7d3f5fbd1db6780a | |
parent | 33b8de91eacc09a4c15d4d45df0006ff80a9fb09 (diff) | |
download | nextcloud-server-57fb37151a6c29d857733c78e3b00909aabaf413.tar.gz nextcloud-server-57fb37151a6c29d857733c78e3b00909aabaf413.zip |
imap user backend
-rw-r--r-- | apps/user_external/appinfo/app.php | 2 | ||||
-rw-r--r-- | apps/user_external/appinfo/info.xml | 13 | ||||
-rw-r--r-- | apps/user_external/appinfo/version | 1 | ||||
-rw-r--r-- | apps/user_external/lib/imap.php | 40 | ||||
-rw-r--r-- | apps/user_external/tests/config.php | 16 | ||||
-rw-r--r-- | apps/user_external/tests/imap.php | 34 |
6 files changed, 106 insertions, 0 deletions
diff --git a/apps/user_external/appinfo/app.php b/apps/user_external/appinfo/app.php new file mode 100644 index 00000000000..e53b839daf5 --- /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 00000000000..1d1dcee5401 --- /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 00000000000..ceab6e11ece --- /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 00000000000..584e9804b18 --- /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 00000000000..a32ad5d83a2 --- /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 00000000000..c703b32107f --- /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')); + } +} |