91 lines
3.6 KiB
PHP
91 lines
3.6 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Mahak Authentication Error</title>
|
|
<style>
|
|
body { margin: 2rem; color: #1d2327; background: #f0f0f1; font: 14px/1.5 monospace; }
|
|
main { max-width: 1100px; margin: auto; padding: 2rem; background: #fff; border-left: 4px solid #d63638; box-shadow: 0 1px 3px rgba(0, 0, 0, .12); }
|
|
h1 { margin-top: 0; color: #d63638; font: 24px/1.3 sans-serif; }
|
|
h2 { margin-top: 2rem; font: 20px/1.3 sans-serif; }
|
|
table { width: 100%; border-collapse: collapse; }
|
|
th, td { padding: .55rem; border: 1px solid #c3c4c7; text-align: left; vertical-align: top; overflow-wrap: anywhere; }
|
|
th { width: 220px; background: #f6f7f7; }
|
|
pre, textarea { box-sizing: border-box; width: 100%; padding: 1rem; color: #f0f0f1; background: #1d2327; white-space: pre-wrap; }
|
|
textarea { min-height: 240px; resize: vertical; }
|
|
button { padding: .55rem 1rem; border: 1px solid #2271b1; border-radius: 3px; color: #fff; background: #2271b1; cursor: pointer; }
|
|
#copy-status { margin-left: .75rem; font-family: sans-serif; }
|
|
.privacy-note { padding: .75rem; border-left: 4px solid #72aee6; background: #f0f6fc; font-family: sans-serif; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<h1>Mahak Authentication Error</h1>
|
|
|
|
<h2>Exception</h2>
|
|
<table>
|
|
<?php foreach ($report['exception'] as $label => $value): ?>
|
|
<tr><th><?= esc_html($label) ?></th><td><?= esc_html($value) ?></td></tr>
|
|
<?php endforeach; ?>
|
|
</table>
|
|
|
|
<h2>WordPress server diagnostics</h2>
|
|
<table>
|
|
<?php foreach ($report['server'] as $label => $value): ?>
|
|
<tr><th><?= esc_html($label) ?></th><td><?= esc_html($value) ?></td></tr>
|
|
<?php endforeach; ?>
|
|
</table>
|
|
|
|
<h2>JWT timing claims</h2>
|
|
<?php if ($report['jwt_timestamps'] === []): ?>
|
|
<p>No readable JWT timing claims were available.</p>
|
|
<?php else: ?>
|
|
<table>
|
|
<?php foreach ($report['jwt_timestamps'] as $label => $value): ?>
|
|
<tr><th><?= esc_html($label) ?></th><td><?= esc_html($value) ?></td></tr>
|
|
<?php endforeach; ?>
|
|
</table>
|
|
<?php endif; ?>
|
|
|
|
<h2>Sanitized stack trace</h2>
|
|
<pre><?= esc_html($report['trace']) ?></pre>
|
|
<p class="privacy-note">JWT contents, request parameters, and function arguments are intentionally omitted.</p>
|
|
|
|
<h2>Copyable report</h2>
|
|
<p><button type="button" id="copy-markdown">Copy Markdown</button><span id="copy-status" role="status"></span></p>
|
|
<textarea id="debug-markdown" readonly><?= esc_textarea($report['markdown']) ?></textarea>
|
|
</main>
|
|
<script>
|
|
(function () {
|
|
var button = document.getElementById('copy-markdown');
|
|
var report = document.getElementById('debug-markdown');
|
|
var status = document.getElementById('copy-status');
|
|
|
|
button.addEventListener('click', function () {
|
|
var copied = function () { status.textContent = 'Copied.'; };
|
|
var failed = function () {
|
|
report.focus();
|
|
report.select();
|
|
status.textContent = 'Select the report and copy it manually.';
|
|
};
|
|
|
|
if (navigator.clipboard && window.isSecureContext) {
|
|
navigator.clipboard.writeText(report.value).then(copied, failed);
|
|
return;
|
|
}
|
|
|
|
report.focus();
|
|
report.select();
|
|
|
|
try {
|
|
document.execCommand('copy') ? copied() : failed();
|
|
} catch (error) {
|
|
failed();
|
|
}
|
|
});
|
|
}());
|
|
</script>
|
|
</body>
|
|
</html>
|