diff --git a/apps/user_external/appinfo/app.php b/apps/user_external/appinfo/app.php new file mode 100644 index 0000000000000000000000000000000000000000..e53b839daf57344adfe24656f0c6dc67a0696ec4 --- /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 0000000000000000000000000000000000000000..1d1dcee54012ef6b5374624635ed9d1ddae44a64 --- /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 0000000000000000000000000000000000000000..ceab6e11ece0bcec917c12e11d350946f085d549 --- /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 0000000000000000000000000000000000000000..584e9804b18bf32ca20d082267441608c0c8e773 --- /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 0000000000000000000000000000000000000000..a32ad5d83a2ddddf824b65a1881895be5a7c66b1 --- /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 0000000000000000000000000000000000000000..c703b32107f76514269c97e65f0588cc8ed93e41 --- /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')); + } +}