API: Fix RSS authentication

fixes #566
This commit is contained in:
Marcel Klehr 2018-12-28 19:32:19 +01:00
parent eb0df1fb1b
commit 65d5e5d46e
4 changed files with 27 additions and 6 deletions

View File

@ -69,7 +69,8 @@ class Application extends App {
$c->query('ServerContainer')->getL10NFactory()->get('bookmarks'),
$c->query('ServerContainer')->query(Bookmarks::class),
$c->query('ServerContainer')->getUserManager(),
$c->query('ServerContainer')->getLogger()
$c->query('ServerContainer')->getLogger(),
$c->query('ServerContainer')->getUserSession()
);
});
@ -90,7 +91,8 @@ class Application extends App {
$c->query('ServerContainer')->query(FaviconPreviewService::class),
$c->query('ServerContainer')->query(ScreenlyPreviewService::class),
$c->query('ServerContainer')->query(ITimeFactory::class),
$c->query('ServerContainer')->getLogger()
$c->query('ServerContainer')->getLogger(),
$c->query('ServerContainer')->getUserSession()
);
});

View File

@ -20,6 +20,7 @@ use \OCP\AppFramework\Http\DataResponse;
use \OCP\AppFramework\Http\TemplateResponse;
use \OCP\AppFramework\Http;
use \OC\User\Manager;
use \OCP\IUserSession;
use \OCA\Bookmarks\Controller\Lib\Bookmarks;
use \OCA\Bookmarks\Controller\Lib\ExportResponse;
use \OCA\Bookmarks\Controller\Lib\Helper;
@ -35,7 +36,7 @@ class BookmarkController extends ApiController {
/** @var Bookmarks */
private $bookmarks;
public function __construct($appName, IRequest $request, $userId, IDBConnection $db, IL10N $l10n, Bookmarks $bookmarks, Manager $userManager, ILogger $logger) {
public function __construct($appName, IRequest $request, $userId, IDBConnection $db, IL10N $l10n, Bookmarks $bookmarks, Manager $userManager, ILogger $logger, IUserSession $userSession) {
parent::__construct($appName, $request);
$this->userId = $userId;
$this->db = $db;
@ -44,6 +45,7 @@ class BookmarkController extends ApiController {
$this->bookmarks = $bookmarks;
$this->userManager = $userManager;
$this->logger = $logger;
$this->userSession = $userSession;
}
/**
@ -107,6 +109,7 @@ class BookmarkController extends ApiController {
* @NoAdminRequired
* @NoCSRFRequired
* @CORS
* @PublicPage
*/
public function getBookmarks(
$type = "bookmark",
@ -147,6 +150,20 @@ class BookmarkController extends ApiController {
return $response;
});
list($method, $credentials) = explode(' ', $this->request->getHeader('Authorization'));
if ($method !== 'Basic') {
$res = new DataResponse(['status' => 'error', 'data' => 'Unauthorized'], Http::STATUS_UNAUTHORIZED);
$res->addHeader('WWW-Authenticate', 'Basic realm="Nextcloud", charset="UTF-8"');
return $res;
} else {
list($username, $password) = explode(':', base64_decode($credentials));
if (false === $this->userSession->login($username, $password)) {
$res = new DataResponse(['status' => 'error', 'data' => 'Unauthorized'], Http::STATUS_UNAUTHORIZED);
$res->addHeader('WWW-Authenticate', 'Basic realm="Nextcloud", charset="UTF-8"');
return $res;
}
}
if ($user === null) {
$user = $this->userId;
$publicOnly = false;

View File

@ -13,6 +13,7 @@ namespace OCA\Bookmarks\Controller\Rest;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\ILogger;
use OCP\IUserSession;
use \OCP\IRequest;
use \OCP\AppFramework\ApiController;
use \OCP\AppFramework\Http\DataDisplayResponse;
@ -49,10 +50,11 @@ class InternalBookmarkController extends ApiController {
IPreviewService $faviconService,
IPreviewService $screenshotService,
ITimeFactory $timeFactory,
ILogger $logger
ILogger $logger,
IUserSession $userSession
) {
parent::__construct($appName, $request);
$this->publicController = new BookmarkController($appName, $request, $userId, $db, $l10n, $bookmarks, $userManager, $logger);
$this->publicController = new BookmarkController($appName, $request, $userId, $db, $l10n, $bookmarks, $userManager, $logger, $userSession);
$this->userId = $userId;
$this->libBookmarks = $bookmarks;
$this->previewService = $previewService;

View File

@ -25,7 +25,7 @@ echo '<?xml version="1.0" encoding="UTF-8"?>';
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title><?php p($l->t('Bookmarks feed')); ?></title>uuu
<title><?php p($l->t('Bookmarks feed')); ?></title>
<language><?php p($_['rssLang']); ?></language>
<description><?php p($_['description']); ?></description>
<pubDate><?php p($_['rssPubDate']); ?></pubDate>