Changes: - forbid to overwrite secrets of other users - add some logs of success - add validation on code (length 50) - use same limiter for POST requests
63 lines
2.2 KiB
HTML
63 lines
2.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>CodeVault - Set value</title>
|
|
<style>
|
|
body { font-family: sans-serif; max-width: 880px; margin: 4rem auto; }
|
|
input, button, textarea { font-size: 1rem; padding: 0.4rem; }
|
|
input, textarea { width: 100%; box-sizing: border-box; margin-bottom: 0.75rem; }
|
|
#result { margin-top: 1rem; padding: 0.75rem; border-radius: 4px; white-space: pre-wrap; word-break: break-all; }
|
|
#result.ok { background: #e6ffed; border: 1px solid #4caf50; }
|
|
#result.err { background: #ffecec; border: 1px solid #e53935; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>Set value for a code</h1>
|
|
<input id="login" type="text" placeholder="Login" autocomplete="username">
|
|
<input id="password" type="password" placeholder="Password" autocomplete="current-password">
|
|
<input id="code" type="text" placeholder="Access code" maxlength="50">
|
|
<textarea id="value" rows="4" placeholder="Value"></textarea>
|
|
<button id="submit">Save</button>
|
|
<div id="result"></div>
|
|
<p><a href="/">Get a value instead</a></p>
|
|
<script>
|
|
document.getElementById('submit').addEventListener('click', async () => {
|
|
const login = document.getElementById('login').value;
|
|
const password = document.getElementById('password').value;
|
|
const code = document.getElementById('code').value;
|
|
const value = document.getElementById('value').value;
|
|
const result = document.getElementById('result');
|
|
result.className = '';
|
|
result.textContent = '';
|
|
|
|
const response = await fetch('/api/v1/setValue', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': 'Basic ' + btoa(login + ':' + password),
|
|
},
|
|
body: JSON.stringify({ code, value }),
|
|
});
|
|
|
|
if (response.status === 204) {
|
|
result.className = 'ok';
|
|
result.textContent = 'Saved';
|
|
} else if (response.status === 401) {
|
|
result.className = 'err';
|
|
result.textContent = 'Invalid login or password';
|
|
} else if (response.status === 403) {
|
|
result.className = 'err';
|
|
result.textContent = 'Code is owned by another user';
|
|
} else if (response.status === 400) {
|
|
result.className = 'err';
|
|
result.textContent = 'Code and value are required';
|
|
} else {
|
|
result.className = 'err';
|
|
result.textContent = 'Error: ' + response.status;
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|