Skip to content

Commit

Permalink
Auto redirect to premium content
Browse files Browse the repository at this point in the history
  • Loading branch information
Harvey1214 authored and hakenr committed Nov 6, 2024
1 parent 1022903 commit da1a630
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 68 deletions.
105 changes: 53 additions & 52 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,54 +1,55 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<AspNetCoreVersion8>8.0.10</AspNetCoreVersion8>
<AspNetCoreVersion9>9.0.0-rc.2.24474.3</AspNetCoreVersion9>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Blazored.FluentValidation" Version="2.2.0" />
<PackageVersion Include="bunit.web" Version="1.33.3" />
<PackageVersion Include="Grpc.AspNetCore.Web" Version="2.66.0" />
<PackageVersion Include="Grpc.Net.Client" Version="2.66.0" />
<PackageVersion Include="Grpc.Net.Client.Web" Version="2.66.0" />
<PackageVersion Include="Havit.Core" Version="2.0.30" />
<PackageVersion Include="Havit.AspNetCore" Version="2.0.22" />
<PackageVersion Include="LoxSmoke.DocXml" Version="3.7.1" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="$(AspNetCoreVersion9)" Condition="'$(TargetFramework)' == 'net9.0'" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="$(AspNetCoreVersion8)" Condition="'$(TargetFramework)' == 'net8.0'" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="$(AspNetCoreVersion9)" Condition="'$(TargetFramework)' == 'net9.0'" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="$(AspNetCoreVersion8)" Condition="'$(TargetFramework)' == 'net8.0'" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="$(AspNetCoreVersion9)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="$(AspNetCoreVersion9)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="$(AspNetCoreVersion9)" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.11.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.10" />
<PackageVersion Include="Microsoft.Extensions.Localization" Version="8.0.10" />
<PackageVersion Include="Microsoft.Extensions.Localization.Abstractions" Version="8.0.10" />
<PackageVersion Include="Moq" Version="4.20.72" />
<PackageVersion Include="MSTest" Version="3.6.1" />
<PackageVersion Include="protobuf-net" Version="3.2.45" />
<PackageVersion Include="protobuf-net.Grpc" Version="1.2.2" />
<PackageVersion Include="protobuf-net.Grpc.AspNetCore" Version="1.2.2" />
<PackageVersion Include="protobuf-net.Grpc.ClientFactory" Version="1.2.2" />
<PackageVersion Include="SmartComponents.AspNetCore" Version="0.1.0-preview10148" />
<PackageVersion Include="SmartComponents.AspNetCore.Components" Version="0.1.0-preview10148" />
<PackageVersion Include="SmartComponents.Inference.OpenAI" Version="0.1.0-preview10148" />
<PackageVersion Include="SmartComponents.LocalEmbeddings" Version="0.1.0-preview10148" />
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
</ItemGroup>
<ItemGroup>
<!-- https://github.com/microsoft/MSBuildSdks/tree/main/src/CopyOnWrite -->
<GlobalPackageReference Include="Microsoft.Build.CopyOnWrite" Version="1.0.332">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</GlobalPackageReference>
<!-- TEMP for net9 ADOS BUILD -->
<GlobalPackageReference Include="Microsoft.Net.Sdk.Compilers.Toolset" Version="9.0.100-rc.2.24474.11" />
</ItemGroup>
<ItemGroup Condition="'$(ProjectName.EndsWith(`Tests`))' == 'False'">
<GlobalPackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.11.20">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</GlobalPackageReference>
</ItemGroup>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<AspNetCoreVersion8>8.0.10</AspNetCoreVersion8>
<AspNetCoreVersion9>9.0.0-rc.2.24474.3</AspNetCoreVersion9>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Blazored.FluentValidation" Version="2.2.0" />
<PackageVersion Include="bunit.web" Version="1.33.3" />
<PackageVersion Include="Grpc.AspNetCore.Web" Version="2.66.0" />
<PackageVersion Include="Grpc.Net.Client" Version="2.66.0" />
<PackageVersion Include="Grpc.Net.Client.Web" Version="2.66.0" />
<PackageVersion Include="Havit.Core" Version="2.0.30" />
<PackageVersion Include="Havit.AspNetCore" Version="2.0.22" />
<PackageVersion Include="LoxSmoke.DocXml" Version="3.7.1" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="$(AspNetCoreVersion9)" Condition="'$(TargetFramework)' == 'net9.0'" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="$(AspNetCoreVersion8)" Condition="'$(TargetFramework)' == 'net8.0'" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="$(AspNetCoreVersion9)" Condition="'$(TargetFramework)' == 'net9.0'" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="$(AspNetCoreVersion8)" Condition="'$(TargetFramework)' == 'net8.0'" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="$(AspNetCoreVersion9)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="$(AspNetCoreVersion9)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="$(AspNetCoreVersion9)" />
<PackageVersion Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.11.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.10" />
<PackageVersion Include="Microsoft.Extensions.Localization" Version="8.0.10" />
<PackageVersion Include="Microsoft.Extensions.Localization.Abstractions" Version="8.0.10" />
<PackageVersion Include="Moq" Version="4.20.72" />
<PackageVersion Include="MSTest" Version="3.6.1" />
<PackageVersion Include="protobuf-net" Version="3.2.45" />
<PackageVersion Include="protobuf-net.Grpc" Version="1.2.2" />
<PackageVersion Include="protobuf-net.Grpc.AspNetCore" Version="1.2.2" />
<PackageVersion Include="protobuf-net.Grpc.ClientFactory" Version="1.2.2" />
<PackageVersion Include="SmartComponents.AspNetCore" Version="0.1.0-preview10148" />
<PackageVersion Include="SmartComponents.AspNetCore.Components" Version="0.1.0-preview10148" />
<PackageVersion Include="SmartComponents.Inference.OpenAI" Version="0.1.0-preview10148" />
<PackageVersion Include="SmartComponents.LocalEmbeddings" Version="0.1.0-preview10148" />
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
</ItemGroup>
<ItemGroup>
<!-- https://github.com/microsoft/MSBuildSdks/tree/main/src/CopyOnWrite -->
<GlobalPackageReference Include="Microsoft.Build.CopyOnWrite" Version="1.0.332">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</GlobalPackageReference>
<!-- TEMP for net9 ADOS BUILD -->
<GlobalPackageReference Include="Microsoft.Net.Sdk.Compilers.Toolset" Version="9.0.100-rc.2.24474.11" />
</ItemGroup>
<ItemGroup Condition="'$(ProjectName.EndsWith(`Tests`))' == 'False'">
<GlobalPackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.11.20">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</GlobalPackageReference>
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
<ItemGroup>
<PackageReference Include="LoxSmoke.DocXml" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,6 @@
<PageTitle>Access Premium Content | HAVIT Blazor Bootstrap - Free components for ASP.NET Core Blazor</PageTitle>
<DocHeadContent CanonicalRelativeUrl="/premium/access-content" />

<HeadContent>
@GenerateHeadContent()
</HeadContent>

<div class="d-flex w-100 h-100 justify-content-center align-items-center my-5">
<HxCard CssClass="rounded-4 border-0 bg-body-secondary" BodyCssClass="d-flex flex-column align-items-center p-4">
<BodyTemplate>
Expand Down
49 changes: 37 additions & 12 deletions Havit.Blazor.Documentation/Pages/Premium/GatewayToPremium.razor.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Microsoft.JSInterop;
using Microsoft.AspNetCore.Http;
using Microsoft.JSInterop;

namespace Havit.Blazor.Documentation.Pages.Premium;

Expand All @@ -9,9 +10,44 @@ public partial class GatewayToPremium : IAsyncDisposable
[Inject] private NavigationManager NavigationManager { get; set; }
[Inject] private IJSRuntime JSRuntime { get; set; }

[CascadingParameter] private HttpContext HttpContext { get; set; }

private IJSObjectReference _jsModule;
private bool _skipGatewayPage = true;

protected override async Task OnInitializedAsync()
{
await RedirectToPremiumContentIfCookieIsSet();
}

protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await RedirectToPremiumContentIfCookieIsSet();
}
}

private async Task RedirectToPremiumContentIfCookieIsSet()
{
if (!RendererInfo.IsInteractive)
{
if (HttpContext.Request.Cookies.Any(c => c.Key.StartsWith("SkipGatewayPage")))
{
NavigationManager.NavigateTo(Url);
}
}
else
{
await EnsureJsModuleAsync();
string skipGatewayPage = await _jsModule.InvokeAsync<string>("getSkipGatewayPage");
if (!string.IsNullOrEmpty(skipGatewayPage))
{
NavigationManager.NavigateTo(Url);
}
}
}

private async Task ContinueToPremiumContent()
{
if (_skipGatewayPage)
Expand All @@ -27,17 +63,6 @@ private async Task EnsureJsModuleAsync()
_jsModule ??= await JSRuntime.ImportModuleAsync($"./Pages/Premium/{nameof(GatewayToPremium)}.razor.js");
}

private MarkupString GenerateHeadContent()
{
return (MarkupString)$$"""
<script>
if (document.cookie.split(';').some((item) => item.trim() === 'SkipGatewayPage=true')) {
window.location.href = '{{Url}}'
}
</script>
""";
}

public async ValueTask DisposeAsync()
{
if (_jsModule != null)
Expand Down
16 changes: 16 additions & 0 deletions Havit.Blazor.Documentation/Pages/Premium/GatewayToPremium.razor.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,19 @@
date.setTime(date.getTime() + (60 * 24 * 60 * 60 * 1000)); // 60 days
document.cookie = "SkipGatewayPage=" + skipGatewayPage + "; expires = " + date.toGMTString() + "; path = /";
}

export function getSkipGatewayPage() {
const name = "SkipGatewayPage=";
const decodedCookie = decodeURIComponent(document.cookie);
const ca = decodedCookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === ' ') {
c = c.substring(1);
}
if (c.indexOf(name) === 0) {
return c.substring(name.length, c.length);
}
}
return "";
}

0 comments on commit da1a630

Please sign in to comment.