From ec8d2bc0e84513ccda6193f40c0d323c381cb647 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Mon, 29 Jan 2024 16:38:02 -0800 Subject: [PATCH] feat: getOsReleaseBySha256 cached endpoint with keyfile header --- web/composables/services/keyServer.ts | 7 ------- web/composables/services/releases.ts | 17 +++++++++++++++++ web/store/updateOsActions.ts | 20 +++++++++++++------- 3 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 web/composables/services/releases.ts diff --git a/web/composables/services/keyServer.ts b/web/composables/services/keyServer.ts index bbc96f2c1..a41aac7f0 100644 --- a/web/composables/services/keyServer.ts +++ b/web/composables/services/keyServer.ts @@ -1,7 +1,5 @@ import { request } from '~/composables/services/request'; -import type { Release } from '~/store/updateOsActions'; - const KeyServer = request.url('https://keys.lime-technology.com'); export interface StartTrialPayload { @@ -48,8 +46,3 @@ export const keyLatest = async (payload: KeyLatestPayload): Promise => await KeyServer - .url(`/versions/sha256/${sha256}`) - .get() - .json(); diff --git a/web/composables/services/releases.ts b/web/composables/services/releases.ts new file mode 100644 index 000000000..63ba67faf --- /dev/null +++ b/web/composables/services/releases.ts @@ -0,0 +1,17 @@ +import { request } from '~/composables/services/request'; + +import type { Release } from '~/store/updateOsActions'; + +const ReleasesRequest = request.url('https://releases.unraid.net'); + +export interface GetOsReleaseBySha256Payload { + keyfile: string; + sha256: string; +} +export const getOsReleaseBySha256 = async (payload: GetOsReleaseBySha256Payload): Promise => await ReleasesRequest + .headers({ + 'X-Unraid-Keyfile': payload.keyfile, + }) + .url(`/sha256/${payload.sha256}`) + .get() + .json(); diff --git a/web/store/updateOsActions.ts b/web/store/updateOsActions.ts index 90d5e1375..ba3be7b70 100644 --- a/web/store/updateOsActions.ts +++ b/web/store/updateOsActions.ts @@ -2,7 +2,7 @@ import { ArrowPathIcon, BellAlertIcon } from '@heroicons/vue/24/solid'; import { defineStore, createPinia, setActivePinia } from 'pinia'; import useInstallPlugin from '~/composables/installPlugin'; -import { getOsReleaseBySha256 } from '~/composables/services/keyServer'; +import { getOsReleaseBySha256, type GetOsReleaseBySha256Payload } from '~/composables/services/releases'; import { WEBGUI_TOOLS_UPDATE } from '~/helpers/urls'; @@ -124,13 +124,16 @@ export const useUpdateOsActionsStore = defineStore('updateOsActions', () => { /** * @description When receiving the callback the Account update page we'll use the provided sha256 of the release to get the release from the keyserver */ - const getReleaseFromKeyServer = async (sha256: string) => { - console.debug('[getReleaseFromKeyServer]', sha256); - if (!sha256) { - throw new Error('No sha256 provided'); + const getReleaseFromKeyServer = async (payload: GetOsReleaseBySha256Payload) => { + console.debug('[getReleaseFromKeyServer]', payload); + if (!payload.keyfile) { + throw new Error('No payload.keyfile provided'); + } + if (!payload.sha256) { + throw new Error('No payload.sha256 provided'); } try { - const response = await getOsReleaseBySha256(sha256); + const response = await getOsReleaseBySha256(payload); console.debug('[getReleaseFromKeyServer]', response); return response; } catch (error) { @@ -145,7 +148,10 @@ export const useUpdateOsActionsStore = defineStore('updateOsActions', () => { }; const actOnUpdateOsAction = async () => { - const foundRelease = await getReleaseFromKeyServer(updateAction.value?.sha256 ?? ''); + const foundRelease = await getReleaseFromKeyServer({ + keyfile: keyfile.value, + sha256: updateAction.value?.sha256 ?? '', + }); console.debug('[redirectToCallbackType] updateOs foundRelease', foundRelease); if (!foundRelease) { throw new Error('Release not found');