246 lines
16 KiB
Twig
246 lines
16 KiB
Twig
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<title>XBackBone Installer</title>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
<meta name="description" content="XBackBone Installer">
|
|
|
|
<link href="../static/bootstrap/css/bootstrap.min.css?{{ 'now'|date('U') }}" rel="stylesheet">
|
|
<link href="../static/fontawesome/css/all.min.css?{{ 'now'|date('U') }}" rel="stylesheet">
|
|
<link href="../static/app/app.css?{{ 'now'|date('U') }}" rel="stylesheet">
|
|
|
|
<script src="../static/jquery/jquery.min.js?{{ 'now'|date('U') }}"></script>
|
|
<script src="../static/bootstrap/js/bootstrap.bundle.min.js?{{ 'now'|date('U') }}"></script>
|
|
<script src="installer.js?{{ 'now'|date('U') }}"></script>
|
|
</head>
|
|
<body class="bg-light">
|
|
<div class="container">
|
|
<div class="mt-4">
|
|
{% include 'comp/alert.twig' %}
|
|
</div>
|
|
<div class="row justify-content-center">
|
|
<div class="col-md-8">
|
|
<div class="card mt-3 shadow-sm">
|
|
<div class="card-header">Install XBackBone</div>
|
|
<div class="card-body">
|
|
<form method="post" onsubmit="$('#modalLoading').modal({backdrop: 'static', keyboard: false})">
|
|
{% if not installed %}
|
|
<div class="form-group row">
|
|
<label for="base_url" class="col-sm-3 col-form-label">Base URL</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control" id="base_url" name="base_url" value="{{ config.base_url }}" autocomplete="off" required>
|
|
<small>No trailing slash.</small>
|
|
</div>
|
|
</div>
|
|
<hr>
|
|
<div class="form-group row">
|
|
<label for="connection" class="col-sm-3 col-form-label">SQL Engine</label>
|
|
<div class="col-sm-9">
|
|
<select name="connection" id="connection" required class="form-control">
|
|
<option value="sqlite" selected>SQLite</option>
|
|
<option value="mysql">MySQL</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row">
|
|
<label for="dsn" class="col-sm-3 col-form-label">Database Source Name (DSN)</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control" id="dsn" name="dsn" value="{{ config.db.dsn }}" autocomplete="off" required>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row hook-database">
|
|
<label for="db_user" class="col-sm-3 col-form-label">Database Username</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-database-input" id="db_user" name="db_user" value="db_user" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row hook-database">
|
|
<label for="db_password" class="col-sm-3 col-form-label">Database Password</label>
|
|
<div class="col-sm-9">
|
|
<input type="password" class="form-control hook-database-input" id="db_password" name="db_password" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<hr>
|
|
<div class="form-group row">
|
|
<label for="storage_driver" class="col-sm-3 col-form-label">Storage Driver</label>
|
|
<div class="col-sm-9">
|
|
<select id="storage_driver" name="storage_driver" class="form-control" required>
|
|
<option value="local">Local Storage</option>
|
|
<option value="ftp">FTP/FTPS</option>
|
|
<option value="s3">Amazon S3 (or compatible)</option>
|
|
<option value="google-cloud">Google Cloud Storage</option>
|
|
<option value="azure">Azure Blob Storage</option>
|
|
<option value="dropbox">Dropbox</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_path" class="col-sm-3 col-form-label">Storage path root</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_path" name="storage_path" autocomplete="off" data-default-local="{{ config.storage.path }}">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_key" class="col-sm-3 col-form-label">AWS S3 key</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_key" name="storage_key" placeholder="your-key" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_secret" class="col-sm-3 col-form-label">AWS S3 secret</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_secret" name="storage_secret" placeholder="your-secret" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_region" class="col-sm-3 col-form-label">AWS S3 region</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_region" name="storage_region" placeholder="your-region" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_region" class="col-sm-3 col-form-label">AWS S3 endpoint</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_endpoint" name="storage_endpoint" placeholder="optional (for S3-compatible services)" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_token" class="col-sm-3 col-form-label">Dropbox token</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_token" name="storage_token" placeholder="authorization-token" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_host" class="col-sm-3 col-form-label">FTP host</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_host" name="storage_host" placeholder="127.0.0.1" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_username" class="col-sm-3 col-form-label">FTP username</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_username" name="storage_username" placeholder="username" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_password" class="col-sm-3 col-form-label">FTP password</label>
|
|
<div class="col-sm-9">
|
|
<input type="password" class="form-control hook-storage-input" id="storage_password" name="storage_password" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_port" class="col-sm-3 col-form-label">FTP port</label>
|
|
<div class="col-sm-9">
|
|
<input type="number" min="0" max="65535" class="form-control hook-storage-input" id="storage_port" name="storage_port" placeholder="21" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_passive" class="col-sm-3 col-form-label">FTP passive mode</label>
|
|
<div class="col-sm-9">
|
|
<select name="storage_passive" id="storage_passive" class="form-control hook-storage-input">
|
|
<option value="1" selected>Yes</option>
|
|
<option value="0">No</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_ssl" class="col-sm-3 col-form-label">FTP SSL enabled</label>
|
|
<div class="col-sm-9">
|
|
<select name="storage_ssl" id="storage_ssl" class="form-control hook-storage-input">
|
|
<option value="1">Yes</option>
|
|
<option value="0" selected>No</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_project_id" class="col-sm-3 col-form-label">Google project id</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_project_id" name="storage_project_id" placeholder="your-project-id" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_key_path" class="col-sm-3 col-form-label">Google key path</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_key_path" name="storage_key_path" placeholder="/path/to/service-account.json" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_account_name" class="col-sm-3 col-form-label">Azure storage account name</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_account_name" name="storage_account_name" placeholder="your-storage-account-name" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_account_key" class="col-sm-3 col-form-label">Azure storage account key</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_account_key" name="storage_account_key" placeholder="Account (Access) Key" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_container_name" class="col-sm-3 col-form-label">Azure storage container name</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_container_name" name="storage_container_name" placeholder="your-blob-container-name" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row hook-storage">
|
|
<label for="storage_bucket" class="col-sm-3 col-form-label">Storage bucket</label>
|
|
<div class="col-sm-9">
|
|
<input type="text" class="form-control hook-storage-input" id="storage_bucket" name="storage_bucket" placeholder="your-bucket-name" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
<hr>
|
|
<div class="form-group row">
|
|
<label for="email" class="col-sm-3 col-form-label">Admin email</label>
|
|
<div class="col-sm-9">
|
|
<input type="email" class="form-control" id="email" placeholder="email@example.com" name="email" autocomplete="off" required>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row">
|
|
<label for="password" class="col-sm-3 col-form-label">Admin password</label>
|
|
<div class="col-sm-9">
|
|
<input type="password" class="form-control" id="password" placeholder="Password" name="password" autocomplete="off" required>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row justify-content-md-end">
|
|
<div class="col-sm-9">
|
|
<button type="submit" class="btn btn-outline-success">
|
|
<i class="fas fa-save fa-fw"></i> Install
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
{% else %}
|
|
<div class="form-group row">
|
|
<div class="col-sm-12 d-flex justify-content-center">
|
|
<button type="submit" class="btn btn-lg btn-outline-primary">
|
|
<i class="fas fa-sync fa-fw"></i> Finalize update
|
|
</button>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal" id="modalLoading" tabindex="-1" role="dialog" aria-hidden="true">
|
|
<div class="modal-dialog modal-sm">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h6 class="modal-title">Please wait...</h6>
|
|
</div>
|
|
<div class="modal-body text-center">
|
|
<i class="fas fa-10x fa-spinner fa-pulse"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|