- agent reports the OS user it runs as (enroll + poll header) - per-machine terminal user on the edit page; defaults to the agent's own user (root on Linux) - create a new user from the panel: name, password, optional sudo group - show the reason in the terminal when a shell fails to start - bump version to 0.0.2
103 lines
5.7 KiB
HTML
103 lines
5.7 KiB
HTML
<!doctype html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Изменить машину — LPRA</title>
|
|
<link rel="stylesheet" href="/static/app.css">
|
|
</head>
|
|
<body>
|
|
<header class="topbar">
|
|
<div class="brand">LPRA · Изменить машину</div>
|
|
<nav>
|
|
<a href="/">← Машины</a>
|
|
</nav>
|
|
</header>
|
|
<div class="wrap">
|
|
<h1>{{.Agent.Name}}</h1>
|
|
|
|
<div class="card">
|
|
<h2>Имя</h2>
|
|
<form method="post" action="/agents/{{.Agent.ID}}/rename" class="row">
|
|
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
|
<input type="text" name="name" value="{{.Agent.Name}}" style="max-width:360px" required>
|
|
<button type="submit">Сохранить</button>
|
|
</form>
|
|
<p class="muted" style="margin-top:12px">
|
|
Hostname: <code>{{.Agent.Hostname}}</code> · ОС: <code>{{.Agent.OS}}/{{.Agent.Arch}}</code> · ID: <code>{{.Agent.ID}}</code>
|
|
</p>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>Пользователь</h2>
|
|
{{if .UserOK}}<div class="err" style="background:#1d3a24;border-color:#2b6b3a;color:#b3ffcb">{{.UserOK}}</div>{{end}}
|
|
{{if .UserErr}}<div class="err">{{.UserErr}}</div>{{end}}
|
|
<p class="muted">
|
|
Клиент запущен от: <code>{{if .Users}}{{.Users.Current}}{{else if .Agent.RunUser}}{{.Agent.RunUser}}{{else}}неизвестно{{end}}</code>
|
|
· Терминал открывается от: <code>{{.Agent.TerminalUser}}</code>
|
|
</p>
|
|
{{if .Users}}
|
|
<form method="post" action="/agents/{{.Agent.ID}}/user" class="row">
|
|
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
|
<select name="user" style="max-width:360px" {{if not .Users.CanSwitch}}disabled{{end}}>
|
|
{{range .Users.Users}}<option value="{{.}}" {{if eq . $.Agent.TerminalUser}}selected{{end}}>{{.}}</option>{{end}}
|
|
</select>
|
|
<button type="submit" {{if not .Users.CanSwitch}}disabled{{end}}>Сохранить</button>
|
|
{{if .Users.CanSwitch}}<button type="button" class="btn ghost" onclick="document.getElementById('newuser').hidden = !document.getElementById('newuser').hidden">Создать нового</button>{{end}}
|
|
</form>
|
|
{{if .Users.CanSwitch}}
|
|
<form id="newuser" method="post" action="/agents/{{.Agent.ID}}/users/add" style="max-width:360px; margin-top:16px" hidden>
|
|
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
|
<label for="nu-name">Имя нового пользователя</label>
|
|
<input type="text" id="nu-name" name="name" pattern="[a-z_][a-z0-9_\-]{0,31}" autocomplete="off" required>
|
|
<label for="nu-pass">Пароль</label>
|
|
<input type="password" id="nu-pass" name="password" autocomplete="new-password">
|
|
<label style="color:var(--text); font-size:14px">
|
|
<input type="checkbox" name="sudo" value="1"> Добавить в sudo
|
|
</label>
|
|
<p class="muted" style="font-size:13px">Без пароля вход по паролю (и sudo) для него работать не будет — только терминал из панели.</p>
|
|
<button type="submit">Создать пользователя</button>
|
|
</form>
|
|
{{else}}
|
|
<p class="muted" style="font-size:13px; margin-top:12px">Клиент запущен не от root, поэтому сменить или создать пользователя нельзя.</p>
|
|
{{end}}
|
|
{{else if .UsersErr}}
|
|
<p class="muted" style="font-size:13px">Список пользователей недоступен: {{.UsersErr}}.</p>
|
|
{{else}}
|
|
<p class="muted" style="font-size:13px">Машина офлайн — сменить пользователя можно, когда она на связи.</p>
|
|
{{end}}
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>Версия клиента</h2>
|
|
{{if .Updated}}<div class="err" style="background:#1d3a24;border-color:#2b6b3a;color:#b3ffcb">Команда обновления отправлена. Клиент скачает свежий бинарник и перезапустится.</div>{{end}}
|
|
<p class="muted">
|
|
Клиент: <code>{{if .Agent.Version}}{{.Agent.Version}}{{else}}неизвестно{{end}}</code>
|
|
· Сервер: <code>{{.ServerVersion}}</code>
|
|
{{if .Outdated}}<span style="color:var(--danger)"> · требуется обновление</span>{{else}}<span style="color:var(--ok)"> · актуальна</span>{{end}}
|
|
</p>
|
|
{{if .Outdated}}
|
|
<form method="post" action="/agents/{{.Agent.ID}}/update"
|
|
onsubmit="return confirm('Обновить клиента до версии {{.ServerVersion}}? Бинарник будет заменён, сервис перезапущен (без удаления).')">
|
|
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
|
<button type="submit">Обновить клиента</button>
|
|
</form>
|
|
{{else}}
|
|
<p class="muted" style="font-size:13px">Обновление доступно, когда версия клиента отличается от версии сервера.</p>
|
|
{{end}}
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>Удаление</h2>
|
|
<p class="muted">Удаляет машину из панели. Сервис на самой машине продолжит работать,
|
|
но перестанет быть виден; чтобы подключиться снова — переустановите агента.</p>
|
|
<form method="post" action="/agents/{{.Agent.ID}}/delete"
|
|
onsubmit="return confirm('Удалить машину {{.Agent.Name}}?')">
|
|
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
|
<button class="btn danger" type="submit">Удалить машину</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|