diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2013-10-02 00:21:11 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2013-10-02 00:21:11 +0200 |
commit | 7e9e23f2100f10bffd6ee5eaa6c1778b4a335676 (patch) | |
tree | 7f78366fa514bb444e466e7b2453c0b954382c18 /lib/private/connector/sabre/auth.php | |
parent | 0537960dccb5e9ef7e87d383304e09858d54557b (diff) | |
parent | 5ade595911261cf47cdad17deb4d1a013f523245 (diff) | |
download | nextcloud-server-7e9e23f2100f10bffd6ee5eaa6c1778b4a335676.tar.gz nextcloud-server-7e9e23f2100f10bffd6ee5eaa6c1778b4a335676.zip |
Merge branch 'master' into apache-auth-master
Diffstat (limited to 'lib/private/connector/sabre/auth.php')
-rw-r--r-- | lib/private/connector/sabre/auth.php | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/lib/private/connector/sabre/auth.php b/lib/private/connector/sabre/auth.php new file mode 100644 index 00000000000..9b5663998ff --- /dev/null +++ b/lib/private/connector/sabre/auth.php @@ -0,0 +1,88 @@ +<?php + +/** + * ownCloud + * + * @author Jakob Sack + * @copyright 2011 Jakob Sack kde@jakobsack.de + * + * 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/>. + * + */ + +class OC_Connector_Sabre_Auth extends Sabre_DAV_Auth_Backend_AbstractBasic { + /** + * Validates a username and password + * + * This method should return true or false depending on if login + * succeeded. + * + * @return bool + */ + protected function validateUserPass($username, $password) { + if (OC_User::isLoggedIn()) { + OC_Util::setupFS(OC_User::getUser()); + return true; + } else { + OC_Util::setUpFS();//login hooks may need early access to the filesystem + if(OC_User::login($username, $password)) { + OC_Util::setUpFS(OC_User::getUser()); + return true; + } + else{ + return false; + } + } + } + + /** + * Returns information about the currently logged in username. + * + * If nobody is currently logged in, this method should return null. + * + * @return string|null + */ + public function getCurrentUser() { + $user = OC_User::getUser(); + if(!$user) { + return null; + } + return $user; + } + + /** + * Override function here. We want to cache authentication cookies + * in the syncing client to avoid HTTP-401 roundtrips. + * If the sync client supplies the cookies, then OC_User::isLoggedIn() + * will return true and we can see this WebDAV request as already authenticated, + * even if there are no HTTP Basic Auth headers. + * In other case, just fallback to the parent implementation. + * + * @return bool + */ + public function authenticate(Sabre_DAV_Server $server, $realm) { + if (OC_User::handleApacheAuth(true)) { + return true; + } + + if (OC_User::isLoggedIn()) { + $user = OC_User::getUser(); + OC_Util::setupFS($user); + $this->currentUser = $user; + return true; + } + + return parent::authenticate($server, $realm); + } +} |