Skip to content

Commit

Permalink
v5.16.2 (#263)
Browse files Browse the repository at this point in the history
- *Fixed:* `Operation.AuthEntity` and `Operation.AuthOperation` updated to code-gen the `Manager`-based authorization (`ExecutionContent.UserIsAuthorized`) invocation.
- *Fixed:* Code-generation logging/auditing of endpoints updated to also include the authorization configuration.
- *Fixed:* `CreateProperty` statement within generated entity updated to use the correct name for reference data properties.
  • Loading branch information
chullybun authored Oct 15, 2024
1 parent 65af953 commit 063d954
Show file tree
Hide file tree
Showing 60 changed files with 223 additions and 113 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

Represents the **NuGet** versions.

## v5.16.2
- *Fixed:* `Operation.AuthEntity` and `Operation.AuthOperation` updated to code-gen the `Manager`-based authorization (`ExecutionContent.UserIsAuthorized`) invocation.
- *Fixed:* Code-generation logging/auditing of endpoints updated to also include the authorization configuration.
- *Fixed:* `CreateProperty` statement within generated entity updated to use the correct name for reference data properties.

## v5.16.1
- *Fixed:* Upgraded dependencies related to `System.Text.Json`; resolve [Microsoft Security Advisory CVE-2024-43485](https://github.com/advisories/GHSA-8g4q-xg66-9fp4).

Expand Down
2 changes: 1 addition & 1 deletion Common.targets
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<Version>5.16.1</Version>
<Version>5.16.2</Version>
<LangVersion>preview</LangVersion>
<Authors>Avanade</Authors>
<Company>Avanade</Company>
Expand Down
4 changes: 3 additions & 1 deletion docs/Entity-Entity-Config.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,9 @@ Provides the _Authorization_ configuration.

Property | Description
-|-
**`authRole`** | The role (permission) used by the `ExecutionContext.IsInRole(role)` for each `Operation`.<br/>&dagger; Used where not overridden specifically for an `Operation`; i.e. acts as the default.
`authPermission` | The permission used by the `ExecutionContext.UserIsAuthorized(AuthPermission)` to determine whether the user is authorized.
`authEntity` | The permission used by the `ExecutionContext.UserIsAuthorized(AuthEntity, AuthAction)` to determine whether the user is authorized.
**`authRole`** | The role (permission) used by the `ExecutionContext.UserIsInRole(role)` for each `Operation`.<br/>&dagger; Used where not overridden specifically for an `Operation`; i.e. acts as the default.

<br/>

Expand Down
6 changes: 4 additions & 2 deletions docs/Entity-Operation-Config.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,10 @@ Provides the _Authorization_ configuration.

Property | Description
-|-
`authPermission` | The permission used by the `ExecutionContext.IsAuthorized(AuthPermission)` to determine whether the user is authorized.
`authRole` | The permission used by the `ExecutionContext.IsInRole(AuthRole)` to determine whether the user is authorized.
`authPermission` | The permission used by the `ExecutionContext.UserIsAuthorized(AuthPermission)` to determine whether the user is authorized.
`authEntity` | The permission used by the `ExecutionContext.UserIsAuthorized(AuthEntity, AuthAction)` to determine whether the user is authorized. Defaults to `Entity.AuthEntity`. Both the `AuthEntity` and `AuthAction` are required for code-generation.
`authAction` | The permission used by the `ExecutionContext.UserIsAuthorized(AuthEntity, AuthAction)` to determine whether the user is authorized. Both the `AuthEntity` and `AuthAction` are required for code-generation.
`authRole` | The permission used by the `ExecutionContext.UserIsInRole(AuthRole)` to determine whether the user is authorized.

<br/>

Expand Down
4 changes: 2 additions & 2 deletions samples/Cdr.Banking/Cdr.Banking.Api/Cdr.Banking.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
<ImplicitUsings>true</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.8.1" />
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.9.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Cdr.Banking.Business\Cdr.Banking.Business.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
<Folder Include="DataSvc\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.0" />
<PackageReference Include="CoreEx.Cosmos" Version="3.27.0" />
<PackageReference Include="CoreEx.Validation" Version="3.27.0" />
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.1" />
<PackageReference Include="CoreEx.Cosmos" Version="3.27.1" />
<PackageReference Include="CoreEx.Validation" Version="3.27.1" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,10 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(CreationDate), CreationDate, v => CreationDate = v);
yield return CreateProperty(nameof(DisplayName), DisplayName, v => DisplayName = v);
yield return CreateProperty(nameof(Nickname), Nickname, v => Nickname = v);
yield return CreateProperty(nameof(OpenStatusSid), OpenStatusSid, v => OpenStatusSid = v);
yield return CreateProperty(nameof(OpenStatus), OpenStatusSid, v => OpenStatusSid = v);
yield return CreateProperty(nameof(IsOwned), IsOwned, v => IsOwned = v);
yield return CreateProperty(nameof(MaskedNumber), MaskedNumber, v => MaskedNumber = v);
yield return CreateProperty(nameof(ProductCategorySid), ProductCategorySid, v => ProductCategorySid = v);
yield return CreateProperty(nameof(ProductCategory), ProductCategorySid, v => ProductCategorySid = v);
yield return CreateProperty(nameof(ProductName), ProductName, v => ProductName = v);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ public partial class AccountArgs : EntityBase
/// <inheritdoc/>
protected override IEnumerable<IPropertyValue> GetPropertyValues()
{
yield return CreateProperty(nameof(ProductCategorySid), ProductCategorySid, v => ProductCategorySid = v);
yield return CreateProperty(nameof(OpenStatusSid), OpenStatusSid, v => OpenStatusSid = v);
yield return CreateProperty(nameof(ProductCategory), ProductCategorySid, v => ProductCategorySid = v);
yield return CreateProperty(nameof(OpenStatus), OpenStatusSid, v => OpenStatusSid = v);
yield return CreateProperty(nameof(IsOwned), IsOwned, v => IsOwned = v);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(Bsb), Bsb, v => Bsb = v);
yield return CreateProperty(nameof(AccountNumber), AccountNumber, v => AccountNumber = v);
yield return CreateProperty(nameof(BundleName), BundleName, v => BundleName = v);
yield return CreateProperty(nameof(SpecificAccountUTypeSid), SpecificAccountUTypeSid, v => SpecificAccountUTypeSid = v);
yield return CreateProperty(nameof(SpecificAccountUType), SpecificAccountUTypeSid, v => SpecificAccountUTypeSid = v);
yield return CreateProperty(nameof(TermDeposit), TermDeposit, v => TermDeposit = v);
yield return CreateProperty(nameof(CreditCard), CreditCard, v => CreditCard = v);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,6 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(MaturityDate), MaturityDate, v => MaturityDate = v);
yield return CreateProperty(nameof(MaturityAmount), MaturityAmount, v => MaturityAmount = v);
yield return CreateProperty(nameof(MaturityCurrency), MaturityCurrency, v => MaturityCurrency = v);
yield return CreateProperty(nameof(MaturityInstructionsSid), MaturityInstructionsSid, v => MaturityInstructionsSid = v);
yield return CreateProperty(nameof(MaturityInstructions), MaturityInstructionsSid, v => MaturityInstructionsSid = v);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(Id), Id, v => Id = v);
yield return CreateProperty(nameof(AccountId), AccountId, v => AccountId = v);
yield return CreateProperty(nameof(IsDetailAvailable), IsDetailAvailable, v => IsDetailAvailable = v);
yield return CreateProperty(nameof(TypeSid), TypeSid, v => TypeSid = v);
yield return CreateProperty(nameof(StatusSid), StatusSid, v => StatusSid = v);
yield return CreateProperty(nameof(Type), TypeSid, v => TypeSid = v);
yield return CreateProperty(nameof(Status), StatusSid, v => StatusSid = v);
yield return CreateProperty(nameof(Description), Description, v => Description = v);
yield return CreateProperty(nameof(PostingDateTime), PostingDateTime, v => PostingDateTime = v);
yield return CreateProperty(nameof(ExecutionDateTime), ExecutionDateTime, v => ExecutionDateTime = v);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@
<Folder Include="Entities\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CoreEx" Version="3.27.0" />
<PackageReference Include="CoreEx" Version="3.27.1" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="CoreEx.UnitTesting.NUnit" Version="3.27.0" />
<PackageReference Include="CoreEx.UnitTesting.NUnit" Version="3.27.1" />
</ItemGroup>

<ItemGroup>
Expand Down
6 changes: 3 additions & 3 deletions samples/Demo/Beef.Demo.Api/Beef.Demo.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.8.1" />
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.9.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.9.0" />
</ItemGroup>

<ItemGroup>
Expand Down
16 changes: 8 additions & 8 deletions samples/Demo/Beef.Demo.Business/Beef.Demo.Business.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="CoreEx" Version="3.27.0" />
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.0" />
<PackageReference Include="CoreEx.Cosmos" Version="3.27.0" />
<PackageReference Include="CoreEx.Database" Version="3.27.0" />
<PackageReference Include="CoreEx.Database.SqlServer" Version="3.27.0" />
<PackageReference Include="CoreEx.EntityFrameworkCore" Version="3.27.0" />
<PackageReference Include="CoreEx.Validation" Version="3.27.0" />
<PackageReference Include="CoreEx.FluentValidation" Version="3.27.0" />
<PackageReference Include="CoreEx" Version="3.27.1" />
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.1" />
<PackageReference Include="CoreEx.Cosmos" Version="3.27.1" />
<PackageReference Include="CoreEx.Database" Version="3.27.1" />
<PackageReference Include="CoreEx.Database.SqlServer" Version="3.27.1" />
<PackageReference Include="CoreEx.EntityFrameworkCore" Version="3.27.1" />
<PackageReference Include="CoreEx.Validation" Version="3.27.1" />
<PackageReference Include="CoreEx.FluentValidation" Version="3.27.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.20" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(Id), Id, v => Id = v);
yield return CreateProperty(nameof(FirstName), FirstName, v => FirstName = v);
yield return CreateProperty(nameof(LastName), LastName, v => LastName = v);
yield return CreateProperty(nameof(StatusSid), StatusSid, v => StatusSid = v);
yield return CreateProperty(nameof(Status), StatusSid, v => StatusSid = v);
yield return CreateProperty(nameof(InternalCode), InternalCode, v => InternalCode = v);
yield return CreateProperty(nameof(Communications), Communications, v => Communications = v);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()

yield return CreateProperty(nameof(AlternateName), AlternateName, v => AlternateName = v);
yield return CreateProperty(nameof(TripCode), TripCode, v => TripCode = v);
yield return CreateProperty(nameof(CountrySid), CountrySid, v => CountrySid = v);
yield return CreateProperty(nameof(Country), CountrySid, v => CountrySid = v);
}

/// <summary>
Expand Down
4 changes: 2 additions & 2 deletions samples/Demo/Beef.Demo.Business/Entities/Generated/Person.cs
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,8 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(FirstName), FirstName, v => FirstName = v);
yield return CreateProperty(nameof(LastName), LastName, v => LastName = v);
yield return CreateProperty(nameof(UniqueCode), UniqueCode, v => UniqueCode = v);
yield return CreateProperty(nameof(GenderSid), GenderSid, v => GenderSid = v);
yield return CreateProperty(nameof(EyeColorSid), EyeColorSid, v => EyeColorSid = v);
yield return CreateProperty(nameof(Gender), GenderSid, v => GenderSid = v);
yield return CreateProperty(nameof(EyeColor), EyeColorSid, v => EyeColorSid = v);
yield return CreateProperty(nameof(Birthday), Birthday, v => Birthday = v);
yield return CreateProperty(nameof(Address), Address, v => Address = v);
yield return CreateProperty(nameof(ETag), ETag, v => ETag = v);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
{
yield return CreateProperty(nameof(FirstName), FirstName, v => FirstName = v);
yield return CreateProperty(nameof(LastName), LastName, v => LastName = v);
yield return CreateProperty(nameof(GendersSids), GendersSids, v => GendersSids = v);
yield return CreateProperty(nameof(Genders), GendersSids, v => GendersSids = v);
yield return CreateProperty(nameof(OrderBy), OrderBy, v => OrderBy = v);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public partial class PostalInfo : EntityBase, IETag
/// <inheritdoc/>
protected override IEnumerable<IPropertyValue> GetPropertyValues()
{
yield return CreateProperty(nameof(CountrySid), CountrySid, v => CountrySid = v);
yield return CreateProperty(nameof(Country), CountrySid, v => CountrySid = v);
yield return CreateProperty(nameof(City), City, v => City = v);
yield return CreateProperty(nameof(State), State, v => State = v);
yield return CreateProperty(nameof(Places), Places, v => Places = v);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public partial class RefDataPrimaryKey : EntityBase, IPrimaryKey
/// <inheritdoc/>
protected override IEnumerable<IPropertyValue> GetPropertyValues()
{
yield return CreateProperty(nameof(Key1Sid), Key1Sid, v => Key1Sid = v);
yield return CreateProperty(nameof(Key1), Key1Sid, v => Key1Sid = v);
yield return CreateProperty(nameof(Other), Other, v => Other = v);
}
}
Expand Down
4 changes: 2 additions & 2 deletions samples/Demo/Beef.Demo.Business/Entities/Generated/Robot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(Id), Id, v => Id = v);
yield return CreateProperty(nameof(ModelNo), ModelNo, v => ModelNo = v);
yield return CreateProperty(nameof(SerialNo), SerialNo, v => SerialNo = v);
yield return CreateProperty(nameof(EyeColorSid), EyeColorSid, v => EyeColorSid = v);
yield return CreateProperty(nameof(PowerSourceSid), PowerSourceSid, v => PowerSourceSid = v);
yield return CreateProperty(nameof(EyeColor), EyeColorSid, v => EyeColorSid = v);
yield return CreateProperty(nameof(PowerSource), PowerSourceSid, v => PowerSourceSid = v);
yield return CreateProperty(nameof(ETag), ETag, v => ETag = v);
yield return CreateProperty(nameof(ChangeLog), ChangeLog, v => ChangeLog = v);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
{
yield return CreateProperty(nameof(ModelNo), ModelNo, v => ModelNo = v);
yield return CreateProperty(nameof(SerialNo), SerialNo, v => SerialNo = v);
yield return CreateProperty(nameof(PowerSourcesSids), PowerSourcesSids, v => PowerSourcesSids = v);
yield return CreateProperty(nameof(PowerSources), PowerSourcesSids, v => PowerSourcesSids = v);
}
}

Expand Down
4 changes: 2 additions & 2 deletions samples/Demo/Beef.Demo.Common/Beef.Demo.Common.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
<Folder Include="Agents\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CoreEx" Version="3.27.0" />
<PackageReference Include="Grpc.Tools" Version="2.66.0">
<PackageReference Include="CoreEx" Version="3.27.1" />
<PackageReference Include="Grpc.Tools" Version="2.67.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand Down
2 changes: 1 addition & 1 deletion samples/Demo/Beef.Demo.Test/Beef.Demo.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="CoreEx.UnitTesting" Version="3.27.0" />
<PackageReference Include="CoreEx.UnitTesting" Version="3.27.1" />
<PackageReference Include="NUnit.Analyzers" Version="4.3.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
6 changes: 3 additions & 3 deletions samples/My.Hr/My.Hr.Api/My.Hr.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
<ImplicitUsings>true</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.8.1" />
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.9.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.9.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\My.Hr.Business\My.Hr.Business.csproj" />
Expand Down
2 changes: 1 addition & 1 deletion samples/My.Hr/My.Hr.Business/Entities/Generated/Address.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(Street1), Street1, v => Street1 = v);
yield return CreateProperty(nameof(Street2), Street2, v => Street2 = v);
yield return CreateProperty(nameof(City), City, v => City = v);
yield return CreateProperty(nameof(StateSid), StateSid, v => StateSid = v);
yield return CreateProperty(nameof(State), StateSid, v => StateSid = v);
yield return CreateProperty(nameof(PostCode), PostCode, v => PostCode = v);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(FirstName), FirstName, v => FirstName = v);
yield return CreateProperty(nameof(LastName), LastName, v => LastName = v);
yield return CreateProperty(nameof(PhoneNo), PhoneNo, v => PhoneNo = v);
yield return CreateProperty(nameof(RelationshipSid), RelationshipSid, v => RelationshipSid = v);
yield return CreateProperty(nameof(Relationship), RelationshipSid, v => RelationshipSid = v);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
{
yield return CreateProperty(nameof(FirstName), FirstName, v => FirstName = v);
yield return CreateProperty(nameof(LastName), LastName, v => LastName = v);
yield return CreateProperty(nameof(GendersSids), GendersSids, v => GendersSids = v);
yield return CreateProperty(nameof(Genders), GendersSids, v => GendersSids = v);
yield return CreateProperty(nameof(StartFrom), StartFrom, v => StartFrom = v);
yield return CreateProperty(nameof(StartTo), StartTo, v => StartTo = v);
yield return CreateProperty(nameof(IsIncludeTerminated), IsIncludeTerminated, v => IsIncludeTerminated = v);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ protected override IEnumerable<IPropertyValue> GetPropertyValues()
yield return CreateProperty(nameof(Email), Email, v => Email = v);
yield return CreateProperty(nameof(FirstName), FirstName, v => FirstName = v);
yield return CreateProperty(nameof(LastName), LastName, v => LastName = v);
yield return CreateProperty(nameof(GenderSid), GenderSid, v => GenderSid = v);
yield return CreateProperty(nameof(Gender), GenderSid, v => GenderSid = v);
yield return CreateProperty(nameof(Birthday), Birthday, v => Birthday = v);
yield return CreateProperty(nameof(StartDate), StartDate, v => StartDate = v);
yield return CreateProperty(nameof(Termination), Termination, v => Termination = v);
Expand Down
Loading

0 comments on commit 063d954

Please sign in to comment.