feat(web): WIP key expiration

This commit is contained in:
Zack Spear
2023-09-27 17:15:03 -07:00
committed by Zack Spear
parent 4d3e8bee84
commit 7246ee34bd
6 changed files with 64 additions and 43 deletions

View File

@@ -29,7 +29,8 @@ const randomGuid = `1111-1111-${makeid(4)}-123412341234`; // this guid is regist
// EBLACKLISTED1
// EBLACKLISTED2
// ENOCONN
const state: ServerState = 'STARTER';
const state: ServerState = 'UNLEASHED';
let regDev = 0;
let regTy = '';
switch (state) {
// @ts-ignore
@@ -39,20 +40,23 @@ switch (state) {
// @ts-ignore
case 'TRIAL':
regTy = 'Trial';
break;
// @ts-ignore
case 'BASIC':
regDev = 6;
// @ts-ignore
case 'PLUS':
regDev = 12;
// @ts-ignore
case 'PRO':
// @ts-ignore
case 'STARTER':
regDev = 4;
// @ts-ignore
case 'UNLEASHED':
// @ts-ignore
case 'LIFETIME':
regTy = state.charAt(0).toUpperCase() + state.substring(1).toLowerCase(); // title case
if (regDev === 0) regDev = 99999;
if (regTy === '') regTy = state.charAt(0).toUpperCase() + state.substring(1).toLowerCase(); // title case
break;
}
@@ -69,8 +73,8 @@ export const serverState: Server = {
// error: 'INVALID',
valid: true,
},
connectPluginInstalled: 'dynamix.unraid.net.staging.plg',
// connectPluginInstalled: '',
// connectPluginInstalled: 'dynamix.unraid.net.staging.plg',
connectPluginInstalled: '',
description: 'DevServer9000',
deviceCount: 12,
expireTime,
@@ -90,8 +94,8 @@ export const serverState: Server = {
regTm: uptime,
regTo: 'Zack Spear',
regTy,
// regUpdExpAt: oneHourFromNow,
regUpdExpAt: uptime,
// regExp: oneHourFromNow,
regExp: uptime,
// "regGuid": "0781-5583-8355-81071A2B0211",
site: 'http://localhost:4321',
state,

View File

@@ -56,8 +56,8 @@ const {
regTm,
regTo,
regTy,
regUpdExpAt,
regUpdExpired,
regExp,
regUpdatesExpired,
state,
stateData,
stateDataError,
@@ -106,11 +106,12 @@ const items = computed((): RegistrationItemProps[] => {
label: t('Registered on'),
text: dayjs(regTm.value).format('YYYY-MM-DD HH:mm'),
}] : []),
...(regUpdExpAt.value && (state.value === 'STARTER' || state.value === 'UNLEASHED') ? [{
error: regUpdExpired.value,
...(regExp.value && (state.value === 'STARTER' || state.value === 'UNLEASHED') ? [{
error: regUpdatesExpired.value,
label: t('OS Update Eligibility'),
component: RegistrationUpgradeExpiration,
componentProps: { t: t },
componentOpacity: !regUpdatesExpired.value,
}]
: []),
...(state.value === 'EGUID' ? [{

View File

@@ -13,27 +13,27 @@ const props = defineProps<Props>();
const { buildStringFromValues, dateDiff, formatDate } = useTimeHelper(props.t);
const serverStore = useServerStore();
const { regTy, regUpdExpAt, regUpdExpired, state } = storeToRefs(serverStore);
const { regTy, regExp, regUpdatesExpired, state } = storeToRefs(serverStore);
const parsedTime = ref<string>('');
const formattedTime = computed<string>(() => formatDate(regUpdExpAt.value));
const formattedTime = computed<string>(() => formatDate(regExp.value));
const output = computed(() => {
if (!regUpdExpAt.value) {
if (!regExp.value) {
return undefined;
}
return {
title: regUpdExpired.value
? props.t('Expired at {0}', [formattedTime.value])
: props.t('Expires at {0}', [formattedTime.value]),
text: regUpdExpired.value
? props.t('Expired {0}', [parsedTime.value])
: props.t('Expires in {0}', [parsedTime.value]),
text: regUpdatesExpired.value
? props.t('Ineligible since {0}', [formattedTime.value])
: props.t('Valid until {0}', [formattedTime.value]),
title: regUpdatesExpired.value
? props.t('Ineligible as of {0}', [parsedTime.value])
: props.t('Valid for {0}', [parsedTime.value]),
};
});
const runDiff = () => {
parsedTime.value = buildStringFromValues(dateDiff((regUpdExpAt.value).toString(), false));
parsedTime.value = buildStringFromValues(dateDiff((regExp.value).toString(), false));
};
let interval: string | number | NodeJS.Timeout | undefined;
@@ -51,10 +51,14 @@ onBeforeUnmount(() => {
</script>
<template>
<p
v-if="output"
:title="output.title"
>
{{ output.text }}
</p>
<span v-if="output" class="flex flex-col gap-y-4px">
<p
:title="output.title"
>
{{ output.text }}
</p>
<p v-if="regUpdatesExpired" class="text-14px opacity-90">
<em>{{ t('Renew your license key to continue receiving OS updates.') }}</em>
</p>
</span>
</template>

View File

@@ -258,15 +258,22 @@
"License key actions": "License key actions",
"License key type": "License key type",
"OS Update Eligibility Expiration": "OS Update Eligibility Expiration",
"Expired at {0}": "Expired at {0}",
"Expires at {0}": "Expires at {0}",
"Expired {0}": "Expired {0}",
"Expires in {0}": "Expires in {0}",
"Ineligible since {0}": "Ineligible since {0}",
"Valid until {0}": "Valid until {0}",
"Ineligible as of {0}": "Ineligible as of {0}",
"Valid for {0}": "Valid for {0}",
"Renew your license key now": "Renew your license key now",
"Renew Key to Enable OS Updates": "Renew Key to Enable OS Updates",
"Check Eligibility": "Check Eligibility",
"Eligible": "Eligible",
"Ineligible": "Ineligible",
"Flash GUID required": "Flash GUID required",
"Unraid {0}": "Unraid {0}"
"Flash GUID required to check replacement status": "Flash GUID required to check replacement status",
"Keyfile required to check replacement status": "Keyfile required to check replacement status",
"Unraid {0}": "Unraid {0}",
"OS Update Eligibility": "OS Update Eligibility",
"Key Replacement Eligibility": "Key Replacement Eligibility",
"Starter": "Starter",
"Unleashed": "Unleashed",
"Lifetime": "Lifetime",
"Renew your license key to continue receiving OS updates.": "Renew your license key to continue receiving OS updates."
}

View File

@@ -85,13 +85,14 @@ export const useServerStore = defineStore('server', () => {
const name = ref<string>('');
const osVersion = ref<string>('');
const registered = ref<boolean>();
const regDev = ref<number>(0);
const regGen = ref<number>(0);
const regGuid = ref<string>('');
const regTm = ref<number>(0);
const regTo = ref<string>('');
const regTy = ref<string>('');
const regUpdExpAt = ref<number>(0);
const regUpdExpired = computed(() => regUpdExpAt.value < Date.now()); // @todo temp solution until webgui provides
const regExp = ref<number>(0);
const regUpdatesExpired = computed(() => regExp.value < Date.now()); // @todo temp solution until webgui provides
const site = ref<string>('');
const state = ref<ServerState>();
const theme = ref<Theme>();
@@ -141,6 +142,7 @@ export const useServerStore = defineStore('server', () => {
name: name.value,
osVersion: osVersion.value,
registered: registered.value,
regDev: regDev.value,
regGen: regGen.value,
regGuid: regGuid.value,
site: site.value,
@@ -375,9 +377,9 @@ export const useServerStore = defineStore('server', () => {
case 'BASIC':
case 'STARTER':
return {
/** @todo for starter we need to have a renew key action */
actions: [
...(!registered.value && connectPluginInstalled.value ? [signInAction.value] : []),
...(state.value === 'STARTER' && regUpdatesExpired.value ? [renewAction.value] : []),
...([upgradeAction]),
...(registered.value && connectPluginInstalled.value ? [signOutAction.value] : []),
],
@@ -408,9 +410,9 @@ export const useServerStore = defineStore('server', () => {
case 'LIFETIME':
case 'UNLEASHED':
return {
/** @todo for unleashed we need to have a renew key action */
actions: [
...(!registered.value && connectPluginInstalled.value ? [signInAction.value] : []),
...(state.value === 'UNLEASHED' && regUpdatesExpired.value ? [renewAction.value] : []),
...(registered.value && connectPluginInstalled.value ? [signOutAction.value] : []),
],
humanReadable: state.value === 'PRO'
@@ -587,7 +589,8 @@ export const useServerStore = defineStore('server', () => {
const trialExtensionEligible = computed(() => !regGen.value || regGen.value < 2);
const tooManyDevices = computed((): Error | undefined => {
if (!config.value?.valid && config.value?.error === 'INVALID') {
if ((deviceCount.value !== 0 && regDev.value !== 0 && deviceCount.value > regDev.value)
|| !config.value?.valid && config.value?.error === 'INVALID') {
return {
heading: 'Too Many Devices',
level: 'error',
@@ -734,7 +737,7 @@ export const useServerStore = defineStore('server', () => {
if (typeof data?.regGen !== 'undefined') { regGen.value = data.regGen; }
if (typeof data?.regGuid !== 'undefined') { regGuid.value = data.regGuid; }
if (typeof data?.regTy !== 'undefined') { regTy.value = data.regTy; }
if (typeof data?.regUpdExpAt !== 'undefined') { regUpdExpAt.value = data.regUpdExpAt; }
if (typeof data?.regExp !== 'undefined') { regExp.value = data.regExp; }
if (typeof data?.site !== 'undefined') { site.value = data.site; }
if (typeof data?.state !== 'undefined') { state.value = data.state; }
if (typeof data?.theme !== 'undefined') { theme.value = data.theme; }
@@ -868,13 +871,14 @@ export const useServerStore = defineStore('server', () => {
name,
osVersion,
registered,
regDev,
regGen,
regGuid,
regTm,
regTo,
regTy,
regUpdExpAt,
regUpdExpired,
regExp,
regUpdatesExpired,
site,
state,
theme,

View File

@@ -63,13 +63,14 @@ export interface Server {
name?: string;
osVersion?: string;
registered?: boolean;
regDev?: number;
regGen?: number;
regGuid?: string;
regTm?: number;
regTo?: string;
regTy?: string;
regUpdExpAt?: number;
regUpdExpired?: boolean;
regExp?: number;
regUpdatesExpired?: boolean;
site?: string;
state?: ServerState;
theme?: Theme | undefined;