UIpdate pagina about x check licenze e server
This commit is contained in:
@@ -120,10 +120,26 @@ namespace MP.Land.Data
|
||||
|
||||
public DateTime infoExpiry { get; set; } = DateTime.Today.AddDays(1);
|
||||
|
||||
/// <summary>
|
||||
/// Codice cliente/installazione
|
||||
/// </summary>
|
||||
public string Installazione { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Master key licenza principale
|
||||
/// </summary>
|
||||
public string MasterKey { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Numero licenze da DB
|
||||
/// </summary>
|
||||
public int NumLicDb { get; set; } = -1;
|
||||
|
||||
/// <summary>
|
||||
/// Numero licenze da auth remota
|
||||
/// </summary>
|
||||
public int NumLicRemote { get; set; } = -1;
|
||||
|
||||
public bool ValidData
|
||||
{
|
||||
get
|
||||
@@ -184,6 +200,25 @@ namespace MP.Land.Data
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// Cerca di recuperare valore INT da elenco AKV
|
||||
/// </summary>
|
||||
/// <param name="varReq">Chiave AKV richiesta</param>
|
||||
/// <returns></returns>
|
||||
protected int getAVKInt(string varReq)
|
||||
{
|
||||
int answ = -9999;
|
||||
if (AKVList != null && AKVList.Count > 0)
|
||||
{
|
||||
var currRec = AKVList.Where(x => x.NomeVar == varReq).FirstOrDefault();
|
||||
if (currRec != null)
|
||||
{
|
||||
answ = currRec.ValInt ?? 0;
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cerca di recuperare valore string da elenco AKV
|
||||
/// </summary>
|
||||
@@ -285,6 +320,54 @@ namespace MP.Land.Data
|
||||
return await Task.FromResult(dbResult);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifica attivazione licenza
|
||||
/// </summary>
|
||||
/// <param name="authKey"></param>
|
||||
/// <returns></returns>
|
||||
public bool checkLicenseActive(string authKey)
|
||||
{
|
||||
bool answ = false;
|
||||
//cerco anche nelle info AKV
|
||||
if (AKVList != null)
|
||||
{
|
||||
var recLic = AKVList.Where(x => x.ValString == authKey).FirstOrDefault();
|
||||
int numLic = 0;
|
||||
//cerco in record
|
||||
if (recLic != null)
|
||||
{
|
||||
numLic = (int)recLic.ValInt;
|
||||
// verifico scadenza licenza!
|
||||
DateTime scadenza = licenseManGLS.expiryDateByAuthKey(Installazione, recLic.NomeVar, numLic, authKey);
|
||||
answ = scadenza > DateTime.Today;
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogInformation($"Record non trovato per {authKey}");
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stato server gestione licenze
|
||||
/// </summary>
|
||||
public async Task<string> checkLimanServer()
|
||||
{
|
||||
string answ = "ND";
|
||||
// cerco online
|
||||
RestClient client = new RestClient(apiUrl);
|
||||
var request = new RestRequest($"/api/health", Method.Get);
|
||||
var response = await client.GetAsync(request);
|
||||
// controllo risposta
|
||||
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
// verifico risposta
|
||||
answ = response.Content.Replace("\"", "");
|
||||
}
|
||||
return await Task.FromResult(answ);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Init della classe con variabili di base da Redis/DB
|
||||
/// </summary>
|
||||
@@ -294,6 +377,7 @@ namespace MP.Land.Data
|
||||
Applicazione = "MAPO";
|
||||
Installazione = getAVKStr("Installazione");
|
||||
MasterKey = getAVKStr(Applicazione);
|
||||
NumLicDb = getAVKInt(Applicazione);
|
||||
fatto = !string.IsNullOrEmpty($"{Installazione}{MasterKey}");
|
||||
return fatto;
|
||||
}
|
||||
@@ -334,35 +418,6 @@ namespace MP.Land.Data
|
||||
return fatto;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifica attivazione licenza
|
||||
/// </summary>
|
||||
/// <param name="authKey"></param>
|
||||
/// <returns></returns>
|
||||
public bool checkLicenseActive(string authKey)
|
||||
{
|
||||
bool answ = false;
|
||||
//cerco anche nelle info AKV
|
||||
if (AKVList != null)
|
||||
{
|
||||
var recLic = AKVList.Where(x => x.ValString == authKey).FirstOrDefault();
|
||||
int numLic = 0;
|
||||
//cerco in record
|
||||
if (recLic != null)
|
||||
{
|
||||
numLic = (int)recLic.ValInt;
|
||||
// verifico scadenza licenza!
|
||||
DateTime scadenza = licenseManGLS.expiryDateByAuthKey(Installazione, recLic.NomeVar, numLic, authKey);
|
||||
answ = scadenza > DateTime.Today;
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogInformation($"Record non trovato per {authKey}");
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RootNamespace>MP.Land</RootNamespace>
|
||||
<Version>6.15.2204.1216</Version>
|
||||
<Version>6.15.2204.2309</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
+58
-14
@@ -2,6 +2,7 @@
|
||||
@using MP.Land.Data
|
||||
|
||||
@inject MessageService AppMService
|
||||
@inject LicenseService LicServ
|
||||
|
||||
<div class="row mx-2">
|
||||
<div class="col-12 col-lg-8 offset-lg-2">
|
||||
@@ -28,28 +29,71 @@
|
||||
<img src="img/LogoMapoFull.png" class="img-fluid" />
|
||||
</div>
|
||||
<div class="col-lg-3"></div>
|
||||
<div class="col-12">
|
||||
<div class="col-6">
|
||||
<h4 class="card-title">@Messaggio</h4>
|
||||
<br />
|
||||
<p>MoonPro / MAPO sono una suite di applicazioni e dispositivi hw dedicati per l'IOT,l'industry 4.0 e la gestione automatizzata dei processi produttivi.</p>
|
||||
<hr />
|
||||
<p>Per maggiori informazioni <a href="http://www.steamware.net/iot" target="_blank">visita il link</a> sul nostro sito.</p>
|
||||
</div>
|
||||
<div class="col-6 text-right">
|
||||
<div runat="server" id="divCheck" class="@mainCss">
|
||||
<h4>Info installazione</h4>
|
||||
<hr />
|
||||
<div class="d-flex justify-content-between @remSrvCss">
|
||||
<div class="px-2">
|
||||
<i class="fa fa-server" aria-hidden="true"></i> Remote Server:
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<b>@ServerStatus</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="px-2">
|
||||
<i class="fa fa-certificate" aria-hidden="true"></i> Cliente:
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<b>@Installazione</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="px-2">
|
||||
<i class="fa fa-desktop" aria-hidden="true"></i> App:
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<b>@Applicazione</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="px-2">
|
||||
<i class="fa fa-users" aria-hidden="true"></i> Licenze:
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<b title="# Licenze locali / # Licenze Remote">@Licenze</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between @expDateCss">
|
||||
<div class="px-2">
|
||||
<i class="far fa-calendar-check" aria-hidden="true"></i> Scadenza:
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<b>@($"{Scadenza:yyyy/MM/dd}")</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="px-2">
|
||||
<i class="fa fa-key" aria-hidden="true"></i> Key
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<span Font-Size="0.6em">@MastKey</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
|
||||
protected string Titolo = "";
|
||||
protected string Messaggio = "";
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
Titolo = "MES | SCADA | IOT";
|
||||
Messaggio = "Soluzione integrata per la gestione della produzione";
|
||||
AppMService.ShowSearch = false;
|
||||
AppMService.PageName = "About";
|
||||
AppMService.PageIcon = "fas fa-info-circle pr-2";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using System.Net.Http;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Forms;
|
||||
using Microsoft.AspNetCore.Components.Routing;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.Components.Web.Virtualization;
|
||||
using Microsoft.JSInterop;
|
||||
using MP.Land;
|
||||
using MP.Land.Shared;
|
||||
using MP.Land.Data;
|
||||
|
||||
namespace MP.Land.Pages
|
||||
{
|
||||
public partial class About
|
||||
{
|
||||
protected string Titolo = "";
|
||||
protected string Messaggio = "";
|
||||
|
||||
protected string ServerStatus = "SrvState";
|
||||
protected string Installazione = "Inst";
|
||||
protected string Applicazione = "App";
|
||||
protected string Licenze = "#";
|
||||
protected DateTime Scadenza = DateTime.Today;
|
||||
protected string MastKey = "########################";
|
||||
|
||||
protected string mainCss = "alert alert-info";
|
||||
protected string remSrvCss = "bg-danger text-warning";
|
||||
protected string expDateCss = "bg-danger text-warning";
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
updatePageHead();
|
||||
|
||||
await reloadLicenseData();
|
||||
}
|
||||
|
||||
private async Task reloadLicenseData()
|
||||
{
|
||||
// recupero dati
|
||||
LicServ.InitAkv();
|
||||
Installazione = LicServ.Installazione;
|
||||
Applicazione = LicServ.Applicazione;
|
||||
Licenze=$"{LicServ.NumLicDb}/??";
|
||||
MastKey = LicServ.MasterKey;
|
||||
// verifico stati
|
||||
ServerStatus = await LicServ.checkLimanServer();
|
||||
bool okRemoteSrv = ServerStatus == "OK";
|
||||
bool okScadenza = LicServ.checkLicenseActive(LicServ.MasterKey);
|
||||
bool okNumLic = true; //((licenzeGPW.licenzeAttive <= licenzeGPW.licenzeDb) && (licenzeGPW.licenzeDb <= licenzeGPW.licenzeOnline));
|
||||
|
||||
// aggiornamento css secondo status colore da check
|
||||
mainCss = okNumLic ? "alert alert-success shadowBox" : "alert alert-warning shadowBox";
|
||||
expDateCss = okScadenza ? "d-flex justify-content-between" : "d-flex justify-content-between bg-danger text-warning";
|
||||
remSrvCss = okRemoteSrv ? "d-flex justify-content-between" : "d-flex justify-content-between bg-danger text-warning";
|
||||
}
|
||||
|
||||
private void updatePageHead()
|
||||
{
|
||||
Titolo = "MES | SCADA | IOT";
|
||||
Messaggio = "Soluzione integrata per la gestione della produzione";
|
||||
AppMService.ShowSearch = false;
|
||||
AppMService.PageName = "About";
|
||||
AppMService.PageIcon = "fas fa-info-circle pr-2";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo gestione Programmi MAPO</i>
|
||||
<h4>Versione: 6.15.2204.1216</h4>
|
||||
<h4>Versione: 6.15.2204.2309</h4>
|
||||
<br />
|
||||
Note di rilascio:
|
||||
<ul>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.15.2204.1216
|
||||
6.15.2204.2309
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.15.2204.1216</version>
|
||||
<version>6.15.2204.2309</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/MP.Land.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
Reference in New Issue
Block a user