global update and global fix

This commit is contained in:
lendry
2026-06-25 23:48:57 +03:00
parent 3880c68d59
commit b0ea87e898
121 changed files with 13759 additions and 663 deletions

View File

@@ -1,7 +1,7 @@
'use client';
import Link from 'next/link';
import { Boxes, Settings2, ShieldCheck, Users } from 'lucide-react';
import { Bot, Boxes, Settings2, ShieldCheck, Users } from 'lucide-react';
import { cn } from '@/lib/utils';
import { PublicUser } from '@/lib/api';
@@ -12,6 +12,12 @@ const links = [
icon: Users,
permissions: ['canViewUsers', 'canManageUsers'] as const
},
{
href: '/admin/bots',
label: 'Боты',
icon: Bot,
permissions: ['canManageBots'] as const
},
{
href: '/admin/oauth',
label: 'OAuth',

View File

@@ -100,10 +100,10 @@ export function OAuthClientDetailDialog({
Быстрый старт
</div>
<ol className="list-decimal space-y-1 pl-5 text-xs text-[#667085]">
<li>Авторизуйте пользователя в IdP и получите userId.</li>
<li>Перенаправьте на authorization endpoint с clientId, redirectUri, scope, userId.</li>
<li>На backend обменяйте code через POST /oauth/token с client_secret.</li>
<li>Запросите профиль через GET /oauth/userinfo с access token.</li>
<li>Укажите issuer = PUBLIC_API_URL в OIDC-клиенте (PHP, Keycloak, Grafana и т.д.).</li>
<li>Перенаправьте пользователя на authorization endpoint стандартные параметры client_id, redirect_uri, response_type=code.</li>
<li>IdP покажет вход и экран «Разрешить доступ», затем вернёт code на redirect_uri.</li>
<li>На backend обменяйте code через POST /oauth/token (form-urlencoded или JSON).</li>
</ol>
<a
href={endpoints.openIdConfigurationUrl}

View File

@@ -3,12 +3,14 @@
import { Sidebar } from './sidebar';
import { UserMenu } from './user-menu';
import { NotificationBell } from '@/components/notifications/notification-bell';
import { EmojiSpriteProvider } from '@/components/chat/emoji-sprite-provider';
import { FamilyOverlayProvider } from '@/components/family/family-overlay-provider';
import { MiniFamilyChat } from '@/components/family/mini-family-chat';
export function IdShell({ active, children, wide = false }: { active: string; children: React.ReactNode; wide?: boolean }) {
return (
<FamilyOverlayProvider>
<EmojiSpriteProvider />
<div className="min-h-screen bg-white">
<Sidebar active={active} />
<div className="fixed right-4 top-4 z-40 flex items-center gap-2 lg:right-8 lg:top-6">