-
- {{ invitationUrls[invitationIdx] }}
-
-
+
{{ invitation.inviteUrl }}
@@ -415,20 +409,11 @@ useHead({
title: "Simple authentication",
});
-const data = await $dropFetch>>(
- "/api/v1/admin/auth/invitation",
-);
+const data = await $dropFetch<
+ Array>
+>("/api/v1/admin/auth/invitation");
const invitations = ref(data ?? []);
-const generateInvitationUrl = (id: string) =>
- `${window.location.protocol}//${window.location.host}/auth/register?id=${id}`;
-const invitationUrls = ref>();
-onMounted(() => {
- invitationUrls.value = invitations.value.map((invitation) =>
- generateInvitationUrl(invitation.id),
- );
-});
-
// Makes username undefined if it's empty
const _username = ref(undefined);
const username = computed({
@@ -515,7 +500,6 @@ function invite_wrapper() {
invite()
.then((invitation) => {
invitations.value.push(invitation);
- invitationUrls.value?.push(generateInvitationUrl(invitation.id));
})
.catch((response) => {
const message = response.statusMessage || t("errors.unknown");
@@ -536,7 +520,6 @@ async function deleteInvitation(id: string) {
const index = invitations.value.findIndex((e) => e.id === id);
invitations.value.splice(index, 1);
- invitationUrls.value?.splice(index, 1);
}
const createModalOpen = ref(false);
diff --git a/server/api/v1/admin/auth/invitation/index.get.ts b/server/api/v1/admin/auth/invitation/index.get.ts
index 469eaff..0724e49 100644
--- a/server/api/v1/admin/auth/invitation/index.get.ts
+++ b/server/api/v1/admin/auth/invitation/index.get.ts
@@ -1,4 +1,5 @@
import aclManager from "~/server/internal/acls";
+import { systemConfig } from "~/server/internal/config/sys-conf";
import prisma from "~/server/internal/db/database";
import taskHandler from "~/server/internal/tasks";
@@ -10,6 +11,13 @@ export default defineEventHandler(async (h3) => {
await taskHandler.runTaskGroupByName("cleanup:invitations");
+ const externalUrl = systemConfig.getExternalUrl();
const invitations = await prisma.invitation.findMany({});
- return invitations;
+
+ return invitations.map((invitation) => {
+ return {
+ ...invitation,
+ inviteUrl: `${externalUrl}/auth/register?id=${invitation.id}`,
+ };
+ });
});
diff --git a/server/api/v1/admin/auth/invitation/index.post.ts b/server/api/v1/admin/auth/invitation/index.post.ts
index 9c0ea51..50696c2 100644
--- a/server/api/v1/admin/auth/invitation/index.post.ts
+++ b/server/api/v1/admin/auth/invitation/index.post.ts
@@ -2,6 +2,7 @@ import { readDropValidatedBody, throwingArktype } from "~/server/arktype";
import aclManager from "~/server/internal/acls";
import prisma from "~/server/internal/db/database";
import { SharedRegisterValidator } from "../../../auth/signup/simple.post";
+import { systemConfig } from "~/server/internal/config/sys-conf";
const CreateInvite = SharedRegisterValidator.partial()
.and({
@@ -22,5 +23,8 @@ export default defineEventHandler(async (h3) => {
data: body,
});
- return invitation;
+ return {
+ ...invitation,
+ inviteUrl: `${systemConfig.getExternalUrl()}/auth/register?id=${invitation.id}`,
+ };
});
diff --git a/server/internal/config/sys-conf.ts b/server/internal/config/sys-conf.ts
index 8c8e637..70e0904 100644
--- a/server/internal/config/sys-conf.ts
+++ b/server/internal/config/sys-conf.ts
@@ -1,8 +1,13 @@
+import normalizeUrl from "normalize-url";
+
class SystemConfig {
private libraryFolder = process.env.LIBRARY ?? "./.data/library";
private dataFolder = process.env.DATA ?? "./.data/data";
- private externalUrl = process.env.EXTERNAL_URL ?? "http://localhost:3000";
+ private externalUrl = normalizeUrl(
+ process.env.EXTERNAL_URL ?? "http://localhost:3000",
+ { stripWWW: false },
+ );
private dropVersion;
private gitRef;
diff --git a/yarn.lock b/yarn.lock
index 6f4bdb9..120b1e8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6523,6 +6523,11 @@ normalize-range@^0.1.2:
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+normalize-url@^8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.2.tgz#3b343a42f837e4dae2b01917c04e8de3782e9170"
+ integrity sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==
+
npm-run-path@^5.1.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f"