feat: getOsReleaseBySha256 cached endpoint with keyfile header

This commit is contained in:
Zack Spear
2024-01-29 16:38:02 -08:00
committed by Zack Spear
parent d83664b6a3
commit ec8d2bc0e8
3 changed files with 30 additions and 14 deletions

View File

@@ -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<KeyLatestRes
.formUrl(payload)
.post()
.json();
export const getOsReleaseBySha256 = async (sha256: string): Promise<Release> => await KeyServer
.url(`/versions/sha256/${sha256}`)
.get()
.json();

View File

@@ -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<Release> => await ReleasesRequest
.headers({
'X-Unraid-Keyfile': payload.keyfile,
})
.url(`/sha256/${payload.sha256}`)
.get()
.json();

View File

@@ -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');