From 0edb3e0a596a9f2657f8233bff6cc1069c971a49 Mon Sep 17 00:00:00 2001 From: frankdelange Date: Thu, 19 Jan 2017 19:10:17 +0100 Subject: [PATCH] files_opds: v0.8.2, support login tokens (app passwords, NC and OC) and 2FA (NC) --- dist/files_opds-0.8.2.tar.gz | Bin 0 -> 25051 bytes files_opds/CHANGELOG.md | 10 ++++- files_opds/README.md | 2 +- files_opds/appinfo/info.xml | 2 +- files_opds/index.php | 14 +------ files_opds/lib/util.php | 76 +++++++++++++++++++++++++---------- 6 files changed, 67 insertions(+), 37 deletions(-) create mode 100644 dist/files_opds-0.8.2.tar.gz diff --git a/dist/files_opds-0.8.2.tar.gz b/dist/files_opds-0.8.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..614ad60a8a1332f8fa9e355983e302e76b78131e GIT binary patch literal 25051 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 AGPL - 0.8.0 + 0.8.2 Frank de Lange tools files diff --git a/files_opds/index.php b/files_opds/index.php index 48cc1b5..7098f8f 100644 --- a/files_opds/index.php +++ b/files_opds/index.php @@ -14,24 +14,14 @@ namespace OCA\Files_Opds; \OCP\App::checkAppEnabled('files_opds'); -/* Enable login through basic auth, using normal OC username/password - * This is required because opds clients do not support the normal - * OC login process - */ -if (Util::authenticateUser() === false) { - Util::changeHttpStatus(401); - exit; -} - -\OCP\User::checkLoggedIn(); +Util::authenticateUser(); /* Refuse access if user disabled opds support */ if (Config::get('enable', 'false') === 'false') { Util::changeHttpStatus(403); - exit; + exit(); } - /* id defaults to 'root' (meaning 'serve root feed') */ $id = isset($_GET['id']) ? $_GET['id'] : 'root'; diff --git a/files_opds/lib/util.php b/files_opds/lib/util.php index a3b8044..b33cafe 100644 --- a/files_opds/lib/util.php +++ b/files_opds/lib/util.php @@ -12,17 +12,28 @@ namespace OCA\Files_Opds; +use OC\Authentication\Exceptions\PasswordLoginForbiddenException; +use OC\User\LoginException; + /** * Utility class for OPDS */ class Util { /** - * @brief Authenticate user by HTTP Basic Authentication - * with user name and password + * @brief Authenticate user by HTTP Basic Authentication with username and password or token + * + * Supports login as well as app passwords (tokens). + * NC: only app passwords are accepted when 2FA is enforced for $user + * + * @throws OC\Authentication\Exceptions\PasswordLoginForbiddenException; + * @throws OC\User\LoginException; */ public static function authenticateUser() { - if (!isset($_SERVER['PHP_AUTH_USER'])) { + $request = \OC::$server->getRequest(); + + // force basic auth, enables access through browser + if (!isset($request->server['PHP_AUTH_USER'])) { $defaults = new \OC_Defaults(); $realm = $defaults->getName(); header ("HTTP/1.0 401 Unauthorized"); @@ -30,28 +41,49 @@ class Util exit(); } - $userName = $_SERVER['PHP_AUTH_USER']; + $user = $request->server['PHP_AUTH_USER']; + $pass = $request->server['PHP_AUTH_PW']; - // Check the password in the ownCloud database - return self::checkPassword($userName, $_SERVER['PHP_AUTH_PW']); + try { + //if (!\OC::$server->getUserSession()->logClientIn($user, $pass, $request, $throttler)) { + if (!self::logClientIn($user, $pass, $request)) { + // unknown user and/or password + self::changeHttpStatus(401); + exit(); + } + } catch (PasswordLoginForbiddenException $ex) { + // 2FA active and enforced for user so only app passwords are allowed + self::changeHttpStatus(401); + exit(); + } catch (LoginException $ex) { + // login cancelled or user forbidden + self::changeHttpStatus(403); + exit(); + } } - /** - * @brief Checks the password of a user. - * @param string $userName ownCloud user name whose password will be checked. - * @param string $password ownCloud password. - * @return bool True if the password is correct, false otherwise. - * - */ - private static function checkPassword($userName, $password) { - - // Check password normally - if (\OCP\User::checkPassword($userName, $password) != false) { - return true; - } - - return false; - } + /** + * @brief attempt to login using $user and $pass (password or token) + * + * Login using username and password, supports both traditional passwords as well as + * token-based login ('app passwords'). + * + * @param string $user + * @param string $pass + * @param IRequest $request + * @throws PasswordLoginForbiddenException + * @throws LoginException + * @return boolean + * + */ + public static function logClientIn($user, $pass, $request) { + if (class_exists('OC\Security\Bruteforce\Throttler')) { + $throttler = \OC::$server->getBruteForceThrottler(); + return \OC::$server->getUserSession()->logClientIn($user, $pass, $request, $throttler); + } else { + return \OC::$server->getUserSession()->logClientIn($user, $pass, $request); + } + } /** * @brief Change HTTP response code.