Skip to content

Commit 05efabc

Browse files
Merge pull request #21 from nextcloud/fix/ignored-csrf-non-ocs-routes
Fix ignored CSRF non-OCS routes
2 parents cb60467 + 16b3b5a commit 05efabc

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

generate-spec

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -314,31 +314,30 @@ foreach ($parsedRoutes as $key => $value) {
314314
}
315315

316316
$methodFunction = null;
317-
$isOCS = false;
318-
$isCORS = false;
319-
$isPublic = false;
320-
$isAdmin = true;
321-
$isDeprecated = false;
322-
$isIgnored = false;
323317
/** @var ClassMethod $classMethod */
324318
foreach ($nodeFinder->findInstanceOf($controllerClass->stmts, ClassMethod::class) as $classMethod) {
325319
if ($classMethod->name == $methodName) {
326-
$isCSRFRequired = !Helpers::classMethodHasAnnotationOrAttribute($classMethod, "NoCSRFRequired");
327-
$isOCS = $controllerClass->extends != "Controller" && $controllerClass->extends != "ApiController";
328-
if (!$isCSRFRequired || $isOCS) {
329-
$methodFunction = $classMethod;
330-
$isCORS = Helpers::classMethodHasAnnotationOrAttribute($classMethod, "CORS");
331-
$isPublic = Helpers::classMethodHasAnnotationOrAttribute($classMethod, "PublicPage");
332-
$isAdmin = !Helpers::classMethodHasAnnotationOrAttribute($classMethod, "NoAdminRequired") && !$isPublic;
333-
$isDeprecated = Helpers::classMethodHasAnnotationOrAttribute($classMethod, "deprecated");
334-
$isIgnored = Helpers::classMethodHasAnnotationOrAttribute($classMethod, "IgnoreOpenAPI");
335-
break;
336-
}
320+
$methodFunction = $classMethod;
321+
break;
337322
}
338323
}
339324
if ($methodFunction == null) {
340325
Logger::panic($routeName, 'Missing controller method');
341326
}
327+
328+
$isCSRFRequired = !Helpers::classMethodHasAnnotationOrAttribute($classMethod, "NoCSRFRequired");
329+
$isOCS = $controllerClass->extends != "Controller" && $controllerClass->extends != "ApiController";
330+
if ($isCSRFRequired && !$isOCS) {
331+
Logger::info($routeName, "Route ignored because of required CSRF in a non-OCS controller");
332+
continue;
333+
}
334+
335+
$isCORS = Helpers::classMethodHasAnnotationOrAttribute($classMethod, "CORS");
336+
$isPublic = Helpers::classMethodHasAnnotationOrAttribute($classMethod, "PublicPage");
337+
$isAdmin = !Helpers::classMethodHasAnnotationOrAttribute($classMethod, "NoAdminRequired") && !$isPublic;
338+
$isDeprecated = Helpers::classMethodHasAnnotationOrAttribute($classMethod, "deprecated");
339+
$isIgnored = Helpers::classMethodHasAnnotationOrAttribute($classMethod, "IgnoreOpenAPI");
340+
342341
if ($isIgnored) {
343342
Logger::info($routeName, "Route ignored because of IgnoreOpenAPI attribute");
344343
continue;

0 commit comments

Comments
 (0)