Added cookies pop-up that you have to accept
This commit is contained in:
parent
6cb976fc11
commit
4e2158aea4
|
@ -5,7 +5,6 @@
|
||||||
@inject Blazored.LocalStorage.ILocalStorageService localStorage
|
@inject Blazored.LocalStorage.ILocalStorageService localStorage
|
||||||
@inject NavigationManager NavManager
|
@inject NavigationManager NavManager
|
||||||
@inject ISnackbar Snackbar
|
@inject ISnackbar Snackbar
|
||||||
@inject DataCollectorService DCollector
|
|
||||||
|
|
||||||
<MudLayout Class="overflow-hidden">
|
<MudLayout Class="overflow-hidden">
|
||||||
<MudAppBar Elevation="1">
|
<MudAppBar Elevation="1">
|
||||||
|
@ -125,8 +124,7 @@
|
||||||
|
|
||||||
protected async Task DebugButton()
|
protected async Task DebugButton()
|
||||||
{
|
{
|
||||||
ipAddress = (await DCollector.GetBrowserInfo()).ToString();
|
|
||||||
Console.WriteLine(ipAddress);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Drawers and overlays
|
#region Drawers and overlays
|
||||||
|
@ -206,6 +204,7 @@
|
||||||
async void Logout()
|
async void Logout()
|
||||||
{
|
{
|
||||||
await localStorage.RemoveItemAsync("User");
|
await localStorage.RemoveItemAsync("User");
|
||||||
|
await localStorage.RemoveItemAsync("AcceptedCookies");
|
||||||
RefreshPage();
|
RefreshPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,10 +252,36 @@
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
StateHasChanged();
|
NavManager.LocationChanged += OnNavigated;
|
||||||
|
await CheckCookiesCheck();
|
||||||
|
|
||||||
CheckLoggedin();
|
CheckLoggedin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async void OnNavigated(object sender, LocationChangedEventArgs e)
|
||||||
|
{
|
||||||
|
await CheckCookiesCheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task CheckCookiesCheck()
|
||||||
|
{
|
||||||
|
string relativeUri = NavManager.ToBaseRelativePath(NavManager.Uri);
|
||||||
|
relativeUri = (relativeUri == "") ? "Bypassss" : relativeUri;
|
||||||
|
if (!(new string[] { "Privacy", "Cookies", "TOS" }.Any(relativeUri.Contains)))
|
||||||
|
{
|
||||||
|
bool? haveAcceptedCookies = await localStorage.GetItemAsync<bool?>("AcceptedCookies");
|
||||||
|
if (haveAcceptedCookies == null || !(bool)haveAcceptedCookies)
|
||||||
|
{
|
||||||
|
NavManager.LocationChanged -= OnNavigated;
|
||||||
|
NavManager.NavigateTo("/Cookies");
|
||||||
|
NavManager.LocationChanged += OnNavigated;
|
||||||
|
await Task.Delay(500);
|
||||||
|
if (relativeUri != "Bypassss")
|
||||||
|
Snackbar.Add("Cookies not accepted, detected!", Severity.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async void CheckLoggedin()
|
async void CheckLoggedin()
|
||||||
{
|
{
|
||||||
string? name = await localStorage.GetItemAsStringAsync("User");
|
string? name = await localStorage.GetItemAsStringAsync("User");
|
||||||
|
@ -275,7 +300,7 @@
|
||||||
|
|
||||||
private void RefreshPage()
|
private void RefreshPage()
|
||||||
{
|
{
|
||||||
NavManager.NavigateTo(NavManager.Uri, forceLoad: true);
|
NavManager.NavigateTo("/", forceLoad: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class User
|
public class User
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Blazor-Analytics" Version="3.11.0" />
|
||||||
<PackageReference Include="Blazored.LocalStorage" Version="4.3.0" />
|
<PackageReference Include="Blazored.LocalStorage" Version="4.3.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.4" />
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.4" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.4" PrivateAssets="all" />
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.4" PrivateAssets="all" />
|
||||||
|
|
|
@ -128,7 +128,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isLooping = false;
|
bool isLooping = false;
|
||||||
private async Task StartLoop()
|
private async void StartLoop()
|
||||||
{
|
{
|
||||||
if (isLooping)
|
if (isLooping)
|
||||||
return;
|
return;
|
||||||
|
@ -140,7 +140,7 @@
|
||||||
messages = await messageService.GetMessages();
|
messages = await messageService.GetMessages();
|
||||||
Console.WriteLine("Chat updated!");
|
Console.WriteLine("Chat updated!");
|
||||||
|
|
||||||
await Task.Delay(10000);
|
await Task.Delay(20000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
@page "/Cookies"
|
||||||
|
@inject NavigationManager NavManager
|
||||||
|
@inject Blazored.LocalStorage.ILocalStorageService localStorage
|
||||||
|
|
||||||
|
<MudOverlay ZIndex="1400" DarkBackground="true" Visible=true Style="backdrop-filter:blur(5px)">
|
||||||
|
<MudCard>
|
||||||
|
<MudCardMedia Image="images/CookiesImage.jpg" Height="200" />
|
||||||
|
<MudCardContent>
|
||||||
|
<MudText Typo="Typo.h5">Cookies, local storage, and Privacy policy</MudText>
|
||||||
|
<MudText Typo="Typo.body1">This site <b>does not</b> use cookies!</MudText>
|
||||||
|
<MudText Typo="Typo.body2">This uses local storage, instead.</MudText>
|
||||||
|
<br/>
|
||||||
|
<MudText Typo="Typo.body2">Do you agree to our privacy policy and accept the use of local storage?</MudText>
|
||||||
|
</MudCardContent>
|
||||||
|
<MudCardActions Class="justify-end">
|
||||||
|
<MudButton Variant="Variant.Text" Color="Color.Primary" OnClick='()=>NavManager.NavigateTo("/Privacy")'>Privacy policy</MudButton>
|
||||||
|
<MudSpacer/>
|
||||||
|
<MudButton Variant="Variant.Text" Color="Color.Success" OnClick="AcceptedCookies">Accept</MudButton>
|
||||||
|
<MudButton Variant="Variant.Text" Color="Color.Error" OnClick='()=>NavManager.NavigateTo("https://www.youtube.com/watch?v=gokdrC4gQA4", replace: true)'>Decline</MudButton>
|
||||||
|
</MudCardActions>
|
||||||
|
</MudCard>
|
||||||
|
</MudOverlay>
|
||||||
|
|
||||||
|
@code{
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
bool? haveAcceptedCookies = await localStorage.GetItemAsync<bool?>("AcceptedCookies");
|
||||||
|
if (haveAcceptedCookies == null) return;
|
||||||
|
if (!(bool)haveAcceptedCookies) return;
|
||||||
|
|
||||||
|
NavManager.NavigateTo("/");
|
||||||
|
}
|
||||||
|
|
||||||
|
async void AcceptedCookies()
|
||||||
|
{
|
||||||
|
await localStorage.SetItemAsync<bool>("AcceptedCookies", true);
|
||||||
|
NavManager.NavigateTo("/Posts");
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,13 @@
|
||||||
@page "/"
|
@page "/"
|
||||||
@inject NavigationManager NavManager
|
@inject NavigationManager NavManager
|
||||||
|
@inject DataCollectorService DCollector
|
||||||
|
|
||||||
|
|
||||||
<h1>2nd loading... Please wait</h1>
|
<h1>2nd loading... Please wait</h1>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
protected override void OnInitialized()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
NavManager.NavigateTo("/Posts");
|
//await DCollector.PushDataToAnalytics();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -8,6 +8,7 @@ using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using MudBlazor;
|
using MudBlazor;
|
||||||
using Otakians.Services;
|
using Otakians.Services;
|
||||||
|
using Blazor.Analytics;
|
||||||
|
|
||||||
internal class Program
|
internal class Program
|
||||||
{
|
{
|
||||||
|
@ -25,6 +26,8 @@ internal class Program
|
||||||
builder.Services.AddBlazoredLocalStorage(config =>
|
builder.Services.AddBlazoredLocalStorage(config =>
|
||||||
config.JsonSerializerOptions.WriteIndented = true); // local storage
|
config.JsonSerializerOptions.WriteIndented = true); // local storage
|
||||||
|
|
||||||
|
builder.Services.AddGoogleAnalytics("GT-TB78HCS");
|
||||||
|
|
||||||
builder.Services.AddScoped<MessageService>();
|
builder.Services.AddScoped<MessageService>();
|
||||||
builder.Services.AddScoped<DataCollectorService>();
|
builder.Services.AddScoped<DataCollectorService>();
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
using DataStructs;
|
using Otakians.DataStructs;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Microsoft.JSInterop;
|
using Microsoft.JSInterop;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace Otakians.Services
|
namespace Otakians.Services
|
||||||
{
|
{
|
||||||
|
@ -10,11 +13,13 @@ namespace Otakians.Services
|
||||||
{
|
{
|
||||||
private readonly IJSRuntime jsRuntime;
|
private readonly IJSRuntime jsRuntime;
|
||||||
private readonly NavigationManager navigationManager;
|
private readonly NavigationManager navigationManager;
|
||||||
|
private readonly HttpClient httpClient;
|
||||||
|
|
||||||
public DataCollectorService(IJSRuntime jsRuntime, NavigationManager navigation)
|
public DataCollectorService(IJSRuntime jsRuntime, NavigationManager navigation, HttpClient httpClient)
|
||||||
{
|
{
|
||||||
this.jsRuntime = jsRuntime;
|
this.jsRuntime = jsRuntime;
|
||||||
this.navigationManager = navigation;
|
this.navigationManager = navigation;
|
||||||
|
this.httpClient = httpClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string> GetIPAddress()
|
public async Task<string> GetIPAddress()
|
||||||
|
@ -27,10 +32,43 @@ namespace Otakians.Services
|
||||||
var browserInfo = await jsRuntime.InvokeAsync<BrowserInfo>("getBrowserInfo");
|
var browserInfo = await jsRuntime.InvokeAsync<BrowserInfo>("getBrowserInfo");
|
||||||
return browserInfo;
|
return browserInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<Geolocation> GetGeolocation()
|
||||||
|
{
|
||||||
|
var position = await jsRuntime.InvokeAsync<Geolocation>("getCurrentPosition");
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task PushDataToAnalytics()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(Program.LoggedInName))
|
||||||
|
{
|
||||||
|
await Console.Out.WriteLineAsync("User not logged in. Canceling data push");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||||
|
var analyticsUrl = "https://globalchat-4a89f-default-rtdb.europe-west1.firebasedatabase.app/Database/Analytics.json";
|
||||||
|
|
||||||
|
var dataObject = new
|
||||||
|
{
|
||||||
|
Username = Program.LoggedInName,
|
||||||
|
Time = currentTime,
|
||||||
|
Data = new
|
||||||
|
{
|
||||||
|
ipAddress = await GetIPAddress(),
|
||||||
|
browserInfo = await GetBrowserInfo()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var jsonContent = new StringContent(JsonSerializer.Serialize(dataObject), Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
var response = await httpClient.PostAsync(analyticsUrl, jsonContent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace DataStructs
|
namespace Otakians.DataStructs
|
||||||
{
|
{
|
||||||
public class BrowserInfo
|
public class BrowserInfo
|
||||||
{
|
{
|
||||||
|
@ -56,4 +94,11 @@ namespace DataStructs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class Geolocation
|
||||||
|
{
|
||||||
|
public double? latitude { get; set; }
|
||||||
|
public double? longitude { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
|
@ -30,6 +30,18 @@
|
||||||
<script src="_framework/blazor.webassembly.js"></script>
|
<script src="_framework/blazor.webassembly.js"></script>
|
||||||
<script src="_content/MudBlazor/MudBlazor.min.js"></script>
|
<script src="_content/MudBlazor/MudBlazor.min.js"></script>
|
||||||
<script src="/jsFunctions.js"></script>
|
<script src="/jsFunctions.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Google tag (gtag.js) -->
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id=G-W0L355ZGK7"></script>
|
||||||
|
<script>
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag() { dataLayer.push(arguments); }
|
||||||
|
gtag('js', new Date());
|
||||||
|
|
||||||
|
gtag('config', 'G-W0L355ZGK7');
|
||||||
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -18,4 +18,20 @@ function getBrowserInfo() {
|
||||||
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||||
userAgent: navigator.userAgent
|
userAgent: navigator.userAgent
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.getCurrentPosition = () => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
navigator.geolocation.getCurrentPosition(
|
||||||
|
position => {
|
||||||
|
resolve({
|
||||||
|
latitude: position.coords.latitude,
|
||||||
|
longitude: position.coords.longitude
|
||||||
|
});
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue