diff --git a/src/lib/v2/toast/Notification.svelte b/src/lib/v2/toast/Notification.svelte
index af54f46..32f9f13 100644
--- a/src/lib/v2/toast/Notification.svelte
+++ b/src/lib/v2/toast/Notification.svelte
@@ -34,7 +34,7 @@
}}
>
{#if data.Icon}
-
+
{/if}
{data.content}
{#if data.dismissable}
diff --git a/src/lib/v2/ui/ResCard.svelte b/src/lib/v2/ui/ResCard.svelte
index 601c923..248a536 100644
--- a/src/lib/v2/ui/ResCard.svelte
+++ b/src/lib/v2/ui/ResCard.svelte
@@ -1,9 +1,10 @@
{/if}
- {#if wakePost}
-
-
-
+ {#if wakeId}
+
{/if}
diff --git a/src/routes/dash/devices/+page.server.ts b/src/routes/dash/devices/+page.server.ts
index 4cf44c6..e61757a 100644
--- a/src/routes/dash/devices/+page.server.ts
+++ b/src/routes/dash/devices/+page.server.ts
@@ -1,5 +1,7 @@
+import { FORBIDDEN, SUCCESS } from '$lib/server/commonResponses';
import { users } from '$lib/server/db';
-import type { ServerLoad } from '@sveltejs/kit';
+import { fail, type Actions, type ServerLoad } from '@sveltejs/kit';
+import { wake } from 'wake_on_lan';
export const load: ServerLoad = async ({ locals: { guard } }) => {
const user = guard.requiresAuth().orRedirects().getUser();
@@ -7,3 +9,44 @@ export const load: ServerLoad = async ({ locals: { guard } }) => {
devices: await users.fetchDevices(user.id),
};
};
+
+export const actions = {
+ wake: async ({ locals: { guard }, request }) => {
+ guard = guard.requiresAuth();
+ if (guard.isFailed()) return FORBIDDEN;
+
+ const deviceId = (await request.formData()).get('id');
+ const device = (await users.fetchDevices(guard.getUser().id)).find((d) => d.id === deviceId);
+
+ if (!device) {
+ return fail(404, { error: 'Could not find device.' });
+ }
+
+ console.log(
+ `Sending WOL packets to ${device.name} (${device.mac}) on ${guard.getUser().name}'s request.`,
+ );
+
+ const err = await new Promise((resolve) => {
+ wake(
+ device.mac,
+ {
+ address: device.broadcast,
+ port: device.port,
+ num_packets: device.packets,
+ },
+ (err: any) => {
+ resolve(err);
+ },
+ );
+ });
+
+ if (err) {
+ console.error(err);
+ return fail(500, {
+ error: 'An error occured while trying to wake the device. Please see logs.',
+ });
+ }
+
+ return { ...SUCCESS, deviceName: device.name };
+ },
+} satisfies Actions;
diff --git a/src/routes/dash/devices/+page.svelte b/src/routes/dash/devices/+page.svelte
index 96cc5b0..cb293dd 100644
--- a/src/routes/dash/devices/+page.svelte
+++ b/src/routes/dash/devices/+page.svelte
@@ -1,11 +1,31 @@
@@ -15,7 +35,7 @@
title={device.name}
subtitle={device.mac}
editHref={data.user.admin ? `/dash/devices/${device.id}` : null}
- wakePost={`/dash/devices/${device.id}/wake`}
+ wakeId={device.id}
/>
{/each}
diff --git a/src/routes/dash/devices/[id]/+page.server.ts b/src/routes/dash/devices/[id]/+page.server.ts
index 894fd6e..0f15407 100644
--- a/src/routes/dash/devices/[id]/+page.server.ts
+++ b/src/routes/dash/devices/[id]/+page.server.ts
@@ -1,9 +1,8 @@
import { FORBIDDEN, PARSE_ERROR, SUCCESS } from '$lib/server/commonResponses';
-import { devices, users } from '$lib/server/db/index.js';
-import { fail, redirect, type Actions, type ServerLoad } from '@sveltejs/kit';
+import { devices } from '$lib/server/db/index.js';
+import { redirect, type Actions, type ServerLoad } from '@sveltejs/kit';
import { decode } from 'decode-formdata';
import validator from 'validator';
-import { wake } from 'wake_on_lan';
import { z } from 'zod';
export const load: ServerLoad = async ({ locals: { guard }, params }) => {
@@ -65,25 +64,4 @@ export const actions = {
const err = await devices.delete(params.id ?? '');
return err ? err.toFail() : SUCCESS;
},
-
- wake: async ({ params, locals: { guard } }) => {
- guard = guard.requiresAuth();
- if (guard.isFailed()) return FORBIDDEN;
-
- const device = (await users.fetchDevices(guard.getUser().id)).find((d) => d.id === params.id);
-
- if (!device) {
- return fail(404);
- }
-
- console.log('Trying to wake ' + device.name);
-
- wake(device.mac, {
- address: device.broadcast,
- port: device.port,
- num_packets: device.packets,
- });
-
- return SUCCESS;
- },
} satisfies Actions;