diff options
author | Robin Appelman <icewind@owncloud.com> | 2012-06-03 02:50:34 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-06-03 02:51:05 +0200 |
commit | e90cbcaf5b5f2f1d39947d16dc3927550874f4d9 (patch) | |
tree | 1abbb73241183402f89beeac50f85b0c5ca0e3d0 /lib/user | |
parent | 993ebc4c902965e4612207fef9e5b04fe0838a59 (diff) | |
download | nextcloud-server-e90cbcaf5b5f2f1d39947d16dc3927550874f4d9.tar.gz nextcloud-server-e90cbcaf5b5f2f1d39947d16dc3927550874f4d9.zip |
http user backend
Diffstat (limited to 'lib/user')
-rw-r--r-- | lib/user/http.php | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/user/http.php b/lib/user/http.php new file mode 100644 index 00000000000..009aa30c6f5 --- /dev/null +++ b/lib/user/http.php @@ -0,0 +1,93 @@ +<?php + +/** +* ownCloud +* +* @author Frank Karlitschek +* @copyright 2012 Robin Appelman icewind@owncloud.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +/** + * user backend using http auth requests + */ +class OC_User_HTTP extends OC_User_Backend { + /** + * split http://user@host/path into a user and url part + * @param string path + * @return array + */ + private function parseUrl($url){ + $parts=parse_url($url); + $url=$parts['scheme'].'://'.$parts['host']; + if(isset($parts['port'])){ + $url.=':'.$parts['port']; + } + $url.=$parts['path']; + if(isset($parts['query'])){ + $url.='?'.$parts['query']; + } + return array($parts['user'],$url); + + } + + /** + * check if an url is a valid login + * @param string url + * @return boolean + */ + private function matchUrl($url){ + return ! is_null(parse_url($url,PHP_URL_USER)); + } + + /** + * @brief Check if the password is correct + * @param $uid The username + * @param $password The password + * @returns string + * + * Check if the password is correct without logging in the user + * returns the user id or false + */ + public function checkPassword($uid, $password){ + if(!$this->matchUrl($uid)){ + return false; + } + list($user,$url)=$this->parseUrl($uid); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_USERPWD, $user.':'.$password); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + curl_exec($ch); + + $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + + curl_close($ch); + + return $status==200; + } + + /** + * @brief check if a user exists + * @param string $uid the username + * @return boolean + */ + public function userExists($uid){ + return $this->matchUrl($uid); + } +}
\ No newline at end of file |