mirror of
https://github.com/unraid/api.git
synced 2026-02-17 21:48:34 -06:00
feat(web): WIP key expiration
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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' ? [{
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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."
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user