Skip to content

Commit d5740d6

Browse files
committed
Allows to disable authorization for internal actions
1 parent e459762 commit d5740d6

File tree

25 files changed

+116
-44
lines changed

25 files changed

+116
-44
lines changed

src/DragonFly.API.Core/ClientAPI/AssetApiStorage.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ public async Task<Result> UploadAsync(Guid assetId, string mimetype, Stream stre
3939
return await Client.SendAsync(requestMessage).ReadResultFromJsonAsync();
4040
}
4141

42-
public async Task<Result<Stream>> GetStreamAsync(Asset asset)
42+
public async Task<Result<Stream>> GetStreamAsync(Guid assetId)
4343
{
44-
return await Client.GetStreamAsync($"api/asset/{asset.Id}/download");
44+
return await Client.GetStreamAsync($"api/asset/{assetId}/download");
4545
}
4646

4747
public async Task<Result<Asset?>> GetAssetAsync(Guid id)

src/DragonFly.API.Core/DragonFly.API.Core.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
</ItemGroup>
4545

4646
<ItemGroup>
47-
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.0" />
48-
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.0" />
47+
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.1" />
48+
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.1" />
4949
</ItemGroup>
5050
</Project>

src/DragonFly.API/Rest/AssetApiExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private static async Task<IResult> MapDownload(HttpContext context, IAssetStorag
104104

105105
context.Response.GetTypedHeaders().CacheControl = new CacheControlHeaderValue() { Public = true, MaxAge = TimeSpan.FromDays(30) };
106106

107-
Stream assetStream = await storage.GetStreamAsync(asset);
107+
Stream assetStream = await storage.GetStreamAsync(asset.Id);
108108

109109
return TypedResults.Stream(assetStream, contentType: asset.MimeType, entityTag: etag, enableRangeProcessing: true);
110110
}

src/DragonFly.App.WebAssembly.Client/DragonFly.App.WebAssembly.Client.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.0" />
10+
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.1" />
1111
</ItemGroup>
1212

1313
<ItemGroup>

src/DragonFly.AspNetCore.WebAssembly/DragonFly.AspNetCore.WebAssembly.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@
3737
</ItemGroup>
3838

3939
<ItemGroup>
40-
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.0" />
40+
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.1" />
4141
</ItemGroup>
4242
</Project>

src/DragonFly.AspNetCore/Permissions/AuthorizationExtensions.cs

+8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// MIT License
44

55
using DragonFly.AspNetCore;
6+
using DragonFly.AspNetCore.Permissions;
67
using Microsoft.AspNetCore.Authorization;
78
using SmartResults;
89
using System.Security.Claims;
@@ -32,4 +33,11 @@ public static async Task<Result> AuthorizeAsync(this IAuthorizationService autho
3233
return Result.Failed(new PermissionError(permission));
3334
}
3435
}
36+
37+
public static IDisposable DisableAuthorization(this IDragonFlyApi api)
38+
{
39+
var context = api.ServiceProvider.GetRequiredService<IPrincipalContext>();
40+
41+
return new DisableAuthorization(context);
42+
}
3543
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright (c) usercode
2+
// https://github.com/usercode/DragonFly
3+
// MIT License
4+
5+
using System.Security.Claims;
6+
7+
namespace DragonFly.AspNetCore.Permissions;
8+
9+
public class DisableAuthorization : IDisposable
10+
{
11+
public DisableAuthorization(IPrincipalContext context)
12+
{
13+
Context = context;
14+
OldPrincipal = Context.Current;
15+
16+
Context.Current = null;
17+
}
18+
19+
/// <summary>
20+
/// Context
21+
/// </summary>
22+
private IPrincipalContext Context { get; }
23+
24+
/// <summary>
25+
/// OldPrincipal
26+
/// </summary>
27+
private ClaimsPrincipal? OldPrincipal { get; }
28+
29+
public void Dispose()
30+
{
31+
Context.Current = OldPrincipal;
32+
}
33+
}

src/DragonFly.AspNetCore/Permissions/Storages/AssetPermissionStorage.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ public async Task<Result> DeleteAsync(Asset asset)
5656
return await Api.AuthorizeAsync(PrincipalContext.Current, AssetPermissions.ReadAsset).ThenAsync(x => Storage.GetAssetAsync(id));
5757
}
5858

59-
public async Task<Result<Stream>> GetStreamAsync(Asset asset)
59+
public async Task<Result<Stream>> GetStreamAsync(Guid assetId)
6060
{
61-
return await Api.AuthorizeAsync(PrincipalContext.Current, AssetPermissions.DownloadAsset).ThenAsync(x => Storage.GetStreamAsync(asset));
61+
return await Api.AuthorizeAsync(PrincipalContext.Current, AssetPermissions.DownloadAsset).ThenAsync(x => Storage.GetStreamAsync(assetId));
6262
}
6363

6464
public async Task<Result> PublishAsync(Asset asset)

src/DragonFly.Client.WebAssembly/DragonFly.Client.WebAssembly.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@
4040
</ItemGroup>
4141

4242
<ItemGroup>
43-
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.0" />
43+
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.1" />
4444
</ItemGroup>
4545
</Project>

src/DragonFly.Client/DragonFly.Client.csproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@
5050
</ItemGroup>
5151

5252
<ItemGroup>
53-
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="9.0.0" />
54-
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="9.0.0" />
53+
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="9.0.1" />
54+
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="9.0.1" />
5555
<PackageReference Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" PrivateAssets="All" />
5656
</ItemGroup>
5757

5858
<ItemGroup>
59-
<PackageReference Include="BlazorStrap" Version="5.2.103.122024" />
59+
<PackageReference Include="BlazorStrap" Version="5.2.103.250102" />
6060
<PackageReference Include="BlazorStrap.V5" Version="5.2.103.122024" />
6161
</ItemGroup>
6262

src/DragonFly.Client/Extensions/CssExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static string ToCss(this BackgroundTaskState state)
1515
BackgroundTaskState.Failed => "list-group-item-danger",
1616
BackgroundTaskState.Canceled => "list-group-item-warning",
1717
BackgroundTaskState.Canceling => "list-group-item-warning",
18-
_ => "list-group-item-light"
18+
_ => null
1919
};
2020
}
2121
}

src/DragonFly.Client/Pages/Assets/AssetDetail.razor.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ protected override void BuildToolbarItems(IList<ToolbarItem> toolbarItems)
5353
}
5454
else
5555
{
56-
toolbarItems.Add(new ToolbarItem("Publish", BSColor.Success, () => PublishAsync()));
56+
toolbarItems.Add(new ToolbarItem("Publish", BSColor.Primary, () => PublishAsync()));
5757
toolbarItems.AddRefreshButton(this);
5858
toolbarItems.AddUpdateButton(this);
5959
toolbarItems.AddDeleteButton(this);
60-
toolbarItems.Add(new ToolbarItem("Refresh metadata", BSColor.Danger, () => ApplyMetadata()));
60+
toolbarItems.Add(new ToolbarItem("Refresh metadata", BSColor.Primary, () => ApplyMetadata()));
6161
}
6262
}
6363

src/DragonFly.Client/Pages/Assets/AssetList.razor.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public partial class AssetList
2121

2222
protected override void BuildToolbarItems(IList<ToolbarItem> toolbarItems)
2323
{
24-
toolbarItems.Add(new ToolbarItem("Create", BlazorStrap.BSColor.Danger, async () => Navigation.NavigateTo($"asset/create/{SelectedFolder?.Id}")));
25-
toolbarItems.Add(new ToolbarItem("Apply metadata", BlazorStrap.BSColor.Danger, RefreshAllMetadataAsync));
24+
toolbarItems.Add(new ToolbarItem("Create", BlazorStrap.BSColor.Primary, async () => Navigation.NavigateTo($"asset/create/{SelectedFolder?.Id}")));
25+
toolbarItems.Add(new ToolbarItem("Apply metadata", BlazorStrap.BSColor.Primary, RefreshAllMetadataAsync));
2626
}
2727

2828
protected virtual AssetQuery CreateQuery()

src/DragonFly.Client/Pages/BackgroundTasks/BackgroundTaskItem.razor

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
</span>
1414
</BSCol>
1515
<BSCol ColumnLarge="1">
16-
<BSProgressBar Min="0" Max="Task.ProgressMaxValue" Value="Task.ProgressValue">@(((double)Task.ProgressValue * 100 / Task.ProgressMaxValue).ToString("0"))%</BSProgressBar>
16+
<BSProgressBar Color="BSColor.Light" Min="0" Max="Task.ProgressMaxValue" Value="Task.ProgressValue">@(((double)Task.ProgressValue * 100 / Task.ProgressMaxValue).ToString("0"))%</BSProgressBar>
1717
</BSCol>
1818
<BSCol ColumnLarge="4">
1919
<span>@Task.Name</span>

src/DragonFly.Core/DragonFly.Core.csproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@
3636
</ItemGroup>
3737

3838
<ItemGroup>
39-
<PackageReference Include="Fluid.Core" Version="2.17.0" />
39+
<PackageReference Include="Fluid.Core" Version="2.19.0" />
4040
<PackageReference Include="SmartResults" Version="1.0.2" />
41-
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0" />
42-
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.0" />
41+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.1" />
42+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.1" />
4343
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
4444
</ItemGroup>
4545

src/DragonFly.Core/Modules/Assets/IAssetStorage.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public interface IAssetStorage
2525

2626
Task<Result> UploadAsync(Guid assetId, string mimetype, Stream stream);
2727

28-
Task<Result<Stream>> GetStreamAsync(Asset asset);
28+
Task<Result<Stream>> GetStreamAsync(Guid assetId);
2929

3030
Task<Result> ApplyMetadataAsync(Asset asset);
3131

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Copyright (c) usercode
2+
// https://github.com/usercode/DragonFly
3+
// MIT License
4+
5+
namespace DragonFly;
6+
7+
public class ContentPublished
8+
{
9+
public Guid ContentId { get; set; }
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Copyright (c) usercode
2+
// https://github.com/usercode/DragonFly
3+
// MIT License
4+
5+
namespace DragonFly;
6+
7+
public class ContentUnpublished
8+
{
9+
public Guid ContentId { get; set; }
10+
}

src/DragonFly.Core/Modules/ContentModels/Extensions/ModelStorageExtensions.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ public static class ModelStorageExtensions
1414
/// <summary>
1515
/// Gets <typeparamref name="TContentModel"/> by id.
1616
/// </summary>
17-
public static async Task<TContentModel?> GetContentAsync<TContentModel>(this IContentStorage storage, string schema, Guid id)
17+
public static async Task<TContentModel?> GetContentAsync<TContentModel>(this IContentStorage storage, Guid id)
1818
where TContentModel : class, IContentModel
1919
{
20-
ContentItem? content = await storage.GetContentAsync(schema, id);
20+
ContentItem? content = await storage.GetContentAsync(TContentModel.Schema.Name, id);
2121

2222
if (content == null)
2323
{

src/DragonFly.Generator.Tests/DragonFly.Generator.Tests.csproj

+5-5
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@
1010
<PackageReference Include="Microsoft.CodeAnalysis.Analyzer.Testing" Version="1.1.2" />
1111
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.12.0" />
1212
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
13-
<PackageReference Include="System.Formats.Asn1" Version="9.0.0" />
14-
<PackageReference Include="xunit" Version="2.9.2" />
15-
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
13+
<PackageReference Include="System.Formats.Asn1" Version="9.0.1" />
14+
<PackageReference Include="xunit" Version="2.9.3" />
15+
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.1">
1616
<PrivateAssets>all</PrivateAssets>
1717
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
1818
</PackageReference>
1919
</ItemGroup>
2020

2121
<ItemGroup>
22-
<PackageReference Include="Verify.XUnit" Version="28.7.0" />
22+
<PackageReference Include="Verify.XUnit" Version="28.9.0" />
2323
<PackageReference Include="Verify.SourceGenerators" Version="2.5.0" />
24-
<PackageReference Include="coverlet.collector" Version="6.0.3">
24+
<PackageReference Include="coverlet.collector" Version="6.0.4">
2525
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2626
<PrivateAssets>all</PrivateAssets>
2727
</PackageReference>

src/DragonFly.GraphQL/DragonFly.GraphQL.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</ItemGroup>
2525

2626
<ItemGroup>
27-
<PackageReference Include="GraphQL" Version="8.2.1" />
27+
<PackageReference Include="GraphQL" Version="8.3.0" />
2828
<PackageReference Include="GraphQL.Server.Transports.AspNetCore" Version="8.2.0" />
2929
<PackageReference Include="GraphQL.Server.Ui.Playground" Version="8.2.0" />
3030
</ItemGroup>

src/DragonFly.ImageWizard/DragonFlyLoader.cs

+18-9
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,18 @@ namespace DragonFly.ImageWizard;
1313
/// </summary>
1414
public class DragonFlyLoader : Loader<DragonFlyLoaderOptions>
1515
{
16-
public DragonFlyLoader(IAssetStorage storage, IOptions<DragonFlyLoaderOptions> options)
16+
public DragonFlyLoader(IDragonFlyApi api, IAssetStorage storage, IOptions<DragonFlyLoaderOptions> options)
1717
: base(options)
1818
{
19+
Api = api;
1920
Storage = storage;
2021
}
2122

23+
/// <summary>
24+
/// Api
25+
/// </summary>
26+
private IDragonFlyApi Api { get; }
27+
2228
/// <summary>
2329
/// Storage
2430
/// </summary>
@@ -38,17 +44,20 @@ public override async Task<LoaderResult> GetAsync(string source, ICachedData? ex
3844
else
3945
{
4046
id = Guid.Parse(source);
41-
}
42-
43-
Asset? asset = await Storage.GetAssetAsync(id);
47+
}
4448

45-
if (asset == null)
49+
using (Api.DisableAuthorization())
4650
{
47-
return LoaderResult.Failed();
48-
}
51+
Asset? asset = await Storage.GetAssetAsync(id);
4952

50-
Stream stream = await Storage.GetStreamAsync(asset);
53+
if (asset == null)
54+
{
55+
return LoaderResult.Failed();
56+
}
5157

52-
return LoaderResult.Success(new OriginalData(asset.MimeType, stream));
58+
Stream stream = await Storage.GetStreamAsync(asset.Id);
59+
60+
return LoaderResult.Success(new OriginalData(asset.MimeType, stream));
61+
}
5362
}
5463
}

src/DragonFly.MongoDB/Storages/AssetMongoStorage.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,9 @@ public async Task<Result> UploadAsync(Guid assetId, string mimetype, Stream stre
159159
return Result.Ok();
160160
}
161161

162-
public async Task<Result<Stream>> GetStreamAsync(Asset asset)
162+
public async Task<Result<Stream>> GetStreamAsync(Guid assetId)
163163
{
164-
return await AssetData.OpenDownloadStreamByNameAsync(asset.Id.ToString());
164+
return await AssetData.OpenDownloadStreamByNameAsync(assetId.ToString());
165165
}
166166

167167
public async Task<Result<QueryResult<Asset>>> QueryAsync(AssetQuery assetQuery)

src/Template/templatepack.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<PackageType>Template</PackageType>
5-
<PackageVersion>1.0.23</PackageVersion>
5+
<PackageVersion>1.0.24</PackageVersion>
66
<PackageId>DragonFly.Templates</PackageId>
77
<PackageProjectUrl>https://github.com/usercode/DragonFly</PackageProjectUrl>
88
<PackageLicenseExpression>MIT</PackageLicenseExpression>

src/Template/templates/DragonFlyApp.Server/Pages/BlogPost.cshtml

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
<div class="col-lg-3">
1414
<div class="heading-index">
1515
<div class="list-group">
16-
@foreach (HeadingBlock heading in Model.Document.EnumerateBlocks().OfType<HeadingBlock>())
16+
@foreach (HeadingBlock heading in Model.Document.EnumerateBlocks()
17+
.Select(x => x.Block)
18+
.OfType<HeadingBlock>())
1719
{
1820
<a href="#@SlugService.Transform(heading.Text)" class="list-group-item list-group-item-action">@heading.Text</a>
1921
}

0 commit comments

Comments
 (0)