Files
keywarden/web/templates/assignments_edit.html
Patrick Asmus (scriptos) fd13e67aef
Some checks failed
Release Docker Image / Build & Push Docker Image (release) Failing after 1m30s
Release: v0.1.0-alpha
2026-04-05 16:56:16 +02:00

155 lines
6.7 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{{define "content"}}
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="card">
<div class="card-header">
<h3 class="card-title"><i class="ti ti-edit"></i> Edit Access Assignment #{{.Assignment.ID}}</h3>
</div>
<div class="card-body">
<form action="/assignments/{{.Assignment.ID}}/edit" method="POST" id="assignment-form">
<!-- User Selection -->
<div class="mb-3">
<label class="form-label required">User</label>
<select name="user_id" id="user-select" class="form-select" required>
<option value=""> Select user </option>
{{range .AssignAllUsers}}
<option value="{{.ID}}" {{if eq .ID $.Assignment.UserID}}selected{{end}}>{{.Username}} ({{.Email}})</option>
{{end}}
</select>
</div>
<!-- SSH Key Selection -->
<div class="mb-3">
<label class="form-label required">SSH Key</label>
<select name="ssh_key_id" id="key-select" class="form-select" required>
<option value=""> Select key </option>
</select>
<small class="form-hint">Only keys of the selected user are shown.</small>
</div>
<!-- Target Type -->
<div class="mb-3">
<label class="form-label required">Target Type</label>
<div class="form-selectgroup">
<label class="form-selectgroup-item">
<input type="radio" name="target_type" value="host" class="form-selectgroup-input" {{if gt .Assignment.ServerID 0}}checked{{end}}{{if and (eq .Assignment.ServerID 0) (eq .Assignment.GroupID 0)}}checked{{end}} onchange="toggleTarget()">
<span class="form-selectgroup-label"><i class="ti ti-server"></i> Single Host</span>
</label>
<label class="form-selectgroup-item">
<input type="radio" name="target_type" value="group" class="form-selectgroup-input" {{if gt .Assignment.GroupID 0}}checked{{end}} onchange="toggleTarget()">
<span class="form-selectgroup-label"><i class="ti ti-folders"></i> Host Group</span>
</label>
</div>
</div>
<!-- Host Selection -->
<div class="mb-3{{if gt .Assignment.GroupID 0}} d-none{{end}}" id="host-section">
<label class="form-label required">Host</label>
<select name="server_id" id="server-select" class="form-select">
<option value=""> Select host </option>
{{range .AssignAllHosts}}
<option value="{{.ID}}" {{if eq .ID $.Assignment.ServerID}}selected{{end}}>{{.Name}} ({{.Hostname}}:{{.Port}})</option>
{{end}}
</select>
</div>
<!-- Group Selection -->
<div class="mb-3{{if not (gt .Assignment.GroupID 0)}} d-none{{end}}" id="group-section">
<label class="form-label required">Host Group</label>
<select name="group_id" id="group-select" class="form-select">
<option value=""> Select group </option>
{{range .AssignAllGroups}}
<option value="{{.ID}}" {{if eq .ID $.Assignment.GroupID}}selected{{end}}>{{.Name}} ({{.ServerCount}} hosts)</option>
{{end}}
</select>
</div>
<!-- System User -->
<div class="mb-3">
<label class="form-label required">System User</label>
<input type="text" name="system_user" class="form-control" value="{{.Assignment.SystemUser}}" required>
<small class="form-hint">The user account on the target host under which the key will be deployed.</small>
</div>
<!-- Desired State -->
<div class="mb-3">
<label class="form-label required">Desired State</label>
<select name="desired_state" class="form-select">
<option value="present" {{if eq .Assignment.DesiredState "present"}}selected{{end}}>Present Key should be deployed</option>
<option value="absent" {{if eq .Assignment.DesiredState "absent"}}selected{{end}}>Absent Key should be removed</option>
</select>
</div>
<!-- Options -->
<div class="mb-3">
<label class="form-label">Options</label>
<div>
<label class="form-check form-switch">
<input class="form-check-input" type="checkbox" name="sudo" {{if .Assignment.Sudo}}checked{{end}}>
<span class="form-check-label">Grant sudo rights to the system user</span>
</label>
</div>
<div class="mt-2">
<label class="form-check form-switch">
<input class="form-check-input" type="checkbox" name="create_user" {{if .Assignment.CreateUser}}checked{{end}}>
<span class="form-check-label">Create system user on target host if it doesn't exist</span>
</label>
</div>
</div>
<div class="form-footer">
<button type="submit" class="btn btn-primary">
<i class="ti ti-device-floppy"></i> Save Changes
</button>
<a href="/assignments" class="btn btn-outline-secondary ms-2">Cancel</a>
</div>
</form>
</div>
</div>
</div>
</div>
<script>
// Key data grouped by user ID
var keysByUser = {};
{{range .AssignAllKeys}}
if (!keysByUser[{{.UserID}}]) keysByUser[{{.UserID}}] = [];
keysByUser[{{.UserID}}].push({id: {{.ID}}, name: "{{.Name}}", type: "{{.KeyType}}"});
{{end}}
var preselectedKeyID = {{.Assignment.SSHKeyID}};
function populateKeys(uid, selectedKeyID) {
var keySelect = document.getElementById('key-select');
keySelect.innerHTML = '<option value=""> Select key </option>';
if (uid && keysByUser[uid]) {
keysByUser[uid].forEach(function(k) {
var opt = document.createElement('option');
opt.value = k.id;
opt.textContent = k.name + ' (' + k.type + ')';
if (k.id == selectedKeyID) opt.selected = true;
keySelect.appendChild(opt);
});
}
}
document.getElementById('user-select').addEventListener('change', function() {
populateKeys(this.value, 0);
});
// Initialize on page load with pre-selected values
(function() {
var userSelect = document.getElementById('user-select');
if (userSelect.value) {
populateKeys(userSelect.value, preselectedKeyID);
}
})();
function toggleTarget() {
var isHost = document.querySelector('input[name="target_type"][value="host"]').checked;
document.getElementById('host-section').classList.toggle('d-none', !isHost);
document.getElementById('group-section').classList.toggle('d-none', isHost);
}
</script>
{{end}}