synapse-admin-api

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 6a13bf8c1d9eb779a97e9d1a045dde7e114877ac
parent ec076979bed63f8973dd3495b0822e28a0b55d19
Author: minerva-jupiter <ryouturn@gmail.com>
Date:   Mon, 15 Dec 2025 17:12:24 +0900

delete credentials

Diffstat:
Mindex.html | 488+++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 243 insertions(+), 245 deletions(-)

diff --git a/index.html b/index.html @@ -1,245 +1,243 @@ -<!doctype html> -<html lang="en"> - <head> - <meta charset="UTF-8" /> - <title>Synapse Admin API Tester</title> - </head> - <body class="container"> - <h1>Synapse Admin API</h1> - - <form id="apiForm"> - <article> - <label for="accessToken">Admin Access Token:</label> - <input id="accessToken" type="password" required /> - </article> - <article> - <label for="synapseDomain">Synapse Domain:</label> - <select id="synapseDomain" required> - <option value="https://docker-synapse.minervajuppiter.net"> - https://docker-synapse.minervajuppiter.net/ - </option> - </select> - </article> - <article> - <label for="apiTemplate">API Template:</label> - <select id="apiTemplate" onchange="updateApiTemplate()"> - <option value="" selected disabled> - Select an API Template - </option> - <option value="listTokens">List Registration Tokens</option> - <option value="getToken">Get Registration Token</option> - <option value="createToken"> - Create Registration Token - </option> - <option value="deleteToken"> - Delete Registration Token - </option> - </select> - </article> - <article> - <label for="method">Method:</label> - <select id="method"> - <option value="GET">GET</option> - <option value="POST">POST</option> - <option value="PUT">PUT</option> - <option value="DELETE">DELETE</option> - </select> - </article> - <article> - <label for="endpoint">Endpoint:</label> - <input - id="endpoint" - type="text" - value="/_synapse/admin/v2/users" - required - placeholder="/_synapse/admin/v2/users/..." - style="width: 80%" - /> - </article> - <article id="payloadContainer" style="display: none"> - <label for="payload">JSON Payload:</label> - <textarea - id="payload" - rows="10" - placeholder='{"displayname": "New User Name"}' - ></textarea> - </article> - <article> - <button type="submit">Execute API Call</button> - </article> - </form> - - <hr /> - - <div id="response-container"> - <h2>API Response</h2> - <p>Status: <span id="response-status">---</span></p> - <p id="error-message" style="color: red; font-weight: bold"></p> - <h3>Body:</h3> - <pre id="response-body">Waiting for response...</pre> - </div> - - <script> - document.addEventListener("DOMContentLoaded", () => { - const form = document.getElementById("apiForm"); - const methodSelect = document.getElementById("method"); - const payloadContainer = - document.getElementById("payloadContainer"); - const responseStatus = - document.getElementById("response-status"); - const responseBody = document.getElementById("response-body"); - const errorMessage = document.getElementById("error-message"); - - const updatePayloadVisibility = () => { - const method = methodSelect.value; - if (method === "POST" || method === "PUT") { - payloadContainer.style.display = "block"; - } else { - payloadContainer.style.display = "none"; - } - }; - methodSelect.addEventListener( - "change", - updatePayloadVisibility, - ); - updatePayloadVisibility(); - - window.updateApiTemplate = () => { - const apiTemplate = - document.getElementById("apiTemplate").value; - const methodField = document.getElementById("method"); - const endpointField = document.getElementById("endpoint"); - const payloadField = document.getElementById("payload"); - const payloadContainer = - document.getElementById("payloadContainer"); - - switch (apiTemplate) { - case "listTokens": - methodField.value = "GET"; - endpointField.value = - "/_synapse/admin/v1/registration_tokens"; - payloadField.value = ""; - payloadContainer.style.display = "none"; - break; - case "getToken": - methodField.value = "GET"; - endpointField.value = - "/_synapse/admin/v1/registration_tokens/{token}"; - payloadField.value = ""; - payloadContainer.style.display = "none"; - break; - case "createToken": - methodField.value = "POST"; - endpointField.value = - "/_synapse/admin/v1/registration_tokens/new"; - payloadField.value = JSON.stringify( - { - uses_allowed: 1, - expiry_time: Date.now() + 86400000, - }, - null, - 2, - ); - payloadContainer.style.display = "block"; - break; - case "deleteToken": - methodField.value = "DELETE"; - endpointField.value = - "/_synapse/admin/v1/registration_tokens/{token}"; - payloadField.value = ""; - payloadContainer.style.display = "none"; - break; - default: - methodField.value = "GET"; - endpointField.value = ""; - payloadField.value = ""; - payloadContainer.style.display = "none"; - } - }; - - form.addEventListener("submit", async (event) => { - event.preventDefault(); - - responseStatus.textContent = "Executing..."; - responseBody.textContent = "Processing..."; - errorMessage.textContent = ""; - - const accessToken = - document.getElementById("accessToken").value; - const synapseDomain = document - .getElementById("synapseDomain") - .value.replace(/\/+$/, ""); - const method = methodSelect.value; - const endpoint = document - .getElementById("endpoint") - .value.trim(); - let payload = document.getElementById("payload").value; - - const fullUrl = `${synapseDomain}${endpoint.startsWith("/") ? "" : "/"}${endpoint}`; - - const headers = { - Authorization: `Bearer ${accessToken}`, - "Content-Type": "application/json", - }; - - const config = { - method: method, - headers: headers, - credentials: "include", - }; - - // Process payload for POST/PUT methods - if (method === "POST" || method === "PUT") { - if (payload) { - try { - config.body = JSON.stringify( - JSON.parse(payload), - ); - } catch (e) { - errorMessage.textContent = - "Error: Invalid JSON payload"; - responseStatus.textContent = "Failed"; - responseBody.textContent = - "Invalid JSON payload format."; - return; - } - } - } - - try { - const apiResponse = await fetch(fullUrl, config); - - let responseText = await apiResponse.text(); - let responseJson; - - try { - responseJson = JSON.parse(responseText); - - responseBody.textContent = JSON.stringify( - responseJson, - null, - 2, - ); - } catch (e) { - responseBody.textContent = - responseText || "(No response body)"; - } - - responseStatus.textContent = `${apiResponse.status} ${apiResponse.statusText}`; - if (!apiResponse.ok) { - responseStatus.style.color = "red"; - } else { - responseStatus.style.color = "green"; - } - } catch (e) { - errorMessage.textContent = `Fetch Error: ${e.message}`; - responseStatus.textContent = "Network Error"; - responseStatus.style.color = "red"; - responseBody.textContent = - "A network error occurred during the API call."; - } - }); - }); - </script> - </body> -</html> +<!doctype html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <title>Synapse Admin API Tester</title> + </head> + <body class="container"> + <h1>Synapse Admin API</h1> + + <form id="apiForm"> + <article> + <label for="accessToken">Admin Access Token:</label> + <input id="accessToken" type="password" required /> + </article> + <article> + <label for="synapseDomain">Synapse Domain:</label> + <select id="synapseDomain" required> + <option value="https://docker-synapse.minervajuppiter.net"> + https://docker-synapse.minervajuppiter.net/ + </option> + </select> + </article> + <article> + <label for="apiTemplate">API Template:</label> + <select id="apiTemplate" onchange="updateApiTemplate()"> + <option value="" selected disabled> + Select an API Template + </option> + <option value="listTokens">List Registration Tokens</option> + <option value="getToken">Get Registration Token</option> + <option value="createToken"> + Create Registration Token + </option> + <option value="deleteToken"> + Delete Registration Token + </option> + </select> + </article> + <article> + <label for="method">Method:</label> + <select id="method"> + <option value="GET">GET</option> + <option value="POST">POST</option> + <option value="PUT">PUT</option> + <option value="DELETE">DELETE</option> + </select> + </article> + <article> + <label for="endpoint">Endpoint:</label> + <input + id="endpoint" + type="text" + value="/_synapse/admin/v2/users" + required + placeholder="/_synapse/admin/v2/users/..." + style="width: 80%" + /> + </article> + <article id="payloadContainer" style="display: none"> + <label for="payload">JSON Payload:</label> + <textarea + id="payload" + rows="10" + placeholder='{"displayname": "New User Name"}' + ></textarea> + </article> + <article> + <button type="submit">Execute API Call</button> + </article> + </form> + + <hr /> + + <div id="response-container"> + <h2>API Response</h2> + <p>Status: <span id="response-status">---</span></p> + <p id="error-message" style="color: red; font-weight: bold"></p> + <h3>Body:</h3> + <pre id="response-body">Waiting for response...</pre> + </div> + + <script> + document.addEventListener("DOMContentLoaded", () => { + const form = document.getElementById("apiForm"); + const methodSelect = document.getElementById("method"); + const payloadContainer = + document.getElementById("payloadContainer"); + const responseStatus = + document.getElementById("response-status"); + const responseBody = document.getElementById("response-body"); + const errorMessage = document.getElementById("error-message"); + + const updatePayloadVisibility = () => { + const method = methodSelect.value; + if (method === "POST" || method === "PUT") { + payloadContainer.style.display = "block"; + } else { + payloadContainer.style.display = "none"; + } + }; + methodSelect.addEventListener( + "change", + updatePayloadVisibility, + ); + updatePayloadVisibility(); + + window.updateApiTemplate = () => { + const apiTemplate = + document.getElementById("apiTemplate").value; + const methodField = document.getElementById("method"); + const endpointField = document.getElementById("endpoint"); + const payloadField = document.getElementById("payload"); + const payloadContainer = + document.getElementById("payloadContainer"); + + switch (apiTemplate) { + case "listTokens": + methodField.value = "GET"; + endpointField.value = + "/_synapse/admin/v1/registration_tokens"; + payloadField.value = ""; + payloadContainer.style.display = "none"; + break; + case "getToken": + methodField.value = "GET"; + endpointField.value = + "/_synapse/admin/v1/registration_tokens/{token}"; + payloadField.value = ""; + payloadContainer.style.display = "none"; + break; + case "createToken": + methodField.value = "POST"; + endpointField.value = + "/_synapse/admin/v1/registration_tokens/new"; + payloadField.value = JSON.stringify( + { + uses_allowed: 1, + expiry_time: Date.now() + 86400000, + }, + null, + 2, + ); + payloadContainer.style.display = "block"; + break; + case "deleteToken": + methodField.value = "DELETE"; + endpointField.value = + "/_synapse/admin/v1/registration_tokens/{token}"; + payloadField.value = ""; + payloadContainer.style.display = "none"; + break; + default: + methodField.value = "GET"; + endpointField.value = ""; + payloadField.value = ""; + payloadContainer.style.display = "none"; + } + }; + + form.addEventListener("submit", async (event) => { + event.preventDefault(); + + responseStatus.textContent = "Executing..."; + responseBody.textContent = "Processing..."; + errorMessage.textContent = ""; + + const accessToken = + document.getElementById("accessToken").value; + const synapseDomain = document + .getElementById("synapseDomain") + .value.replace(/\/+$/, ""); + const method = methodSelect.value; + const endpoint = document + .getElementById("endpoint") + .value.trim(); + let payload = document.getElementById("payload").value; + + const fullUrl = `${synapseDomain}${endpoint.startsWith("/") ? "" : "/"}${endpoint}`; + + const headers = { + Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }; + + const config = { + method: method, + headers: headers, + }; + + if (method === "POST" || method === "PUT") { + if (payload) { + try { + config.body = JSON.stringify( + JSON.parse(payload), + ); + } catch (e) { + errorMessage.textContent = + "Error: Invalid JSON payload"; + responseStatus.textContent = "Failed"; + responseBody.textContent = + "Invalid JSON payload format."; + return; + } + } + } + + try { + const apiResponse = await fetch(fullUrl, config); + + let responseText = await apiResponse.text(); + let responseJson; + + try { + responseJson = JSON.parse(responseText); + + responseBody.textContent = JSON.stringify( + responseJson, + null, + 2, + ); + } catch (e) { + responseBody.textContent = + responseText || "(No response body)"; + } + + responseStatus.textContent = `${apiResponse.status} ${apiResponse.statusText}`; + if (!apiResponse.ok) { + responseStatus.style.color = "red"; + } else { + responseStatus.style.color = "green"; + } + } catch (e) { + errorMessage.textContent = `Fetch Error: ${e.message}`; + responseStatus.textContent = "Network Error"; + responseStatus.style.color = "red"; + responseBody.textContent = + "A network error occurred during the API call."; + } + }); + }); + </script> + </body> +</html>