chahinebrini 2919ce45b8 feat(magic): sync current ReBreak Magic app state
Include recent Magic app work: Tauri native shell, iOS device detection
via supervise-magic sidecar, MDM client, local HTTP server, new pages
(detect, enroll, supervise, sideload, pair, preflight, configure, done),
and updated device section/status UI.
2026-06-18 05:23:26 +02:00

109 lines
3.3 KiB
Vue

<template>
<div class="min-h-screen flex flex-col items-center justify-center bg-gray-50 p-6">
<div class="max-w-md w-full space-y-6">
<div class="text-center">
<h1 class="text-2xl font-bold text-gray-900">Schutz aktivieren</h1>
<p class="text-gray-600 mt-2">
Aktiviere den ReBreak-DNS-Schutz auf diesem Computer.
</p>
</div>
<UCard>
<div class="space-y-4">
<div class="text-sm text-gray-600">
<p v-if="platform === 'MacOS'">
Das Schutz-Profil wird in den Systemeinstellungen geöffnet. Bestätige die Installation mit deinem Admin-Passwort.
</p>
<p v-else-if="platform === 'Windows'">
Der DoH-Schutz wird auf System-Ebene konfiguriert. Administratorrechte erforderlich.
</p>
<p v-else>
Plattform nicht erkannt.
</p>
</div>
<UButton
color="primary"
block
size="lg"
:loading="activating"
:disabled="!canActivate"
@click="activate"
>
Schutz aktivieren
</UButton>
<p v-if="result" class="text-sm text-center" :class="result.success ? 'text-green-600' : 'text-red-600'">
{{ result.success ? ' ' + result.message : ' ' + result.message }}
</p>
</div>
</UCard>
<div class="flex justify-between">
<UButton to="/status" variant="ghost" color="neutral">
Zurück
</UButton>
<UButton to="/status" variant="solid" color="primary">
Weiter
</UButton>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from "vue";
import { useTauri, type PlatformInfo } from "~/composables/useTauri";
import { useMagicSession } from "~/composables/useMagicState";
const { getPlatform, activateProtection, downloadProfile, setDesktopProtectionStatus } = useTauri();
const session = useMagicSession();
const platform = ref<string>("");
const activating = ref(false);
const canActivate = ref(false);
const result = ref<{ success: boolean; message: string } | null>(null);
onMounted(async () => {
const info: PlatformInfo = await getPlatform();
platform.value = info.platform;
canActivate.value = info.platform === "MacOS" || info.platform === "Windows";
});
async function activate() {
if (!session.value?.profileUrl) {
result.value = { success: false, message: "Kein Profil verfügbar. Bitte zuerst koppeln." };
return;
}
activating.value = true;
result.value = null;
try {
let path: string;
if (platform.value === "MacOS") {
path = await downloadProfile(session.value.profileUrl);
} else {
path = session.value.dnsToken;
}
await activateProtection(path);
try {
await setDesktopProtectionStatus(true, platform.value);
} catch (e: any) {
console.warn("Could not persist desktop protection status:", e);
}
result.value = {
success: true,
message: platform.value === "MacOS"
? "Systemeinstellungen geöffnet. Bitte Profil manuell installieren."
: "DoH-Schutz aktiviert.",
};
} catch (e: any) {
result.value = { success: false, message: e?.message ?? "Aktivierung fehlgeschlagen" };
} finally {
activating.value = false;
}
}
</script>