mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-06 07:12:46 +01:00
fix: redirect to login (#1082)
This commit is contained in:
2
Makefile
2
Makefile
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user