* feat: add Google OAuth login support (#2625) * 🔧 Add login via google * 🔧 Update code style and docs * Add fix for db migrate * 🔧 Update docker-compose * 🔧 Fix sqlite" * 🔧 Update docker-compose * ⚰️ Remove environments * 🔧 Fix: remove ensureGoogleIdColumn workaround from sqlite.ts * 🔧 Remove space * move oauth section * add openid client * wip make oauth more generic * properly allow multiple providers * fix type import * github login flow * adjust github logo with theme * move docs to own page * nullable password, prevent timing attack this prevents timing attacks by always checking hash even if there is none prevents using basic auth if 2fa is enabled * support generic oidc * add ability to set password for oidc users this allows oidc users to add password login cant be removed after * move password login route move password login route from /api/session to /api/auth/password align with oauth * unique index on oauth * link/unlink logic * improve docs * support allowed domains * support auto register * refactoring * disable pw auth * move 2fa to its own page * 2fa for oauth, rework 2fa system * fix design, fix link Closes #2650 * add auto launch * improve docs * improvements --------- Co-authored-by: Daniel Molenda <dm@fotc.com>
47 lines
1.4 KiB
Vue
47 lines
1.4 KiB
Vue
<template>
|
|
<SelectRoot v-model="langProxy" :default-value="locale">
|
|
<SelectTrigger
|
|
class="group inline-flex h-8 items-center justify-around gap-2 rounded bg-gray-200 px-3 text-sm leading-none dark:bg-neutral-700 dark:text-neutral-400"
|
|
aria-label="Select language"
|
|
>
|
|
<IconsLanguage class="size-3" />
|
|
<SelectValue />
|
|
<IconsArrowDown
|
|
class="size-3 transition-transform group-data-[state=open]:rotate-180"
|
|
/>
|
|
</SelectTrigger>
|
|
|
|
<SelectPortal>
|
|
<SelectContent
|
|
class="min-w-28 rounded bg-gray-300 dark:bg-neutral-500"
|
|
position="popper"
|
|
>
|
|
<SelectViewport class="p-2">
|
|
<SelectItem
|
|
v-for="(option, index) in langs"
|
|
:key="index"
|
|
:value="option.code"
|
|
class="relative flex h-6 items-center rounded px-3 text-sm leading-none outline-none hover:bg-red-800 hover:text-white data-[state=checked]:underline dark:text-white"
|
|
>
|
|
<SelectItemText>
|
|
{{ option.name }}
|
|
</SelectItemText>
|
|
</SelectItem>
|
|
</SelectViewport>
|
|
</SelectContent>
|
|
</SelectPortal>
|
|
</SelectRoot>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
const { locales, locale, setLocale } = useI18n();
|
|
|
|
const langProxy = ref(locale);
|
|
|
|
watchEffect(() => {
|
|
setLocale(langProxy.value);
|
|
});
|
|
|
|
const langs = locales.value.sort((a, b) => a.code.localeCompare(b.code));
|
|
</script>
|