zioinfo-mail/itsm/static/login.html
DESKTOP-TKLFCPR\ython e228faabf5 feat(itsm): G-1~G-12 확장 기능 + 하네스/봇/설치스크립트 구현
G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현
G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건)
G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST)
G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직
G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트
G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트
G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API
G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트
G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트
G-10: core/push_notify.py + routers/push.py + PushSubscription 모델
G-11: approvals 다중승인 (위임/서명/기한초과/마감연장)
G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh

하네스: guardia-orchestrator 확장기능 Phase 반영
봇명령어: /sr /status /license /bulk 슬래시 명령어 추가
설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 18:18:52 +09:00

88 lines
3.0 KiB
HTML

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GUARDiA ITSM — 로그인</title>
<link rel="stylesheet" href="/static/login.css">
</head>
<body>
<div id="login-bg">
<div id="login-wrap">
<!-- 카드 -->
<div id="login-card">
<!-- 로고 -->
<div id="login-logo">
<div class="logo-shield">
<span>G</span>
</div>
<div class="logo-text">
<div class="logo-title">GUARDiA ITSM</div>
<div class="logo-sub">인프라 자동화 플랫폼</div>
</div>
</div>
<!---->
<form id="login-form" autocomplete="off">
<div class="field-group">
<label for="username">아이디</label>
<input type="text" id="username" name="username"
placeholder="아이디를 입력하세요" autocomplete="username" required>
</div>
<div class="field-group">
<label for="password">비밀번호</label>
<div class="pw-wrap">
<input type="password" id="password" name="password"
placeholder="비밀번호를 입력하세요" autocomplete="current-password" required>
<button type="button" class="pw-toggle" id="pw-toggle" tabindex="-1">👁</button>
</div>
</div>
<div id="login-error" class="error-msg" style="display:none"></div>
<button type="submit" id="login-btn" class="btn-login">
<span id="btn-text">로그인</span>
<span id="btn-spinner" class="spinner" style="display:none"></span>
</button>
</form>
<!-- 힌트 -->
<div class="login-hint">
초기 비밀번호 <code>1111</code> — 최초 로그인 시 변경 필요
</div>
<!-- 테스트 계정 표 -->
<div class="account-table">
<div class="account-title">테스트 계정</div>
<div class="account-row">
<span class="acc-role admin">관리자</span>
<code class="acc-info clickable" onclick="fillLogin('admin','1111')">admin / 1111</code>
</div>
<div class="account-row">
<span class="acc-role engineer">엔지니어</span>
<code class="acc-info clickable" onclick="fillLogin('engineer1','1111')">engineer1 / 1111</code>
</div>
<div class="account-row">
<span class="acc-role pm">PM</span>
<code class="acc-info clickable" onclick="fillLogin('pm1','1111')">pm1 / 1111</code>
</div>
<div class="account-row">
<span class="acc-role customer">고객</span>
<code class="acc-info clickable" onclick="fillLogin('customer1','1111')">customer1 / 1111</code>
</div>
<div class="account-note">↑ 클릭하면 자동 입력됩니다</div>
</div>
</div><!-- /login-card -->
<div id="login-footer">© 2026 GUARDiA — 폐쇄망 인프라 자동화 플랫폼 | on-premise sLLM</div>
</div>
</div>
<script src="/static/login.js"></script>
</body>
</html>