aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs
diff options
context:
space:
mode:
authorDominik <git@secnd.me>2023-06-15 19:38:42 +0200
committerGitHub <noreply@github.com>2023-06-15 19:38:42 +0200
commit17f1e8d19b1fd693893d66d2275ed8ae2476344e (patch)
tree7f48be975faa92042769870957587b3c7864f631 /Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs
parente8ae7e5c38e28f13fa8de295e26c930cb46d9b79 (diff)
parent6771b5cabe96b4b3cbd1cd0c998d564f3dd17ed4 (diff)
Merge branch 'master' into segment-deletion
Diffstat (limited to 'Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs')
-rw-r--r--Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs69
1 files changed, 41 insertions, 28 deletions
diff --git a/Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs b/Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs
index 077908895..fb9f6d0a6 100644
--- a/Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs
+++ b/Jellyfin.Server/Filters/SecurityRequirementsOperationFilter.cs
@@ -18,11 +18,17 @@ namespace Jellyfin.Server.Filters
{
var requiredScopes = new List<string>();
+ var requiresAuth = false;
// Add all method scopes.
foreach (var attribute in context.MethodInfo.GetCustomAttributes(true))
{
- if (attribute is AuthorizeAttribute authorizeAttribute
- && authorizeAttribute.Policy != null
+ if (attribute is not AuthorizeAttribute authorizeAttribute)
+ {
+ continue;
+ }
+
+ requiresAuth = true;
+ if (authorizeAttribute.Policy is not null
&& !requiredScopes.Contains(authorizeAttribute.Policy, StringComparer.Ordinal))
{
requiredScopes.Add(authorizeAttribute.Policy);
@@ -31,12 +37,17 @@ namespace Jellyfin.Server.Filters
// Add controller scopes if any.
var controllerAttributes = context.MethodInfo.DeclaringType?.GetCustomAttributes(true);
- if (controllerAttributes != null)
+ if (controllerAttributes is not null)
{
foreach (var attribute in controllerAttributes)
{
- if (attribute is AuthorizeAttribute authorizeAttribute
- && authorizeAttribute.Policy != null
+ if (attribute is not AuthorizeAttribute authorizeAttribute)
+ {
+ continue;
+ }
+
+ requiresAuth = true;
+ if (authorizeAttribute.Policy is not null
&& !requiredScopes.Contains(authorizeAttribute.Policy, StringComparer.Ordinal))
{
requiredScopes.Add(authorizeAttribute.Policy);
@@ -44,35 +55,37 @@ namespace Jellyfin.Server.Filters
}
}
- if (requiredScopes.Count != 0)
+ if (!requiresAuth)
{
- if (!operation.Responses.ContainsKey("401"))
- {
- operation.Responses.Add("401", new OpenApiResponse { Description = "Unauthorized" });
- }
+ return;
+ }
- if (!operation.Responses.ContainsKey("403"))
- {
- operation.Responses.Add("403", new OpenApiResponse { Description = "Forbidden" });
- }
+ if (!operation.Responses.ContainsKey("401"))
+ {
+ operation.Responses.Add("401", new OpenApiResponse { Description = "Unauthorized" });
+ }
- var scheme = new OpenApiSecurityScheme
+ if (!operation.Responses.ContainsKey("403"))
+ {
+ operation.Responses.Add("403", new OpenApiResponse { Description = "Forbidden" });
+ }
+
+ var scheme = new OpenApiSecurityScheme
+ {
+ Reference = new OpenApiReference
{
- Reference = new OpenApiReference
- {
- Type = ReferenceType.SecurityScheme,
- Id = AuthenticationSchemes.CustomAuthentication
- }
- };
+ Type = ReferenceType.SecurityScheme,
+ Id = AuthenticationSchemes.CustomAuthentication
+ }
+ };
- operation.Security = new List<OpenApiSecurityRequirement>
+ operation.Security = new List<OpenApiSecurityRequirement>
+ {
+ new OpenApiSecurityRequirement
{
- new OpenApiSecurityRequirement
- {
- [scheme] = requiredScopes
- }
- };
- }
+ [scheme] = requiredScopes
+ }
+ };
}
}
}