forked from baron/baron-sso
샘플 adminfront, devfront 구성. ory-keto-migrate 오류 해결
This commit is contained in:
@@ -19,6 +19,8 @@ tags:
|
||||
description: 회원가입/검증
|
||||
- name: User
|
||||
description: 사용자 프로필
|
||||
- name: Session
|
||||
description: 세션 관리(계획)
|
||||
- name: Admin
|
||||
description: 관리자 기능/테넌트
|
||||
- name: Dev
|
||||
@@ -468,6 +470,68 @@ paths:
|
||||
schema:
|
||||
$ref: "#/components/schemas/MessageResponse"
|
||||
|
||||
/api/v1/sessions:
|
||||
get:
|
||||
tags: [Session]
|
||||
summary: 세션 목록
|
||||
description: 세션 관리 API는 계획 단계입니다.
|
||||
x-status: planned
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SessionListResponse"
|
||||
|
||||
/api/v1/sessions/{id}:
|
||||
get:
|
||||
tags: [Session]
|
||||
summary: 세션 상세
|
||||
description: 세션 관리 API는 계획 단계입니다.
|
||||
x-status: planned
|
||||
parameters:
|
||||
- in: path
|
||||
name: id
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SessionDetailResponse"
|
||||
delete:
|
||||
tags: [Session]
|
||||
summary: 세션 로그아웃(폐기)
|
||||
description: 세션 관리 API는 계획 단계입니다.
|
||||
x-status: planned
|
||||
parameters:
|
||||
- in: path
|
||||
name: id
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"204":
|
||||
description: No Content
|
||||
|
||||
/api/v1/sessions/logout-all:
|
||||
post:
|
||||
tags: [Session]
|
||||
summary: 모든 세션 로그아웃
|
||||
description: 세션 관리 API는 계획 단계입니다.
|
||||
x-status: planned
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/MessageResponse"
|
||||
|
||||
/api/v1/admin/check:
|
||||
get:
|
||||
tags: [Admin]
|
||||
@@ -1029,6 +1093,36 @@ components:
|
||||
code:
|
||||
type: string
|
||||
|
||||
SessionSummary:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
issuedAt:
|
||||
type: string
|
||||
expiresAt:
|
||||
type: string
|
||||
device:
|
||||
type: string
|
||||
ip:
|
||||
type: string
|
||||
userAgent:
|
||||
type: string
|
||||
|
||||
SessionListResponse:
|
||||
type: object
|
||||
properties:
|
||||
items:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/SessionSummary"
|
||||
|
||||
SessionDetailResponse:
|
||||
type: object
|
||||
properties:
|
||||
session:
|
||||
$ref: "#/components/schemas/SessionSummary"
|
||||
|
||||
TenantResponse:
|
||||
type: object
|
||||
properties:
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
func requireAdmin(c *fiber.Ctx) error {
|
||||
adminPass := os.Getenv("ADMIN_PASSWORD")
|
||||
if adminPass == "" {
|
||||
adminPass = "admin"
|
||||
}
|
||||
|
||||
reqPass := c.Get("X-Admin-Password")
|
||||
if reqPass != adminPass {
|
||||
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Invalid Admin Password"})
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -36,23 +36,6 @@ func NewAdminHandler() *AdminHandler {
|
||||
}
|
||||
}
|
||||
|
||||
// checkAuth Helper
|
||||
func (h *AdminHandler) checkAuth(c *fiber.Ctx) error {
|
||||
adminPass := os.Getenv("ADMIN_PASSWORD")
|
||||
if adminPass == "" {
|
||||
adminPass = "admin" // Default fallback
|
||||
}
|
||||
|
||||
reqPass := c.Get("X-Admin-Password")
|
||||
if reqPass != adminPass {
|
||||
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Invalid Admin Password"})
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *AdminHandler) CheckAuth(c *fiber.Ctx) error {
|
||||
if err := requireAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Status(fiber.StatusOK).JSON(fiber.Map{"status": "ok"})
|
||||
}
|
||||
|
||||
@@ -36,9 +36,6 @@ type tenantListResponse struct {
|
||||
}
|
||||
|
||||
func (h *TenantHandler) ListTenants(c *fiber.Ctx) error {
|
||||
if err := requireAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
if h.DB == nil {
|
||||
return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{"error": "database not available"})
|
||||
}
|
||||
@@ -71,9 +68,6 @@ func (h *TenantHandler) ListTenants(c *fiber.Ctx) error {
|
||||
}
|
||||
|
||||
func (h *TenantHandler) GetTenant(c *fiber.Ctx) error {
|
||||
if err := requireAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
if h.DB == nil {
|
||||
return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{"error": "database not available"})
|
||||
}
|
||||
@@ -95,9 +89,6 @@ func (h *TenantHandler) GetTenant(c *fiber.Ctx) error {
|
||||
}
|
||||
|
||||
func (h *TenantHandler) CreateTenant(c *fiber.Ctx) error {
|
||||
if err := requireAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
if h.DB == nil {
|
||||
return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{"error": "database not available"})
|
||||
}
|
||||
@@ -152,9 +143,6 @@ func (h *TenantHandler) CreateTenant(c *fiber.Ctx) error {
|
||||
}
|
||||
|
||||
func (h *TenantHandler) UpdateTenant(c *fiber.Ctx) error {
|
||||
if err := requireAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
if h.DB == nil {
|
||||
return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{"error": "database not available"})
|
||||
}
|
||||
@@ -223,9 +211,6 @@ func (h *TenantHandler) UpdateTenant(c *fiber.Ctx) error {
|
||||
}
|
||||
|
||||
func (h *TenantHandler) DeleteTenant(c *fiber.Ctx) error {
|
||||
if err := requireAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
if h.DB == nil {
|
||||
return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{"error": "database not available"})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user