Add exemption for ACS endpoint

In a SAML scenario we don't get any strict or lax cookie send for
the ACS endpoint. Since we have some legacy code in Nextcloud
(direct PHP files) the enforcement of lax cookies is performed here
instead of the middleware.

This means we cannot exclude some routes from the cookie validation,
which normally is not a problem but is a little bit cumbersome for
this use-case.

Once the old legacy PHP endpoints have been removed we can move
the verification into a middleware and also adds some exemptions.

Not super awesome code to have but the best that I could come up
with that doesn't add another ton of technical debt.
This commit is contained in:
Lukas Reschke 2016-06-29 19:51:27 +02:00
parent 95f6dd909b
commit f56ea98993
No known key found for this signature in database
GPG key ID: 9AB0ADB949B6898C

View file

@ -519,6 +519,23 @@ class OC {
$processingScript = explode('/', $requestUri);
$processingScript = $processingScript[count($processingScript)-1];
// FIXME: In a SAML scenario we don't get any strict or lax cookie
// send for the ACS endpoint. Since we have some legacy code in Nextcloud
// (direct PHP files) the enforcement of lax cookies is performed here
// instead of the middleware.
//
// This means we cannot exclude some routes from the cookie validation,
// which normally is not a problem but is a little bit cumbersome for
// this use-case.
// Once the old legacy PHP endpoints have been removed we can move
// the verification into a middleware and also adds some exemptions.
//
// Questions about this code? Ask Lukas ;-)
$currentUrl = substr(explode('?',$request->getRequestUri(), 2)[0], strlen(\OC::$WEBROOT));
if($currentUrl === '/index.php/apps/user_saml/saml/acs') {
return;
}
// For the "index.php" endpoint only a lax cookie is required.
if($processingScript === 'index.php') {
if(!$request->passesLaxCookieCheck()) {