148 lines
7.6 KiB
HTML
148 lines
7.6 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
|
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/djbank_title_layout}">
|
|
|
|
<body>
|
|
<section layout:fragment="title">
|
|
<div class="page-title-banner">
|
|
<img th:src="@{/img/img_title_bg.png}" class="title-image">
|
|
<h1>Webhook 관리</h1>
|
|
</div>
|
|
</section>
|
|
|
|
<th:block layout:fragment="contentFragment">
|
|
<div class="signup-guide-v2">
|
|
<div class="service-main container" style="padding-top: 70px;">
|
|
|
|
<!-- Sidebar -->
|
|
<th:block th:replace="~{fragment/djbank/service_sidebar :: sidebar('webhook')}"></th:block>
|
|
|
|
<!-- Content Area -->
|
|
<div class="app-management-content">
|
|
<div class="step1-wrap">
|
|
|
|
<!-- Title -->
|
|
<h2 class="s1-title">Webhook 수정</h2>
|
|
|
|
<!-- Progress Steps Card -->
|
|
<div class="s1-progress-card">
|
|
<div class="s1-steps">
|
|
<!-- Step 1 Active: 기본 정보 수정 (document icon) -->
|
|
<div class="s1-step s1-step--active">
|
|
<div class="s1-step-circle">
|
|
<svg class="s1-step-svg" width="26" height="26" viewBox="0 0 24 24" fill="none"
|
|
xmlns="http://www.w3.org/2000/svg">
|
|
<rect x="3" y="5" width="18" height="14" rx="2" stroke="currentColor" stroke-width="1.8" />
|
|
<line x1="7" y1="9" x2="17" y2="9" stroke="currentColor" stroke-width="1.8"
|
|
stroke-linecap="round" />
|
|
<line x1="7" y1="12" x2="14" y2="12" stroke="currentColor" stroke-width="1.8"
|
|
stroke-linecap="round" />
|
|
<line x1="7" y1="15" x2="11" y2="15" stroke="currentColor" stroke-width="1.8"
|
|
stroke-linecap="round" />
|
|
</svg>
|
|
</div>
|
|
<span class="s1-step-num">1단계</span>
|
|
<span class="s1-step-name">기본 정보 수정</span>
|
|
</div>
|
|
|
|
<div class="s1-step-line"></div>
|
|
|
|
<!-- Step 2: API 선택 (chain link icon) -->
|
|
<div class="s1-step">
|
|
<div class="s1-step-circle">
|
|
<svg class="s1-step-svg" width="26" height="26" viewBox="0 0 24 24" fill="none"
|
|
xmlns="http://www.w3.org/2000/svg">
|
|
<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" stroke="currentColor"
|
|
stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />
|
|
<path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" stroke="currentColor"
|
|
stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" />
|
|
</svg>
|
|
</div>
|
|
<span class="s1-step-num">2단계</span>
|
|
<span class="s1-step-name">API 선택</span>
|
|
</div>
|
|
|
|
<div class="s1-step-line"></div>
|
|
|
|
<!-- Step 3: 수정 완료 (rocket icon) -->
|
|
<div class="s1-step">
|
|
<div class="s1-step-circle">
|
|
<svg class="s1-step-svg" width="26" height="26" viewBox="0 0 24 24" fill="none"
|
|
xmlns="http://www.w3.org/2000/svg">
|
|
<path
|
|
d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"
|
|
stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" />
|
|
<path
|
|
d="M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"
|
|
stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" />
|
|
<path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0" stroke="currentColor" stroke-width="1.6"
|
|
stroke-linecap="round" stroke-linejoin="round" />
|
|
<path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5" stroke="currentColor" stroke-width="1.6"
|
|
stroke-linecap="round" stroke-linejoin="round" />
|
|
</svg>
|
|
</div>
|
|
<span class="s1-step-num">3단계</span>
|
|
<span class="s1-step-name">수정 완료</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Error -->
|
|
<div th:if="${error}" class="s1-alert">
|
|
<span th:text="${error}"></span>
|
|
</div>
|
|
|
|
<!-- Form Card -->
|
|
<div class="s1-form-card">
|
|
<form id="webhookStep1Form" method="post" th:action="@{/webhook/modify/step1}"
|
|
th:object="${webhookModification}">
|
|
|
|
<!-- Webhook 수신 URL -->
|
|
<div class="s1-field">
|
|
<label class="s1-label">Webhook 수신 URL <span class="s1-required">*</span></label>
|
|
<input type="text" id="targetUrl" th:field="*{targetUrl}" class="s1-input"
|
|
placeholder="https://example.com/webhook" autocomplete="off" maxlength="255">
|
|
<p class="field-error" th:if="${#fields.hasErrors('targetUrl')}" th:errors="*{targetUrl}">URL 오류</p>
|
|
<p class="field-help-red">이벤트 발생 시 이 URL로 서명된 POST 요청이 전송됩니다.</p>
|
|
</div>
|
|
|
|
<!-- 사용자 지정 Secret -->
|
|
<div class="s1-field">
|
|
<label class="s1-label">사용자 지정 Secret (선택)</label>
|
|
<input type="text" id="userSecret" th:field="*{userSecret}" class="s1-input"
|
|
placeholder="발송 요청 헤더에 그대로 포함될 값" autocomplete="off" maxlength="500">
|
|
<p class="field-error" th:if="${#fields.hasErrors('userSecret')}" th:errors="*{userSecret}">오류</p>
|
|
<p class="field-help-red" th:if="${userSecretSet}">현재 값이 설정되어 있습니다. 공란으로 두면 기존 값이 유지되고, 값을 입력하면 교체됩니다.</p>
|
|
<p class="field-help" th:unless="${userSecretSet}">입력한 값은 Webhook 발송 시 요청 헤더에 그대로 포함되어 전달됩니다. 수신측 값 검증 용도로 사용하세요.</p>
|
|
</div>
|
|
|
|
<!-- 알림 이벤트 -->
|
|
<div class="s1-field">
|
|
<label class="s1-label">알림 받을 이벤트 <span class="s1-required">*</span></label>
|
|
<div class="webhook-eventtype-list">
|
|
<label class="eventtype-item" th:each="et : ${eventTypes}">
|
|
<input type="checkbox" name="eventTypes" th:value="${et.code}"
|
|
th:checked="${#lists.contains(webhookModification.eventTypes, et.code)}">
|
|
<span class="eventtype-name" th:text="${et.name}">이벤트명</span>
|
|
</label>
|
|
</div>
|
|
<p class="field-error" th:if="${#fields.hasErrors('eventTypes')}" th:errors="*{eventTypes}">이벤트 오류</p>
|
|
</div>
|
|
|
|
</form>
|
|
</div>
|
|
|
|
<!-- 액션 -->
|
|
<div class="s1-actions s1-actions--figma-step">
|
|
<a class="btn-webhook-cancel-red" th:href="@{/webhook/modify/cancel}">취소</a>
|
|
<button type="submit" form="webhookStep1Form" class="s1-btn-next-figma">다음</button>
|
|
</div>
|
|
|
|
</div><!-- /step1-wrap -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</th:block>
|
|
</body>
|
|
|
|
</html> |