<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Trust Movie Ledger UI</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"><style>.fade-enter{opacity:0;transition:opacity .5s}.fade-enter-active{opacity:1}.response-success{background-color:#d4edda;border:1px solid #c3e6cb;color:#155724;padding:10px;border-radius:4px;margin-top:10px}.response-error{background-color:#f8d7da;border:1px solid #f5c6cb;color:#721c24;padding:10px;border-radius:4px;margin-top:10px}.response-warning{background-color:#fff3cd;border:1px solid #ffeeba;color:#856404;padding:10px;border-radius:4px;margin-top:10px}</style></head><body><div class="container py-4"><h1 class="mb-4">Trust Movie Ledger UI</h1><div class="card mb-4"><div class="card-header">API Key Settings</div><div class="card-body"><div class="mb-3"><label for="apiKeyInput" class="form-label">Set API Key (Bearer)</label><input type="text" class="form-control" id="apiKeyInput" placeholder="Enter API Key"></div><button id="setApiKeyBtn" class="btn btn-primary">Set API Key</button><button id="clearApiKeyBtn" class="btn btn-secondary">Clear API Key</button><p class="mt-2">Current API Key: <span id="currentApiKey">None</span></p></div></div><ul class="nav nav-tabs" id="ledgerTab" role="tablist"><li class="nav-item" role="presentation"><button class="nav-link active" id="verify-tab" data-bs-toggle="tab" data-bs-target="#verify" type="button" role="tab">GET /verify</button></li><li class="nav-item" role="presentation"><button class="nav-link" id="verifyFile-tab" data-bs-toggle="tab" data-bs-target="#verifyFile" type="button" role="tab">POST /verify/file</button></li><li class="nav-item" role="presentation"><button class="nav-link" id="ledger-tab" data-bs-toggle="tab" data-bs-target="#ledger" type="button" role="tab">POST /ledger</button></li><li class="nav-item" role="presentation"><button class="nav-link" id="ledgerFile-tab" data-bs-toggle="tab" data-bs-target="#ledgerFile" type="button" role="tab">POST /ledger/file</button></li></ul><div class="tab-content mt-3" id="ledgerTabContent"><div class="tab-pane fade show active" id="verify" role="tabpanel"><h3>GET /verify</h3><form id="verifyForm"><div class="mb-3"><label for="fileHashInput" class="form-label">File Hash</label><input type="text" class="form-control" id="fileHashInput" placeholder="Enter file hash"></div><button type="submit" class="btn btn-primary">Verify Ledger</button></form><div id="verifyResponse"></div></div><div class="tab-pane fade" id="verifyFile" role="tabpanel"><h3>POST /verify/file</h3><form id="verifyFileForm" enctype="multipart/form-data"><div class="mb-3"><label for="verifyFileInput" class="form-label">Select File</label><input type="file" class="form-control" id="verifyFileInput"></div><button type="submit" class="btn btn-primary">Verify File Ledger</button></form><div id="verifyFileResponse"></div></div><div class="tab-pane fade" id="ledger" role="tabpanel"><h3>POST /ledger</h3><form id="ledgerForm"><div class="mb-3"><label for="ledgerFileHashInput" class="form-label">File Hash</label><input type="text" class="form-control" id="ledgerFileHashInput" placeholder="Enter file hash"></div><div class="mb-3"><label for="ledgerAttributesInput" class="form-label">Attributes (JSON)</label><textarea class="form-control" id="ledgerAttributesInput" rows="3" placeholder='{"property1": "value1", "property2": 123}'></textarea></div><button type="submit" class="btn btn-primary">Register Ledger</button></form><div id="ledgerResponse"></div></div><div class="tab-pane fade" id="ledgerFile" role="tabpanel"><h3>POST /ledger/file</h3><form id="ledgerFileForm" enctype="multipart/form-data"><div class="mb-3"><label for="ledgerFileInput" class="form-label">Select File</label><input type="file" class="form-control" id="ledgerFileInput"></div><div class="mb-3"><label for="ledgerFileAttributesInput" class="form-label">Attributes (JSON)</label><textarea class="form-control" id="ledgerFileAttributesInput" rows="3" placeholder='{"property1": "value1", "property2": 123}'></textarea></div><button type="submit" class="btn btn-primary">Register File Ledger</button></form><div id="ledgerFileResponse"></div></div></div></div><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script><script>const _0x1="https://api.trust-movie.com";let _0x2=null;document.getElementById("setApiKeyBtn").addEventListener("click",()=>{const _0x3=document.getElementById("apiKeyInput").value.trim();if(_0x3){_0x2=_0x3;document.getElementById("currentApiKey").innerText=_0x2}});document.getElementById("clearApiKeyBtn").addEventListener("click",()=>{_0x2=null;document.getElementById("apiKeyInput").value="";document.getElementById("currentApiKey").innerText="None"});function _0x4(_0x5,_0x6,_0x7){const _0x8=document.getElementById(_0x5);let _0x9="response-success";if(_0x7>=400&&_0x7<500){_0x9="response-error"}else if(_0x7===423){_0x9="response-warning"};_0x8.innerHTML='<div class="'+_0x9+'"><pre>'+JSON.stringify(_0x6,null,2)+'</pre><p>Status Code: '+_0x7+"</p></div>"}async function _0xA(_0xB){const _0xC=_0xB.headers.get("Content-Type")||"";return _0xC.includes("application/json")?await _0xB.json():await _0xB.text()}document.getElementById("verifyForm").addEventListener("submit",async(_0xI)=>{_0xI.preventDefault();const _0xD=document.getElementById("fileHashInput").value.trim();try{const _0xB=await fetch(_0x1+"/verify?fileHash="+encodeURIComponent(_0xD)),_0xJ=await _0xA(_0xB);_0x4("verifyResponse",_0xJ,_0xB.status)}catch(_0xK){_0x4("verifyResponse",{error:_0xK.toString()},500)}});document.getElementById("verifyFileForm").addEventListener("submit",async(_0xI)=>{_0xI.preventDefault();const _0xE=document.getElementById("verifyFileInput");if(_0xE.files.length===0){alert("Please select a file.");return}const _0xF=new FormData();_0xF.append("file",_0xE.files[0]);try{const _0xB=await fetch(_0x1+"/verify/file",{method:"POST",headers:_0x2?{"Authorization":"Bearer "+_0x2}: {},body:_0xF}),_0xJ=await _0xA(_0xB);_0x4("verifyFileResponse",_0xJ,_0xB.status)}catch(_0xK){_0x4("verifyFileResponse",{error:_0xK.toString()},500)}});document.getElementById("ledgerForm").addEventListener("submit",async(_0xI)=>{_0xI.preventDefault();const _0xD=document.getElementById("ledgerFileHashInput").value.trim();let _0xG;try{_0xG=JSON.parse(document.getElementById("ledgerAttributesInput").value.trim()||"{}")}catch(_0xK){alert("Invalid JSON in attributes.");return}try{const _0xB=await fetch(_0x1+"/ledger",{method:"POST",headers:{"Content-Type":"application/json",...(_0x2?{"Authorization":"Bearer "+_0x2}:{})},body:JSON.stringify({fileHash:_0xD,attributes:_0xG})}),_0xJ=await _0xA(_0xB);_0x4("ledgerResponse",_0xJ,_0xB.status)}catch(_0xK){_0x4("ledgerResponse",{error:_0xK.toString()},500)}});document.getElementById("ledgerFileForm").addEventListener("submit",async(_0xI)=>{_0xI.preventDefault();const _0xE=document.getElementById("ledgerFileInput");if(_0xE.files.length===0){alert("Please select a file.");return}const _0xH=document.getElementById("ledgerFileAttributesInput").value.trim();let _0xG={};if(_0xH){try{_0xG=JSON.parse(_0xH)}catch(_0xK){alert("Invalid JSON in attributes.");return}}const _0xF=new FormData();_0xF.append("file",_0xE.files[0]);_0xF.append("attributes",JSON.stringify(_0xG));try{const _0xB=await fetch(_0x1+"/ledger/file",{method:"POST",headers:_0x2?{"Authorization":"Bearer "+_0x2}: {},body:_0xF}),_0xJ=await _0xA(_0xB);_0x4("ledgerFileResponse",_0xJ,_0xB.status)}catch(_0xK){_0x4("ledgerFileResponse",{error:_0xK.toString()},500)}});</script></body></html>
