Appearance improvements, update of endpoints, and implementation of .well-known for checking API URL #3
2 changed files with 29 additions and 13 deletions
|
@ -48,24 +48,30 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { FetchError } from 'ofetch';
|
import { FetchError } from 'ofetch';
|
||||||
|
|
||||||
const redirectTo = useRoute().query.redirect_to;
|
|
||||||
|
|
||||||
const apiVersion = useRuntimeConfig().public.apiVersion;
|
const apiVersion = useRuntimeConfig().public.apiVersion;
|
||||||
const instanceUrl = ref<string | null | undefined>(null);
|
const instanceUrl = ref<string | null | undefined>(null);
|
||||||
const instanceUrlInput = ref<string>();
|
const instanceUrlInput = ref<string>();
|
||||||
const instanceError = ref<string>();
|
const instanceError = ref<string>();
|
||||||
|
const requestUrl = useRequestURL();
|
||||||
|
const apiBase = useCookie("api_base");
|
||||||
|
|
||||||
const auth = useAuth();
|
const auth = useAuth();
|
||||||
|
|
||||||
if (auth.accessToken.value) {
|
const { status, data: gorbTxt } = await useFetch(`${requestUrl.protocol}//${requestUrl.host}/.well-known/gorb.txt`, { responseType: "text" });
|
||||||
//navigateTo(redirectTo ? redirectTo as string : useAppConfig().baseURL as string);
|
if (status.value == "success" && gorbTxt.value) {
|
||||||
|
console.log("got gorb.txt:", gorbTxt.value);
|
||||||
|
const parsed = parseWellKnown(gorbTxt.value as string);
|
||||||
|
if (parsed.ApiBaseUrl) {
|
||||||
|
apiBase.value = parsed.ApiBaseUrl;
|
||||||
|
console.log("set apiBase to:", parsed.ApiBaseUrl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(async () => {
|
||||||
const cookie = useCookie("instance_url").value;
|
const cookie = useCookie("instance_url").value;
|
||||||
instanceUrl.value = cookie;
|
instanceUrl.value = cookie;
|
||||||
console.log(cookie);
|
console.log(cookie);
|
||||||
console.log("set instance url to:", instanceUrl.value);
|
console.log("set instance url to:", instanceUrl.value);
|
||||||
});
|
});
|
||||||
|
|
||||||
async function selectInstance(e: Event) {
|
async function selectInstance(e: Event) {
|
||||||
|
@ -74,14 +80,13 @@ async function selectInstance(e: Event) {
|
||||||
const instanceUrlObj = new URL(`api/v${apiVersion}/stats`, instanceUrlInput.value.endsWith("/") ? instanceUrlInput.value : instanceUrlInput.value + "/");
|
const instanceUrlObj = new URL(`api/v${apiVersion}/stats`, instanceUrlInput.value.endsWith("/") ? instanceUrlInput.value : instanceUrlInput.value + "/");
|
||||||
try {
|
try {
|
||||||
const res = await $fetch.raw(instanceUrlObj.href);
|
const res = await $fetch.raw(instanceUrlObj.href);
|
||||||
console.log("instance res:", res);
|
|
||||||
instanceError.value = "";
|
instanceError.value = "";
|
||||||
|
|
||||||
const origin = new URL(res.url).origin;
|
const origin = new URL(res.url).origin;
|
||||||
localStorage.setItem("instanceUrl", origin);
|
|
||||||
instanceUrl.value = origin;
|
instanceUrl.value = origin;
|
||||||
useCookie("instance_url").value = origin;
|
useCookie("instance_url").value = origin;
|
||||||
useCookie("api_base").value = origin + `/api/v${apiVersion}`;
|
|
||||||
localStorage.setItem("apiBase", origin + `/api/v${apiVersion}`);
|
if (!apiBase.value) apiBase.value = origin + `/api/v${apiVersion}`;
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
if (error instanceof FetchError) {
|
if (error instanceof FetchError) {
|
||||||
console.log("Status code:", error.response?.status);
|
console.log("Status code:", error.response?.status);
|
||||||
|
|
11
utils/parseWellKnown.ts
Normal file
11
utils/parseWellKnown.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
export default (wellKnownText: string): Record<string, string> => {
|
||||||
|
const lines = wellKnownText.trim().replaceAll(" ", "").split("\n");
|
||||||
|
const settings: Record<string, string> = {};
|
||||||
|
for (const line of lines) {
|
||||||
|
const separatorIndex = line.search(":");
|
||||||
|
const key = line.slice(0, separatorIndex);
|
||||||
|
const value = line.slice(separatorIndex + 1, line.length);
|
||||||
|
settings[key] = value;
|
||||||
|
}
|
||||||
|
return settings;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue