fix: redirect to login (#1082)

This commit is contained in:
Jonas Plum
2024-07-20 08:51:14 +02:00
committed by GitHub
parent e9583a29fa
commit 81bfbb2072
3 changed files with 63 additions and 58 deletions

View File

@@ -29,7 +29,7 @@ test:
.PHONY: test-coverage .PHONY: test-coverage
test-coverage: test-coverage:
@echo "Testing with coverage..." @echo "Testing with coverage..."
go test -coverpkg=./... -coverprofile=coverage.out ./... go test -coverpkg=./... -coverprofile=coverage.out -count 1 ./...
go tool cover -func=coverage.out go tool cover -func=coverage.out
go tool cover -html=coverage.out go tool cover -html=coverage.out

View File

@@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"net/http" "net/http"
"testing" "testing"
"time"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@@ -19,6 +20,8 @@ func TestWebhook_Run(t *testing.T) {
go http.ListenAndServe("127.0.0.1:12347", server) //nolint:gosec,errcheck go http.ListenAndServe("127.0.0.1:12347", server) //nolint:gosec,errcheck
time.Sleep(1 * time.Second)
type fields struct { type fields struct {
Headers map[string]string Headers map[string]string
URL string URL string

View File

@@ -1,5 +1,4 @@
<script setup lang="ts"> <script setup lang="ts">
import TanView from '@/components/TanView.vue'
import { Button, buttonVariants } from '@/components/ui/button' import { Button, buttonVariants } from '@/components/ui/button'
import { import {
DropdownMenu, DropdownMenu,
@@ -13,7 +12,8 @@ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip
import { CircleUser } from 'lucide-vue-next' import { CircleUser } from 'lucide-vue-next'
import { useQuery } from '@tanstack/vue-query' import type { AuthModel } from 'pocketbase'
import { onMounted, ref } from 'vue'
import { pb } from '@/lib/pocketbase' import { pb } from '@/lib/pocketbase'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
@@ -24,69 +24,71 @@ defineProps<{
const variant = 'secondary' const variant = 'secondary'
const { interface User {
isPending, name: string
isError, }
data: user,
error const user = ref<AuthModel | User>(pb.authStore.model)
} = useQuery({
queryKey: ['user'],
queryFn: () => pb.authStore.model
})
const logout = () => { const logout = () => {
pb.authStore.clear() pb.authStore.clear()
window.location.href = '/ui/login' window.location.href = '/ui/login'
} }
onMounted(() => {
pb.collection('users')
.authRefresh()
.catch(() => {
pb.authStore.clear()
window.location.href = '/ui/login'
})
})
</script> </script>
<template> <template>
<TanView :is-error="isError" :is-pending="isPending" :error="error" :value="user"> <div class="group flex flex-col gap-4 py-2 data-[collapsed=true]:py-2">
<div class="group flex flex-col gap-4 py-2 data-[collapsed=true]:py-2"> <nav
<nav v-if="user"
class="grid gap-1 px-2 group-[[data-collapsed=true]]:justify-center group-[[data-collapsed=true]]:px-2" class="grid gap-1 px-2 group-[[data-collapsed=true]]:justify-center group-[[data-collapsed=true]]:px-2"
> >
<DropdownMenu> <DropdownMenu>
<DropdownMenuTrigger as-child> <DropdownMenuTrigger as-child>
<div> <div>
<Tooltip v-if="isCollapsed" :delay-duration="0"> <Tooltip v-if="isCollapsed" :delay-duration="0">
<TooltipTrigger as-child> <TooltipTrigger as-child>
<Button <Button
:class=" :class="
cn(buttonVariants({ variant: variant, size: 'icon' }), 'mx-1 h-9 w-9 px-0') cn(buttonVariants({ variant: variant, size: 'icon' }), 'mx-1 h-9 w-9 px-0')
" "
> >
<CircleUser class="size-4" /> <CircleUser class="size-4" />
<span class="sr-only">{{ user.name }}</span> <span class="sr-only">{{ user.name }}</span>
</Button> </Button>
</TooltipTrigger> </TooltipTrigger>
<TooltipContent side="right" class="flex items-center gap-4"> <TooltipContent side="right" class="flex items-center gap-4">
{{ user.name }}
</TooltipContent>
</Tooltip>
<Button
v-else
:class="
cn(buttonVariants({ variant: variant, size: 'sm' }), 'w-full justify-start')
"
>
<CircleUser class="mr-2 size-4" />
{{ user.name }} {{ user.name }}
</Button> </TooltipContent>
</div> </Tooltip>
</DropdownMenuTrigger> <Button
<DropdownMenuContent> v-else
<DropdownMenuLabel>Account</DropdownMenuLabel> :class="cn(buttonVariants({ variant: variant, size: 'sm' }), 'w-full justify-start')"
<DropdownMenuSeparator />
<DropdownMenuItem
@click="logout"
class="cursor-pointer text-muted-foreground transition-colors hover:text-foreground"
> >
Logout <CircleUser class="mr-2 size-4" />
</DropdownMenuItem> {{ user.name }}
</DropdownMenuContent> </Button>
</DropdownMenu> </div>
</nav> </DropdownMenuTrigger>
</div> <DropdownMenuContent>
</TanView> <DropdownMenuLabel>Account</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuItem
@click="logout"
class="cursor-pointer text-muted-foreground transition-colors hover:text-foreground"
>
Logout
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</nav>
</div>
</template> </template>