mirror of
https://github.com/nextcloud/all-in-one.git
synced 2025-12-20 06:26:57 +00:00
Rewrite all AIO interface paths to be relative
Signed-off-by: Lorenzo Moscati <lorenzo@moscati.page>
This commit is contained in:
parent
4581cf7649
commit
21fbb58c96
14 changed files with 96 additions and 79 deletions
3
php/public/base_path.js
Normal file
3
php/public/base_path.js
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
document.addEventListener("DOMContentLoaded", function(event) {
|
||||||
|
document.getElementById("base_path") && (document.getElementById("base_path").value = window.location.pathname.slice(0, -11));
|
||||||
|
});
|
||||||
|
|
@ -178,17 +178,17 @@ $app->get('/', function (\Psr\Http\Message\RequestInterface $request, Response $
|
||||||
$setup = $container->get(\AIO\Data\Setup::class);
|
$setup = $container->get(\AIO\Data\Setup::class);
|
||||||
if($setup->CanBeInstalled()) {
|
if($setup->CanBeInstalled()) {
|
||||||
return $response
|
return $response
|
||||||
->withHeader('Location', '/setup')
|
->withHeader('Location', 'setup')
|
||||||
->withStatus(302);
|
->withStatus(302);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($authManager->IsAuthenticated()) {
|
if($authManager->IsAuthenticated()) {
|
||||||
return $response
|
return $response
|
||||||
->withHeader('Location', '/containers')
|
->withHeader('Location', 'containers')
|
||||||
->withStatus(302);
|
->withStatus(302);
|
||||||
} else {
|
} else {
|
||||||
return $response
|
return $response
|
||||||
->withHeader('Location', '/login')
|
->withHeader('Location', 'login')
|
||||||
->withStatus(302);
|
->withStatus(302);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,7 @@ readonly class ConfigurationController {
|
||||||
$this->configurationManager->DeleteBorgBackupLocationVars();
|
$this->configurationManager->DeleteBorgBackupLocationVars();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $response->withStatus(201)->withHeader('Location', '/');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
} catch (InvalidSettingConfigurationException $ex) {
|
} catch (InvalidSettingConfigurationException $ex) {
|
||||||
$response->getBody()->write($ex->getMessage());
|
$response->getBody()->write($ex->getMessage());
|
||||||
return $response->withStatus(422);
|
return $response->withStatus(422);
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ readonly class DockerController {
|
||||||
public function StartBackupContainerBackup(Request $request, Response $response, array $args) : Response {
|
public function StartBackupContainerBackup(Request $request, Response $response, array $args) : Response {
|
||||||
$forceStopNextcloud = true;
|
$forceStopNextcloud = true;
|
||||||
$this->startBackup($forceStopNextcloud);
|
$this->startBackup($forceStopNextcloud);
|
||||||
return $response->withStatus(201)->withHeader('Location', '/');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function startBackup(bool $forceStopNextcloud = false) : void {
|
public function startBackup(bool $forceStopNextcloud = false) : void {
|
||||||
|
|
@ -102,7 +102,7 @@ readonly class DockerController {
|
||||||
|
|
||||||
public function StartBackupContainerCheck(Request $request, Response $response, array $args) : Response {
|
public function StartBackupContainerCheck(Request $request, Response $response, array $args) : Response {
|
||||||
$this->checkBackup();
|
$this->checkBackup();
|
||||||
return $response->withStatus(201)->withHeader('Location', '/');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkBackup() : void {
|
public function checkBackup() : void {
|
||||||
|
|
@ -132,7 +132,7 @@ readonly class DockerController {
|
||||||
$id = 'nextcloud-aio-borgbackup';
|
$id = 'nextcloud-aio-borgbackup';
|
||||||
$this->PerformRecursiveContainerStart($id);
|
$this->PerformRecursiveContainerStart($id);
|
||||||
|
|
||||||
return $response->withStatus(201)->withHeader('Location', '/');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function StartBackupContainerCheckRepair(Request $request, Response $response, array $args) : Response {
|
public function StartBackupContainerCheckRepair(Request $request, Response $response, array $args) : Response {
|
||||||
|
|
@ -148,7 +148,7 @@ readonly class DockerController {
|
||||||
$config['backup-mode'] = 'check';
|
$config['backup-mode'] = 'check';
|
||||||
$this->configurationManager->WriteConfig($config);
|
$this->configurationManager->WriteConfig($config);
|
||||||
|
|
||||||
return $response->withStatus(201)->withHeader('Location', '/');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function StartBackupContainerTest(Request $request, Response $response, array $args) : Response {
|
public function StartBackupContainerTest(Request $request, Response $response, array $args) : Response {
|
||||||
|
|
@ -163,7 +163,7 @@ readonly class DockerController {
|
||||||
$id = 'nextcloud-aio-borgbackup';
|
$id = 'nextcloud-aio-borgbackup';
|
||||||
$this->PerformRecursiveContainerStart($id);
|
$this->PerformRecursiveContainerStart($id);
|
||||||
|
|
||||||
return $response->withStatus(201)->withHeader('Location', '/');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function StartContainer(Request $request, Response $response, array $args) : Response
|
public function StartContainer(Request $request, Response $response, array $args) : Response
|
||||||
|
|
@ -171,6 +171,7 @@ readonly class DockerController {
|
||||||
$uri = $request->getUri();
|
$uri = $request->getUri();
|
||||||
$host = $uri->getHost();
|
$host = $uri->getHost();
|
||||||
$port = $uri->getPort();
|
$port = $uri->getPort();
|
||||||
|
$path = $request->getParsedBody()['base_path'];
|
||||||
if ($port === 8000) {
|
if ($port === 8000) {
|
||||||
error_log('The AIO_URL-port was discovered to be 8000 which is not expected. It is now set to 443.');
|
error_log('The AIO_URL-port was discovered to be 8000 which is not expected. It is now set to 443.');
|
||||||
$port = 443;
|
$port = 443;
|
||||||
|
|
@ -184,7 +185,7 @@ readonly class DockerController {
|
||||||
|
|
||||||
$config = $this->configurationManager->GetConfig();
|
$config = $this->configurationManager->GetConfig();
|
||||||
// set AIO_URL
|
// set AIO_URL
|
||||||
$config['AIO_URL'] = $host . ':' . $port;
|
$config['AIO_URL'] = $host . ':' . $port . $path;
|
||||||
// set wasStartButtonClicked
|
// set wasStartButtonClicked
|
||||||
$config['wasStartButtonClicked'] = 1;
|
$config['wasStartButtonClicked'] = 1;
|
||||||
// set install_latest_major
|
// set install_latest_major
|
||||||
|
|
@ -204,7 +205,7 @@ readonly class DockerController {
|
||||||
// Temporarily disabled as it leads much faster to docker rate limits
|
// Temporarily disabled as it leads much faster to docker rate limits
|
||||||
// apcu_clear_cache();
|
// apcu_clear_cache();
|
||||||
|
|
||||||
return $response->withStatus(201)->withHeader('Location', '/');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function startTopContainer(bool $pullImage) : void {
|
public function startTopContainer(bool $pullImage) : void {
|
||||||
|
|
@ -223,7 +224,7 @@ readonly class DockerController {
|
||||||
|
|
||||||
public function StartWatchtowerContainer(Request $request, Response $response, array $args) : Response {
|
public function StartWatchtowerContainer(Request $request, Response $response, array $args) : Response {
|
||||||
$this->startWatchtower();
|
$this->startWatchtower();
|
||||||
return $response->withStatus(201)->withHeader('Location', '/');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function startWatchtower() : void {
|
public function startWatchtower() : void {
|
||||||
|
|
@ -261,7 +262,7 @@ readonly class DockerController {
|
||||||
$forceStopNextcloud = true;
|
$forceStopNextcloud = true;
|
||||||
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud);
|
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud);
|
||||||
|
|
||||||
return $response->withStatus(201)->withHeader('Location', '/');
|
return $response->withStatus(201)->withHeader('Location', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function stopTopContainer() : void {
|
public function stopTopContainer() : void {
|
||||||
|
|
|
||||||
|
|
@ -19,33 +19,33 @@ readonly class LoginController {
|
||||||
public function TryLogin(Request $request, Response $response, array $args) : Response {
|
public function TryLogin(Request $request, Response $response, array $args) : Response {
|
||||||
if (!$this->dockerActionManager->isLoginAllowed()) {
|
if (!$this->dockerActionManager->isLoginAllowed()) {
|
||||||
$response->getBody()->write("The login is blocked since Nextcloud is running.");
|
$response->getBody()->write("The login is blocked since Nextcloud is running.");
|
||||||
return $response->withHeader('Location', '/')->withStatus(422);
|
return $response->withHeader('Location', '.')->withStatus(422);
|
||||||
}
|
}
|
||||||
$password = $request->getParsedBody()['password'] ?? '';
|
$password = $request->getParsedBody()['password'] ?? '';
|
||||||
if($this->authManager->CheckCredentials($password)) {
|
if($this->authManager->CheckCredentials($password)) {
|
||||||
$this->authManager->SetAuthState(true);
|
$this->authManager->SetAuthState(true);
|
||||||
return $response->withHeader('Location', '/')->withStatus(201);
|
return $response->withHeader('Location', '.')->withStatus(201);
|
||||||
}
|
}
|
||||||
|
|
||||||
$response->getBody()->write("The password is incorrect.");
|
$response->getBody()->write("The password is incorrect.");
|
||||||
return $response->withHeader('Location', '/')->withStatus(422);
|
return $response->withHeader('Location', '.')->withStatus(422);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function GetTryLogin(Request $request, Response $response, array $args) : Response {
|
public function GetTryLogin(Request $request, Response $response, array $args) : Response {
|
||||||
$token = $request->getQueryParams()['token'] ?? '';
|
$token = $request->getQueryParams()['token'] ?? '';
|
||||||
if($this->authManager->CheckToken($token)) {
|
if($this->authManager->CheckToken($token)) {
|
||||||
$this->authManager->SetAuthState(true);
|
$this->authManager->SetAuthState(true);
|
||||||
return $response->withHeader('Location', '/')->withStatus(302);
|
return $response->withHeader('Location', '../..')->withStatus(302);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $response->withHeader('Location', '/')->withStatus(302);
|
return $response->withHeader('Location', '../..')->withStatus(302);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Logout(Request $request, Response $response, array $args) : Response
|
public function Logout(Request $request, Response $response, array $args) : Response
|
||||||
{
|
{
|
||||||
$this->authManager->SetAuthState(false);
|
$this->authManager->SetAuthState(false);
|
||||||
return $response
|
return $response
|
||||||
->withHeader('Location', '/')
|
->withHeader('Location', '.')
|
||||||
->withStatus(302);
|
->withStatus(302);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,15 @@ readonly class AuthMiddleware {
|
||||||
if(!in_array($request->getUri()->getPath(), $publicRoutes)) {
|
if(!in_array($request->getUri()->getPath(), $publicRoutes)) {
|
||||||
if(!$this->authManager->IsAuthenticated()) {
|
if(!$this->authManager->IsAuthenticated()) {
|
||||||
$status = 302;
|
$status = 302;
|
||||||
$headers = ['Location' => '/'];
|
if(count(explode('/', $request->getUri()->getPath())) > 2) {
|
||||||
|
$location = '..';
|
||||||
|
for($i = 0; $i < count(explode('/', $request->getUri()->getPath())) - 3; $i++) {
|
||||||
|
$location = $location . '/..';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$location = '.';
|
||||||
|
}
|
||||||
|
$headers = ['Location' => $location];
|
||||||
$response = new Response($status, $headers);
|
$response = new Response($status, $headers);
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="login">
|
<div class="login">
|
||||||
<svg class="nextcloud-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 142 100" width="142" height="100">
|
<svg class="nextcloud-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 142 100" width="142" height="100">
|
||||||
<use href="/img/nextcloud-logo.svg#logo"></use>
|
<use href="img/nextcloud-logo.svg#logo"></use>
|
||||||
<use href="/img/nextcloud-logo.svg#Nextcloud"></use>
|
<use href="img/nextcloud-logo.svg#Nextcloud"></use>
|
||||||
<text x="10" y="50" fill="var(--color-nextcloud-logo)" class="fallback-text">Nextcloud Logo</text>
|
<text x="10" y="50" fill="var(--color-nextcloud-logo)" class="fallback-text">Nextcloud Logo</text>
|
||||||
</svg>
|
</svg>
|
||||||
<h2>Nextcloud All-In-One is already installed</h2>
|
<h2>Nextcloud All-In-One is already installed</h2>
|
||||||
<a href="/" class="button">Open Nextcloud AIO</a>
|
<a href="." class="button">Open Nextcloud AIO</a>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,15 @@
|
||||||
{% if c.GetStartingState().value == 'starting' %}
|
{% if c.GetStartingState().value == 'starting' %}
|
||||||
<span class="status running"></span>
|
<span class="status running"></span>
|
||||||
{{ c.GetDisplayName() }}
|
{{ c.GetDisplayName() }}
|
||||||
(<a href="/api/docker/logs?id={{ c.GetIdentifier() }}" target="_blank">Starting</a>)
|
(<a href="api/docker/logs?id={{ c.GetIdentifier() }}" target="_blank">Starting</a>)
|
||||||
{% elseif c.GetRunningState().value == 'running' %}
|
{% elseif c.GetRunningState().value == 'running' %}
|
||||||
<span class="status success"></span>
|
<span class="status success"></span>
|
||||||
{{ c.GetDisplayName() }}
|
{{ c.GetDisplayName() }}
|
||||||
(<a href="/api/docker/logs?id={{ c.GetIdentifier() }}" target="_blank">Running</a>)
|
(<a href="api/docker/logs?id={{ c.GetIdentifier() }}" target="_blank">Running</a>)
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="status error"></span>
|
<span class="status error"></span>
|
||||||
{{ c.GetDisplayName() }}
|
{{ c.GetDisplayName() }}
|
||||||
(<a href="/api/docker/logs?id={{ c.GetIdentifier() }}" target="_blank">Stopped</a>)
|
(<a href="api/docker/logs?id={{ c.GetIdentifier() }}" target="_blank">Stopped</a>)
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if c.GetDocumentation() != '' %}
|
{% if c.GetDocumentation() != '' %}
|
||||||
(<a target="_blank" href="{{ c.GetDocumentation() }}">docs</a>)
|
(<a target="_blank" href="{{ c.GetDocumentation() }}">docs</a>)
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@
|
||||||
</head>
|
</head>
|
||||||
<header>
|
<header>
|
||||||
<svg class="logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 142 71" width="62" height="50">
|
<svg class="logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 142 71" width="62" height="50">
|
||||||
<use href="/img/nextcloud-logo.svg#logo"></use>
|
<use href="img/nextcloud-logo.svg#logo"></use>
|
||||||
</svg>
|
</svg>
|
||||||
<form method="POST" action="/api/auth/logout">
|
<form method="POST" action="api/auth/logout">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Log out" />
|
<input type="submit" value="Log out" />
|
||||||
|
|
@ -63,11 +63,11 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% if is_daily_backup_running == true %}
|
{% if is_daily_backup_running == true %}
|
||||||
<p><span class="status running"></span> Daily backup currently running. (<a href="/api/docker/logs?id=nextcloud-aio-mastercontainer" target="_blank">Mastercontainer logs</a>) (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Borg backup container logs</a>)</p>
|
<p><span class="status running"></span> Daily backup currently running. (<a href="api/docker/logs?id=nextcloud-aio-mastercontainer" target="_blank">Mastercontainer logs</a>) (<a href="api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Borg backup container logs</a>)</p>
|
||||||
{% if automatic_updates == true %}
|
{% if automatic_updates == true %}
|
||||||
<p>This will update your containers, the mastercontainer and, on Saturdays, your Nextcloud apps if the backup is successful.</p>
|
<p>This will update your containers, the mastercontainer and, on Saturdays, your Nextcloud apps if the backup is successful.</p>
|
||||||
{% if is_mastercontainer_update_available == true %}
|
{% if is_mastercontainer_update_available == true %}
|
||||||
<p>When the mastercontainer is updated it will restart, making it unavailable for a moment. (<a href="/api/docker/logs?id=nextcloud-aio-watchtower" target="_blank">Logs</a>)</p>
|
<p>When the mastercontainer is updated it will restart, making it unavailable for a moment. (<a href="api/docker/logs?id=nextcloud-aio-watchtower" target="_blank">Logs</a>)</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if has_update_available == false %}
|
{% if has_update_available == false %}
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
<p><a href="" class="button reload">Reload ↻</a></p>
|
<p><a href="" class="button reload">Reload ↻</a></p>
|
||||||
<p>If the daily backup is stuck somehow, you can unstick it by running <strong>sudo docker exec nextcloud-aio-mastercontainer rm /mnt/docker-aio-config/data/daily_backup_running</strong> and afterwards reloading this interface.</p>
|
<p>If the daily backup is stuck somehow, you can unstick it by running <strong>sudo docker exec nextcloud-aio-mastercontainer rm /mnt/docker-aio-config/data/daily_backup_running</strong> and afterwards reloading this interface.</p>
|
||||||
{% elseif isWatchtowerRunning == true %}
|
{% elseif isWatchtowerRunning == true %}
|
||||||
<p><span class="status running"></span> Mastercontainer update currently running. Once the update is complete the mastercontainer will restart, making it unavailable for a moment. Please wait until it's done. (<a href="/api/docker/logs?id=nextcloud-aio-watchtower" target="_blank">Logs</a>)</p>
|
<p><span class="status running"></span> Mastercontainer update currently running. Once the update is complete the mastercontainer will restart, making it unavailable for a moment. Please wait until it's done. (<a href="api/docker/logs?id=nextcloud-aio-watchtower" target="_blank">Logs</a>)</p>
|
||||||
<p><a href="" class="button reload">Reload ↻</a></p>
|
<p><a href="" class="button reload">Reload ↻</a></p>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if is_backup_container_running == false and domain == "" %}
|
{% if is_backup_container_running == false and domain == "" %}
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
{% elseif is_mastercontainer_update_available == true %}
|
{% elseif is_mastercontainer_update_available == true %}
|
||||||
<h2>Mastercontainer update</h2>
|
<h2>Mastercontainer update</h2>
|
||||||
<p>⚠️ A mastercontainer update is available. Please click on the button below to update it. Afterwards, you will be able to proceed with the setup.</p>
|
<p>⚠️ A mastercontainer update is available. Please click on the button below to update it. Afterwards, you will be able to proceed with the setup.</p>
|
||||||
<form method="POST" action="/api/docker/watchtower" class="xhr">
|
<form method="POST" action="api/docker/watchtower" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Update mastercontainer" />
|
<input type="submit" value="Update mastercontainer" />
|
||||||
|
|
@ -108,7 +108,7 @@
|
||||||
{% if skip_domain_validation == true %}
|
{% if skip_domain_validation == true %}
|
||||||
<p><strong>Please note:</strong> The domain validation is disabled so any domain will be accepted here! Make sure you do not make a typo here as you will not be able to change it afterwards!</p>
|
<p><strong>Please note:</strong> The domain validation is disabled so any domain will be accepted here! Make sure you do not make a typo here as you will not be able to change it afterwards!</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="text" id="domain" name="domain" value="{{ domain }}" placeholder="nextcloud.yourdomain.com"/>
|
<input type="text" id="domain" name="domain" value="{{ domain }}" placeholder="nextcloud.yourdomain.com"/>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -137,7 +137,7 @@
|
||||||
{% if hasBackupLocation %}
|
{% if hasBackupLocation %}
|
||||||
{% if borg_backup_mode in ['test', 'check'] %}
|
{% if borg_backup_mode in ['test', 'check'] %}
|
||||||
{% if backup_exit_code > 0 %}
|
{% if backup_exit_code > 0 %}
|
||||||
<p><span class="status error"></span> Last {{ borg_backup_mode }} failed! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
<p><span class="status error"></span> Last {{ borg_backup_mode }} failed! (<a href="api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
||||||
{% if borg_backup_mode == 'test' %}
|
{% if borg_backup_mode == 'test' %}
|
||||||
<p>Please adjust the path and/or the encryption password in order to make it work!</p>
|
<p>Please adjust the path and/or the encryption password in order to make it work!</p>
|
||||||
{% elseif borg_backup_mode == 'check' %}
|
{% elseif borg_backup_mode == 'check' %}
|
||||||
|
|
@ -145,7 +145,7 @@
|
||||||
<details>
|
<details>
|
||||||
<summary>Reveal repair option</summary>
|
<summary>Reveal repair option</summary>
|
||||||
<p>Below is the option to repair the integrity of your backup. <strong>Please note:</strong> Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)</p>
|
<p>Below is the option to repair the integrity of your backup. <strong>Please note:</strong> Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)</p>
|
||||||
<form method="POST" action="/api/docker/backup-check-repair" class="xhr">
|
<form method="POST" action="api/docker/backup-check-repair" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Check and repair backup integrity" onclick="return confirm('Check and repair backup integrity? Are you sure that you want to check and repair the backup integrity? This should only be done after reading the mentioned documentation.')"/>
|
<input type="submit" value="Check and repair backup integrity" onclick="return confirm('Check and repair backup integrity? Are you sure that you want to check and repair the backup integrity? This should only be done after reading the mentioned documentation.')"/>
|
||||||
|
|
@ -153,10 +153,10 @@
|
||||||
</details>
|
</details>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elseif backup_exit_code == 0 %}
|
{% elseif backup_exit_code == 0 %}
|
||||||
<p><span class="status success"></span> Last {{ borg_backup_mode }} successful! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
<p><span class="status success"></span> Last {{ borg_backup_mode }} successful! (<a href="api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
||||||
{% if borg_backup_mode == 'test' %}
|
{% if borg_backup_mode == 'test' %}
|
||||||
<p>Feel free to check the integrity of the backup archive below before starting the restore process in order to make ensure that the restore will work. This can take a long time though depending on the size of the backup archive and is thus not required.</p>
|
<p>Feel free to check the integrity of the backup archive below before starting the restore process in order to make ensure that the restore will work. This can take a long time though depending on the size of the backup archive and is thus not required.</p>
|
||||||
<form method="POST" action="/api/docker/backup-check" class="xhr">
|
<form method="POST" action="api/docker/backup-check" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Check backup integrity"/>
|
<input type="submit" value="Check backup integrity"/>
|
||||||
|
|
@ -164,7 +164,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p>Choose the backup that you want to restore and click on the button below to restore the selected backup. This will restore the whole AIO instance. Please note that the current AIO passphrase will be kept and the previous AIO passphrase will not be restored from backup!</p>
|
<p>Choose the backup that you want to restore and click on the button below to restore the selected backup. This will restore the whole AIO instance. Please note that the current AIO passphrase will be kept and the previous AIO passphrase will not be restored from backup!</p>
|
||||||
<p><strong>Important:</strong> If the backup that you want to restore contained any <a target="_blank" href="https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers">community container</a>, you need to restore the same backup a second time after this attempt so that the community container data is also correctly restored.</p>
|
<p><strong>Important:</strong> If the backup that you want to restore contained any <a target="_blank" href="https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers">community container</a>, you need to restore the same backup a second time after this attempt so that the community container data is also correctly restored.</p>
|
||||||
<form method="POST" action="/api/docker/restore" class="xhr" id="restore_selection">
|
<form method="POST" action="api/docker/restore" class="xhr" id="restore_selection">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<select id="selected_restore_time" name="selected_restore_time" form="restore_selection">
|
<select id="selected_restore_time" name="selected_restore_time" form="restore_selection">
|
||||||
|
|
@ -178,7 +178,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elseif borg_backup_mode == 'restore' %}
|
{% elseif borg_backup_mode == 'restore' %}
|
||||||
{% if backup_exit_code > 0 %}
|
{% if backup_exit_code > 0 %}
|
||||||
<p><span class="status error"></span> Last restore failed! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
<p><span class="status error"></span> Last restore failed! (<a href="api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
||||||
<p>The restore process has unexpectedly failed! Please adjust the path and encryption password, test it and try to restore again!</p>
|
<p>The restore process has unexpectedly failed! Please adjust the path and encryption password, test it and try to restore again!</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -197,7 +197,7 @@
|
||||||
<a target="_blank" href="https://borgbackup.readthedocs.io/en/stable/usage/general.html#repository-urls">remote borg repo url</a>
|
<a target="_blank" href="https://borgbackup.readthedocs.io/en/stable/usage/general.html#repository-urls">remote borg repo url</a>
|
||||||
if stored remotely; and the encryption password of the backup archive below and submit all values:
|
if stored remotely; and the encryption password of the backup archive below and submit all values:
|
||||||
</p>
|
</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<label>Local backup location</label> <input type="text" id="borg_restore_host_location" name="borg_restore_host_location" value="{{borg_backup_host_location}}" placeholder="/mnt/backup"/><br>
|
<label>Local backup location</label> <input type="text" id="borg_restore_host_location" name="borg_restore_host_location" value="{{borg_backup_host_location}}" placeholder="/mnt/backup"/><br>
|
||||||
<label>Remote borg repo</label> <input type="text" name="borg_restore_remote_repo" value="{{borg_remote_repo}}" placeholder="ssh://user@host:port/path/to/repo"/><br>
|
<label>Remote borg repo</label> <input type="text" name="borg_restore_remote_repo" value="{{borg_remote_repo}}" placeholder="ssh://user@host:port/path/to/repo"/><br>
|
||||||
<label>Borg passphrase</label> <input type="text" id="borg_restore_password" name="borg_restore_password" value="{{borg_restore_password}}" placeholder="encryption password"/><br>
|
<label>Borg passphrase</label> <input type="text" id="borg_restore_password" name="borg_restore_password" value="{{borg_restore_password}}" placeholder="encryption password"/><br>
|
||||||
|
|
@ -210,7 +210,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<p><strong>Everything set!</strong> Click on the button below to test the path and encryption password:</p>
|
<p><strong>Everything set!</strong> Click on the button below to test the path and encryption password:</p>
|
||||||
<form method="POST" action="/api/docker/backup-test" class="xhr">
|
<form method="POST" action="api/docker/backup-test" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Test path and encryption password"/>
|
<input type="submit" value="Test path and encryption password"/>
|
||||||
|
|
@ -223,14 +223,14 @@
|
||||||
|
|
||||||
{% if was_start_button_clicked == true %}
|
{% if was_start_button_clicked == true %}
|
||||||
{% if current_channel starts with 'latest' or current_channel starts with 'beta' or current_channel starts with 'develop' %}
|
{% if current_channel starts with 'latest' or current_channel starts with 'beta' or current_channel starts with 'develop' %}
|
||||||
<p>You are running the <a target="_blank" href="https://github.com/nextcloud/all-in-one#how-to-switch-the-channel"><strong>{{ current_channel }}</strong></a> channel. (<a href="/api/docker/logs?id=nextcloud-aio-mastercontainer" target="_blank">Logs</a>)</p>
|
<p>You are running the <a target="_blank" href="https://github.com/nextcloud/all-in-one#how-to-switch-the-channel"><strong>{{ current_channel }}</strong></a> channel. (<a href="api/docker/logs?id=nextcloud-aio-mastercontainer" target="_blank">Logs</a>)</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>No channel was found. This means that AIO is not able to update itself and its component and will also not be able to report about updates. Updates need to be done externally.</p>
|
<p>No channel was found. This means that AIO is not able to update itself and its component and will also not be able to report about updates. Updates need to be done externally.</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if is_backup_container_running == true %}
|
{% if is_backup_container_running == true %}
|
||||||
<p><span class="status running"></span> Backup container is currently running: {{ borg_backup_mode }} (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
<p><span class="status running"></span> Backup container is currently running: {{ borg_backup_mode }} (<a href="api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
||||||
<p><a href="" class="button reload">Reload ↻</a></p>
|
<p><a href="" class="button reload">Reload ↻</a></p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
@ -259,7 +259,7 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>It seems at least one container was not able to start correctly and is currently restarting.</p>
|
<p>It seems at least one container was not able to start correctly and is currently restarting.</p>
|
||||||
<p>To break this endless loop, you can stop the containers below and investigate the issue in the container logs before starting the containers again.</p>
|
<p>To break this endless loop, you can stop the containers below and investigate the issue in the container logs before starting the containers again.</p>
|
||||||
<form method="POST" action="/api/docker/stop" class="xhr">
|
<form method="POST" action="api/docker/stop" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Stop containers" />
|
<input type="submit" value="Stop containers" />
|
||||||
|
|
@ -312,7 +312,7 @@
|
||||||
<p>You can find all changes <a target="_blank" href="https://github.com/nextcloud-releases/all-in-one/commits/main"><strong>here</strong></a></p>
|
<p>You can find all changes <a target="_blank" href="https://github.com/nextcloud-releases/all-in-one/commits/main"><strong>here</strong></a></p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form method="POST" action="/api/docker/stop" class="xhr">
|
<form method="POST" action="api/docker/stop" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Stop containers" />
|
<input type="submit" value="Stop containers" />
|
||||||
|
|
@ -327,31 +327,34 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if is_mastercontainer_update_available == true %}
|
{% if is_mastercontainer_update_available == true %}
|
||||||
<p>⚠️ A mastercontainer update is available. Please click on the button below to update it.</p>
|
<p>⚠️ A mastercontainer update is available. Please click on the button below to update it.</p>
|
||||||
<form method="POST" action="/api/docker/watchtower" class="xhr">
|
<form method="POST" action="api/docker/watchtower" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Update mastercontainer" />
|
<input type="submit" value="Update mastercontainer" />
|
||||||
</form>
|
</form>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if was_start_button_clicked == false %}
|
{% if was_start_button_clicked == false %}
|
||||||
<form method="POST" action="/api/docker/start" class="xhr">
|
<form method="POST" action="api/docker/start" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
<input id="base_path" type="hidden" name="base_path" value="">
|
||||||
{% if newMajorVersionString != '' %}
|
{% if newMajorVersionString != '' %}
|
||||||
<input type="checkbox" id="install_latest_major" name="install_latest_major"><label for="install_latest_major">Install Nextcloud Hub {{ newMajorVersionString }} (if unchecked, Nextcloud Hub 10 will get installed)</label><br>
|
<input type="checkbox" id="install_latest_major" name="install_latest_major"><label for="install_latest_major">Install Nextcloud Hub {{ newMajorVersionString }} (if unchecked, Nextcloud Hub 10 will get installed)</label><br>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<input type="submit" value="Download and start containers" />
|
<input type="submit" value="Download and start containers" />
|
||||||
</form>
|
</form>
|
||||||
{% elseif has_update_available == false %}
|
{% elseif has_update_available == false %}
|
||||||
<form method="POST" action="/api/docker/start" class="xhr">
|
<form method="POST" action="api/docker/start" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
<input id="base_path" type="hidden" name="base_path" value="">
|
||||||
<input type="submit" value="Start containers" />
|
<input type="submit" value="Start containers" />
|
||||||
</form>
|
</form>
|
||||||
{% else %}
|
{% else %}
|
||||||
<form method="POST" action="/api/docker/start" class="xhr">
|
<form method="POST" action="api/docker/start" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
<input id="base_path" type="hidden" name="base_path" value="">
|
||||||
{% if bypass_container_update == true %}
|
{% if bypass_container_update == true %}
|
||||||
<input type="hidden" name="bypass_container_update" value="{{bypass_container_update}}">
|
<input type="hidden" name="bypass_container_update" value="{{bypass_container_update}}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -376,7 +379,7 @@
|
||||||
<a target="_blank" href="https://borgbackup.readthedocs.io/en/stable/usage/general.html#repository-urls">remote borg repo url and submit it</a>.
|
<a target="_blank" href="https://borgbackup.readthedocs.io/en/stable/usage/general.html#repository-urls">remote borg repo url and submit it</a>.
|
||||||
You will be provided with an SSH public key for authorization at the remote afterwards.
|
You will be provided with an SSH public key for authorization at the remote afterwards.
|
||||||
</p>
|
</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<label>Local backup location</label> <input type="text" id="borg_backup_host_location" name="borg_backup_host_location" placeholder="/mnt/backup"/><br>
|
<label>Local backup location</label> <input type="text" id="borg_backup_host_location" name="borg_backup_host_location" placeholder="/mnt/backup"/><br>
|
||||||
<label>Remote borg repo</label> <input type="text" name="borg_remote_repo" placeholder="ssh://user@host:port/path/to/repo"/><br>
|
<label>Remote borg repo</label> <input type="text" name="borg_remote_repo" placeholder="ssh://user@host:port/path/to/repo"/><br>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
|
|
@ -393,13 +396,13 @@
|
||||||
{% if is_backup_container_running == false %}
|
{% if is_backup_container_running == false %}
|
||||||
<h2>Backup and restore</h2>
|
<h2>Backup and restore</h2>
|
||||||
{% if backup_exit_code > 0 %}
|
{% if backup_exit_code > 0 %}
|
||||||
<p><span class="status error"></span> Last {{ borg_backup_mode }} failed! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
<p><span class="status error"></span> Last {{ borg_backup_mode }} failed! (<a href="api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
||||||
{% if borg_backup_mode == "check" %}
|
{% if borg_backup_mode == "check" %}
|
||||||
<p>The backup check was not successful. This might indicate a corrupt archive (look at the logs). If that should be the case, you can try to fix it by following <a target="_blank" href="https://borgbackup.readthedocs.io/en/stable/faq.html#i-get-an-integrityerror-or-similar-what-now"><strong>this documentation</strong></a></p>
|
<p>The backup check was not successful. This might indicate a corrupt archive (look at the logs). If that should be the case, you can try to fix it by following <a target="_blank" href="https://borgbackup.readthedocs.io/en/stable/faq.html#i-get-an-integrityerror-or-similar-what-now"><strong>this documentation</strong></a></p>
|
||||||
<details>
|
<details>
|
||||||
<summary>Reveal repair option</summary>
|
<summary>Reveal repair option</summary>
|
||||||
<p>Below is the option to repair the integrity of your backup. <strong>Please note:</strong> Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)</p>
|
<p>Below is the option to repair the integrity of your backup. <strong>Please note:</strong> Please only use this after you have read the documentation above! (It will run the command 'borg check --repair' for you.)</p>
|
||||||
<form method="POST" action="/api/docker/backup-check-repair" class="xhr">
|
<form method="POST" action="api/docker/backup-check-repair" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Check and repair backup integrity" onclick="return confirm('Check and repair backup integrity? Are you sure that you want to check and repair the backup integrity? This should only be done after reading the mentioned documentation.')"/>
|
<input type="submit" value="Check and repair backup integrity" onclick="return confirm('Check and repair backup integrity? Are you sure that you want to check and repair the backup integrity? This should only be done after reading the mentioned documentation.')"/>
|
||||||
|
|
@ -417,7 +420,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<p>You may change the backup path again since the initial backup was not successful. After submitting the new value, you need to click on <strong>Create Backup</strong> to test the new value.</p>
|
<p>You may change the backup path again since the initial backup was not successful. After submitting the new value, you need to click on <strong>Create Backup</strong> to test the new value.</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<label>Local backup location</label> <input type="text" name="borg_backup_host_location" placeholder="/mnt/backup"/><br>
|
<label>Local backup location</label> <input type="text" name="borg_backup_host_location" placeholder="/mnt/backup"/><br>
|
||||||
<label>Remote borg repo</label> <input type="text" name="borg_remote_repo" placeholder="ssh://user@host:port/path/to/repo"/><br>
|
<label>Remote borg repo</label> <input type="text" name="borg_remote_repo" placeholder="ssh://user@host:port/path/to/repo"/><br>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
|
|
@ -427,9 +430,9 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elseif backup_exit_code == 0 %}
|
{% elseif backup_exit_code == 0 %}
|
||||||
{% if borg_backup_mode == "backup" %}
|
{% if borg_backup_mode == "backup" %}
|
||||||
<p><span class="status success"></span> Last {{ borg_backup_mode }} successful on {{ last_backup_time }} UTC! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
<p><span class="status success"></span> Last {{ borg_backup_mode }} successful on {{ last_backup_time }} UTC! (<a href="api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p><span class="status success"></span> Last {{ borg_backup_mode }} successful! (<a href="/api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
<p><span class="status success"></span> Last {{ borg_backup_mode }} successful! (<a href="api/docker/logs?id=nextcloud-aio-borgbackup" target="_blank">Logs</a>)</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -464,7 +467,7 @@
|
||||||
{% if isApacheStarting != true %}
|
{% if isApacheStarting != true %}
|
||||||
<h3>Backup creation</h3>
|
<h3>Backup creation</h3>
|
||||||
<p>Clicking on the button below will create a backup.</p>
|
<p>Clicking on the button below will create a backup.</p>
|
||||||
<form method="POST" action="/api/docker/backup" class="xhr">
|
<form method="POST" action="api/docker/backup" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Create backup" onclick="return confirm('Create backup? Are you sure that you want to create a backup? This will stop all running containers and create the backup.')" />
|
<input type="submit" value="Create backup" onclick="return confirm('Create backup? Are you sure that you want to create a backup? This will stop all running containers and create the backup.')" />
|
||||||
|
|
@ -479,7 +482,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
is wrong, you can reset it by clicking on the button below.
|
is wrong, you can reset it by clicking on the button below.
|
||||||
</p>
|
</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="hidden" name="delete_borg_backup_location_vars" value="yes"/>
|
<input type="hidden" name="delete_borg_backup_location_vars" value="yes"/>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -493,7 +496,7 @@
|
||||||
|
|
||||||
<h3>Backup check</h3>
|
<h3>Backup check</h3>
|
||||||
<p>Click on the button below to perform a backup integrity check. This is an option that verifies that your backup is intact. It shouldn't be needed in most situations.</p>
|
<p>Click on the button below to perform a backup integrity check. This is an option that verifies that your backup is intact. It shouldn't be needed in most situations.</p>
|
||||||
<form method="POST" action="/api/docker/backup-check" class="xhr">
|
<form method="POST" action="api/docker/backup-check" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="submit" value="Check backup integrity" onclick="return confirm('Check backup integrity? Are you sure that you want to check the backup? This can take a long time depending on the size of your backup.')" />
|
<input type="submit" value="Check backup integrity" onclick="return confirm('Check backup integrity? Are you sure that you want to check the backup? This can take a long time depending on the size of your backup.')" />
|
||||||
|
|
@ -501,7 +504,7 @@
|
||||||
|
|
||||||
<h3>Backup restore</h3>
|
<h3>Backup restore</h3>
|
||||||
<p>Choose the backup that you want to restore and click on the button below to restore the selected backup. This will overwrite all your files with the chosen backup so you should consider creating a backup first. You can run an integrity check before restoring your files but this shouldn't be needed in most situations. Please note that this will not restore additionally chosen backup directories! The restore process should be pretty fast as rsync, which only transfers changed files, is used to restore the chosen backup.</p>
|
<p>Choose the backup that you want to restore and click on the button below to restore the selected backup. This will overwrite all your files with the chosen backup so you should consider creating a backup first. You can run an integrity check before restoring your files but this shouldn't be needed in most situations. Please note that this will not restore additionally chosen backup directories! The restore process should be pretty fast as rsync, which only transfers changed files, is used to restore the chosen backup.</p>
|
||||||
<form method="POST" action="/api/docker/restore" class="xhr" id="restore_selection">
|
<form method="POST" action="api/docker/restore" class="xhr" id="restore_selection">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<select id="selected_restore_time" name="selected_restore_time" form="restore_selection">
|
<select id="selected_restore_time" name="selected_restore_time" form="restore_selection">
|
||||||
|
|
@ -515,7 +518,7 @@
|
||||||
<h3>Daily backup and automatic updates</h3>
|
<h3>Daily backup and automatic updates</h3>
|
||||||
{% if daily_backup_time == "" %}
|
{% if daily_backup_time == "" %}
|
||||||
<p>By entering a time below and submitting it, you can enable daily backups. It will create them at the entered time in 24h format. E.g. <strong>04:00</strong> will create backups at 4 am UTC and <strong>16:00</strong> at 4 pm UTC. When creating the backup, containers will be stopped and restarted after the backup is complete.</p>
|
<p>By entering a time below and submitting it, you can enable daily backups. It will create them at the entered time in 24h format. E.g. <strong>04:00</strong> will create backups at 4 am UTC and <strong>16:00</strong> at 4 pm UTC. When creating the backup, containers will be stopped and restarted after the backup is complete.</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="text" name="daily_backup_time" placeholder="04:00"/>
|
<input type="text" name="daily_backup_time" placeholder="04:00"/>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -529,7 +532,7 @@
|
||||||
Also your containers, the mastercontainer and, on Saturdays, your Nextcloud apps will be automatically updated.
|
Also your containers, the mastercontainer and, on Saturdays, your Nextcloud apps will be automatically updated.
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p>To change your backup time first disable Daily Backups, then enter your new backup time, and then re-enable them.</p>
|
<p>To change your backup time first disable Daily Backups, then enter your new backup time, and then re-enable them.</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="hidden" name="delete_daily_backup_time" value="yes"/>
|
<input type="hidden" name="delete_daily_backup_time" value="yes"/>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -539,7 +542,7 @@
|
||||||
|
|
||||||
<h3>Back up additional directories and docker volumes of your host</h3>
|
<h3>Back up additional directories and docker volumes of your host</h3>
|
||||||
<p>Below you can enter directories and docker volumes of your host that will be backed up into the same borg backup archive. Make sure to press the submit button after changing anything.</p>
|
<p>Below you can enter directories and docker volumes of your host that will be backed up into the same borg backup archive. Make sure to press the submit button after changing anything.</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<textarea id="additional_backup_directories" name="additional_backup_directories" rows="4" cols="50" placeholder="/directory/on/the/host my_custom_docker_volume">{{ additional_backup_directories }}</textarea>
|
<textarea id="additional_backup_directories" name="additional_backup_directories" rows="4" cols="50" placeholder="/directory/on/the/host my_custom_docker_volume">{{ additional_backup_directories }}</textarea>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -566,7 +569,7 @@
|
||||||
<details>
|
<details>
|
||||||
<summary>Click here to change your AIO passphrase</summary>
|
<summary>Click here to change your AIO passphrase</summary>
|
||||||
<p>You can change your AIO passphrase below:</p>
|
<p>You can change your AIO passphrase below:</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="password" autocomplete="current-password" name="current-master-password" placeholder="Your current AIO passphrase" id="current-master-password" oninput="showPassword('current-master-password')">
|
<input type="password" autocomplete="current-password" name="current-master-password" placeholder="Your current AIO passphrase" id="current-master-password" oninput="showPassword('current-master-password')">
|
||||||
<input type="password" autocomplete="new-password" name="new-master-password" placeholder="Your new AIO passphrase" id="new-master-password" oninput="showPassword('new-master-password')">
|
<input type="password" autocomplete="new-password" name="new-master-password" placeholder="Your new AIO passphrase" id="new-master-password" oninput="showPassword('new-master-password')">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
|
|
@ -592,7 +595,7 @@
|
||||||
{% if timezone == "" %}
|
{% if timezone == "" %}
|
||||||
<p>To get the correct time values for certain Nextcloud features, set the timezone for Nextcloud to the one that your users mainly use. Please note that this setting does not apply to the mastercontainer and any backup option.</p>
|
<p>To get the correct time values for certain Nextcloud features, set the timezone for Nextcloud to the one that your users mainly use. Please note that this setting does not apply to the mastercontainer and any backup option.</p>
|
||||||
<p>You can configure the timezone for Nextcloud below (Do not forget to submit the value!):</p>
|
<p>You can configure the timezone for Nextcloud below (Do not forget to submit the value!):</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="text" id="timezone" name="timezone" placeholder="Europe/Berlin" />
|
<input type="text" id="timezone" name="timezone" placeholder="Europe/Berlin" />
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -601,7 +604,7 @@
|
||||||
<p>You need to make sure that the timezone that you enter is valid. An example is <strong>Europe/Berlin</strong>. You can get valid values by looking at the 'TZ identifier' column of this list: <a target="_blank" href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List"><strong>click here</strong></a>. The default is <strong>Etc/UTC</strong> if nothing is entered.</p>
|
<p>You need to make sure that the timezone that you enter is valid. An example is <strong>Europe/Berlin</strong>. You can get valid values by looking at the 'TZ identifier' column of this list: <a target="_blank" href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List"><strong>click here</strong></a>. The default is <strong>Etc/UTC</strong> if nothing is entered.</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>The timezone for Nextcloud is currently set to <strong>{{ timezone }}</strong>. You can change the timezone by clicking on the button below.</p>
|
<p>The timezone for Nextcloud is currently set to <strong>{{ timezone }}</strong>. You can change the timezone by clicking on the button below.</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="hidden" name="delete_timezone" value="yes"/>
|
<input type="hidden" name="delete_timezone" value="yes"/>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -620,6 +623,8 @@
|
||||||
<script type="text/javascript" src="before-unload.js"></script>
|
<script type="text/javascript" src="before-unload.js"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
<script type="text/javascript" src="base_path.js"></script>
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<details>
|
<details>
|
||||||
<summary>Show/Hide available Community Containers</summary>
|
<summary>Show/Hide available Community Containers</summary>
|
||||||
<form id="community-form" method="POST" action="/api/configuration" class="xhr">
|
<form id="community-form" method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="hidden" name="community-form" value="community-form">
|
<input type="hidden" name="community-form" value="community-form">
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
<p><strong>Please note:</strong> Make sure to save your changes by clicking <strong>Save changes</strong> below the list of optional containers. The changes will not be auto-saved.</p>
|
<p><strong>Please note:</strong> Make sure to save your changes by clicking <strong>Save changes</strong> below the list of optional containers. The changes will not be auto-saved.</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form id="options-form" method="POST" action="/api/configuration" class="xhr">
|
<form id="options-form" method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
<input type="hidden" name="options-form" value="options-form">
|
<input type="hidden" name="options-form" value="options-form">
|
||||||
|
|
@ -160,7 +160,7 @@
|
||||||
|
|
||||||
{% if collabora_dictionaries == "" %}
|
{% if collabora_dictionaries == "" %}
|
||||||
<p>In order to get the correct dictionaries in Collabora, you may configure the dictionaries below:</p>
|
<p>In order to get the correct dictionaries in Collabora, you may configure the dictionaries below:</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="text" name="collabora_dictionaries" placeholder="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru" />
|
<input type="text" name="collabora_dictionaries" placeholder="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru" />
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -169,7 +169,7 @@
|
||||||
<p>You need to make sure that the dictionaries that you enter are valid. An example is <strong>de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru</strong>.</p>
|
<p>You need to make sure that the dictionaries that you enter are valid. An example is <strong>de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru</strong>.</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>The dictionaries for Collabora are currently set to <strong>{{ collabora_dictionaries }}</strong>. You can reset them again by clicking on the button below.</p>
|
<p>The dictionaries for Collabora are currently set to <strong>{{ collabora_dictionaries }}</strong>. You can reset them again by clicking on the button below.</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="hidden" name="delete_collabora_dictionaries" value="yes"/>
|
<input type="hidden" name="delete_collabora_dictionaries" value="yes"/>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -182,7 +182,7 @@
|
||||||
{% if collabora_additional_options == "" %}
|
{% if collabora_additional_options == "" %}
|
||||||
<p>You can configure additional options for collabora below.</p>
|
<p>You can configure additional options for collabora below.</p>
|
||||||
<p>(This can be used for configuring the net.content_security_policy and more. Make sure to submit the value!)</p>
|
<p>(This can be used for configuring the net.content_security_policy and more. Make sure to submit the value!)</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="text" name="collabora_additional_options" />
|
<input type="text" name="collabora_additional_options" />
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
@ -191,7 +191,7 @@
|
||||||
<p>You need to make sure that the options that you enter are valid. An example is <strong>--o:net.content_security_policy=frame-ancestors *.example.com:*;</strong>.</p>
|
<p>You need to make sure that the options that you enter are valid. An example is <strong>--o:net.content_security_policy=frame-ancestors *.example.com:*;</strong>.</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>The additioinal options for Collabora are currently set to <strong>{{ collabora_additional_options }}</strong>. You can reset them again by clicking on the button below.</p>
|
<p>The additioinal options for Collabora are currently set to <strong>{{ collabora_additional_options }}</strong>. You can reset them again by clicking on the button below.</p>
|
||||||
<form method="POST" action="/api/configuration" class="xhr">
|
<form method="POST" action="api/configuration" class="xhr">
|
||||||
<input type="hidden" name="delete_collabora_additional_options" value="yes"/>
|
<input type="hidden" name="delete_collabora_additional_options" value="yes"/>
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>AIO</title>
|
<title>AIO</title>
|
||||||
<link rel="stylesheet" href="/style.css?v6" media="all" />
|
<link rel="stylesheet" href="style.css?v6" media="all" />
|
||||||
<link rel="icon" href="/img/favicon.png">
|
<link rel="icon" href="img/favicon.png">
|
||||||
<script type="text/javascript" src="forms.js"></script>
|
<script type="text/javascript" src="forms.js"></script>
|
||||||
<script type="text/javascript" src="toggle-dark-mode.js"></script>
|
<script type="text/javascript" src="toggle-dark-mode.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,14 @@
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="login">
|
<div class="login">
|
||||||
<svg class="nextcloud-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 142 100" width="142" height="100">
|
<svg class="nextcloud-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 142 100" width="142" height="100">
|
||||||
<use href="/img/nextcloud-logo.svg#logo"></use>
|
<use href="img/nextcloud-logo.svg#logo"></use>
|
||||||
<use href="/img/nextcloud-logo.svg#Nextcloud"></use>
|
<use href="img/nextcloud-logo.svg#Nextcloud"></use>
|
||||||
<text x="10" y="50" fill="var(--color-nextcloud-logo)" class="fallback-text">Nextcloud Logo</text>
|
<text x="10" y="50" fill="var(--color-nextcloud-logo)" class="fallback-text">Nextcloud Logo</text>
|
||||||
</svg>
|
</svg>
|
||||||
<h1>Nextcloud AIO Login</h1>
|
<h1>Nextcloud AIO Login</h1>
|
||||||
{% if is_login_allowed == true %}
|
{% if is_login_allowed == true %}
|
||||||
<p>Log in using your Nextcloud AIO passphrase:</p>
|
<p>Log in using your Nextcloud AIO passphrase:</p>
|
||||||
<form method="POST" action="/api/auth/login" class="xhr">
|
<form method="POST" action="api/auth/login" class="xhr">
|
||||||
<input type="password" autocomplete="current-password" name="password" placeholder="Password" id="master-password" oninput="showPassword('master-password')">
|
<input type="password" autocomplete="current-password" name="password" placeholder="Password" id="master-password" oninput="showPassword('master-password')">
|
||||||
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
<input type="hidden" name="{{csrf.keys.name}}" value="{{csrf.name}}">
|
||||||
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
<input type="hidden" name="{{csrf.keys.value}}" value="{{csrf.value}}">
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,14 @@
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="login">
|
<div class="login">
|
||||||
<svg class="nextcloud-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 142 100" width="142" height="100">
|
<svg class="nextcloud-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 142 100" width="142" height="100">
|
||||||
<use href="/img/nextcloud-logo.svg#logo"></use>
|
<use href="img/nextcloud-logo.svg#logo"></use>
|
||||||
<use href="/img/nextcloud-logo.svg#Nextcloud"></use>
|
<use href="img/nextcloud-logo.svg#Nextcloud"></use>
|
||||||
<text x="10" y="50" fill="var(--color-nextcloud-logo)" class="fallback-text">Nextcloud Logo</text>
|
<text x="10" y="50" fill="var(--color-nextcloud-logo)" class="fallback-text">Nextcloud Logo</text>
|
||||||
</svg>
|
</svg>
|
||||||
<h1>All-in-One setup</h1>
|
<h1>All-in-One setup</h1>
|
||||||
<p>The official Nextcloud installation method. Nextcloud All-in-One provides easy deployment and maintenance with most features included in this one Nextcloud instance.</p>
|
<p>The official Nextcloud installation method. Nextcloud All-in-One provides easy deployment and maintenance with most features included in this one Nextcloud instance.</p>
|
||||||
<p>⚠️ <strong>Please note down the passphrase to access the AIO interface and don't lose it!</strong></p>
|
<p>⚠️ <strong>Please note down the passphrase to access the AIO interface and don't lose it!</strong></p>
|
||||||
<strong>Passphrase</strong><br/><span id="initial-password" class="monospace">{{ password }}</span><br>
|
<strong>Passphrase</strong><br/><span id="initial-password" class="monospace">{{ password }}</span><br>
|
||||||
<a href="/" class="button" target="_blank">Open Nextcloud AIO login ↗</a>
|
<a href="." class="button" target="_blank">Open Nextcloud AIO login ↗</a>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue