cleanup + fixes
This commit is contained in:
@@ -124,7 +124,7 @@ export async function getApplicationStatus(request: FastifyRequest<OnlyId>) {
|
|||||||
for (const container of containersArray) {
|
for (const container of containersArray) {
|
||||||
let isRunning = false;
|
let isRunning = false;
|
||||||
let isExited = false;
|
let isExited = false;
|
||||||
let isRestarting = false;
|
let isRestarting = false;
|
||||||
const containerObj = JSON.parse(container);
|
const containerObj = JSON.parse(container);
|
||||||
const status = containerObj.State
|
const status = containerObj.State
|
||||||
if (status === 'running') {
|
if (status === 'running') {
|
||||||
|
@@ -1,93 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
import Select from 'svelte-select';
|
|
||||||
export let service: any;
|
|
||||||
export let readOnly: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Appwrite</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="opensslKeyV1">Encryption Key</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="opensslKeyV1"
|
|
||||||
id="opensslKeyV1"
|
|
||||||
isPasswordField
|
|
||||||
value={service.appwrite.opensslKeyV1}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="executorSecret">Executor Secret</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="executorSecret"
|
|
||||||
id="executorSecret"
|
|
||||||
isPasswordField
|
|
||||||
value={service.appwrite.executorSecret}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">MariaDB</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="mariadbUser">{$t('forms.username')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="mariadbUser"
|
|
||||||
id="mariadbUser"
|
|
||||||
value={service.appwrite.mariadbUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="mariadbPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mariadbPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="mariadbPassword"
|
|
||||||
value={service.appwrite.mariadbPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="mariadbRootUser">Root User</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="mariadbRootUser"
|
|
||||||
id="mariadbRootUser"
|
|
||||||
value={service.appwrite.mariadbRootUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="mariadbRootUserPassword">Root Password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mariadbRootUserPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="mariadbRootUserPassword"
|
|
||||||
value={service.appwrite.mariadbRootUserPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="mariadbDatabase">{$t('index.database')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="mariadbDatabase"
|
|
||||||
id="mariadbDatabase"
|
|
||||||
value={service.appwrite.mariadbDatabase}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -1,194 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
import Select from 'svelte-select';
|
|
||||||
export let service: any;
|
|
||||||
export let readOnly: any;
|
|
||||||
|
|
||||||
let mailgunRegions = [
|
|
||||||
{
|
|
||||||
value: 'EU',
|
|
||||||
label: 'EU'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'US',
|
|
||||||
label: 'US'
|
|
||||||
}
|
|
||||||
];
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Fider</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="jwtSecret">JWT Secret</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="jwtSecret"
|
|
||||||
id="jwtSecret"
|
|
||||||
isPasswordField
|
|
||||||
value={service.fider.jwtSecret}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailNoreply">Noreply Email</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="emailNoreply"
|
|
||||||
id="emailNoreply"
|
|
||||||
type="email"
|
|
||||||
required
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
bind:value={service.fider.emailNoreply}
|
|
||||||
placeholder="{$t('forms.eg')}: noreply@yourdomain.com"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Email</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailMailgunApiKey">Mailgun API Key</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="emailMailgunApiKey"
|
|
||||||
id="emailMailgunApiKey"
|
|
||||||
isPasswordField
|
|
||||||
bind:value={service.fider.emailMailgunApiKey}
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
placeholder="{$t('forms.eg')}: key-yourkeygoeshere"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailMailgunDomain">Mailgun Domain</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="emailMailgunDomain"
|
|
||||||
id="emailMailgunDomain"
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
bind:value={service.fider.emailMailgunDomain}
|
|
||||||
placeholder="{$t('forms.eg')}: yourdomain.com"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailMailgunRegion">Mailgun Region</label>
|
|
||||||
<div class="custom-select-wrapper">
|
|
||||||
<Select
|
|
||||||
id="baseBuildImages"
|
|
||||||
items={mailgunRegions}
|
|
||||||
showIndicator
|
|
||||||
on:select={(event) => (service.fider.emailMailgunRegion = event.detail.value)}
|
|
||||||
value={service.fider.emailMailgunRegion || 'EU'}
|
|
||||||
isClearable={false}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex space-x-1 py-5 font-bold">
|
|
||||||
<div class="text-lg">Or</div>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailSmtpHost">SMTP Host</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="emailSmtpHost"
|
|
||||||
id="emailSmtpHost"
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
bind:value={service.fider.emailSmtpHost}
|
|
||||||
placeholder="{$t('forms.eg')}: smtp.yourdomain.com"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailSmtpPort">SMTP Port</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="emailSmtpPort"
|
|
||||||
id="emailSmtpPort"
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
bind:value={service.fider.emailSmtpPort}
|
|
||||||
placeholder="{$t('forms.eg')}: 587"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailSmtpUser">SMTP User</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="emailSmtpUser"
|
|
||||||
id="emailSmtpUser"
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
bind:value={service.fider.emailSmtpUser}
|
|
||||||
placeholder="{$t('forms.eg')}: user@yourdomain.com"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailSmtpPassword">SMTP Password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="emailSmtpPassword"
|
|
||||||
id="emailSmtpPassword"
|
|
||||||
isPasswordField
|
|
||||||
bind:value={service.fider.emailSmtpPassword}
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
placeholder="{$t('forms.eg')}: s0m3p4ssw0rd"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailSmtpEnableStartTls">SMTP Start TLS</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="emailSmtpEnableStartTls"
|
|
||||||
id="emailSmtpEnableStartTls"
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
bind:value={service.fider.emailSmtpEnableStartTls}
|
|
||||||
placeholder="{$t('forms.eg')}: true"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">PostgreSQL</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="postgresqlUser">{$t('forms.username')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlUser"
|
|
||||||
id="postgresqlUser"
|
|
||||||
value={service.fider.postgresqlUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="postgresqlPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="postgresqlPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="postgresqlPassword"
|
|
||||||
value={service.fider.postgresqlPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="postgresqlDatabase">{$t('index.database')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlDatabase"
|
|
||||||
id="postgresqlDatabase"
|
|
||||||
value={service.fider.postgresqlDatabase}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -1,101 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import Explainer from '$lib/components/Explainer.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
export let readOnly: any;
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">
|
|
||||||
Ghost <Explainer
|
|
||||||
explanation="You can change these values in the <span class='text-settings'>Ghost admin panel<span>."
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2">
|
|
||||||
<div class="grid grid-cols-2 items-center lg:px-10 px-2">
|
|
||||||
<label for="email">{$t('forms.default_email_address')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="email"
|
|
||||||
id="email"
|
|
||||||
disabled
|
|
||||||
readonly
|
|
||||||
placeholder={$t('forms.email')}
|
|
||||||
value={service.ghost.defaultEmail}
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center lg:px-10 px-2">
|
|
||||||
<label for="defaultPassword">{$t('forms.default_password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="defaultPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="defaultPassword"
|
|
||||||
value={service.ghost.defaultPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">MariaDB</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2">
|
|
||||||
<div class="grid grid-cols-2 items-center lg:px-10 px-2">
|
|
||||||
<label for="mariadbUser">{$t('forms.username')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="mariadbUser"
|
|
||||||
id="mariadbUser"
|
|
||||||
value={service.ghost.mariadbUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center lg:px-10 px-2">
|
|
||||||
<label for="mariadbPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mariadbPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="mariadbPassword"
|
|
||||||
value={service.ghost.mariadbPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center lg:px-10 px-2">
|
|
||||||
<label for="mariadbDatabase">{$t('index.database')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="mariadbDatabase"
|
|
||||||
id="mariadbDatabase"
|
|
||||||
required
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
bind:value={service.ghost.mariadbDatabase}
|
|
||||||
placeholder="{$t('forms.eg')}: ghost_db"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center lg:px-10 px-2">
|
|
||||||
<label for="mariadbRootUser">{$t('forms.root_db_user')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mariadbRootUser"
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="mariadbRootUser"
|
|
||||||
value={service.ghost.mariadbRootUser}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center lg:px-10 px-2">
|
|
||||||
<label for="mariadbRootUserPassword">{$t('forms.root_db_password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mariadbRootUserPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="mariadbRootUserPassword"
|
|
||||||
value={service.ghost.mariadbRootUserPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -1,240 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { addToast, status } from '$lib/store';
|
|
||||||
import Setting from '$lib/components/Setting.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
import { post } from '$lib/api';
|
|
||||||
import { page } from '$app/stores';
|
|
||||||
import { errorNotification } from '$lib/common';
|
|
||||||
export let service: any;
|
|
||||||
|
|
||||||
const { id } = $page.params;
|
|
||||||
let loading = false;
|
|
||||||
|
|
||||||
async function changeSettings(name: any) {
|
|
||||||
if (loading || $status.service.isRunning) return;
|
|
||||||
|
|
||||||
let enableOpenUserRegistration = service.glitchTip.enableOpenUserRegistration;
|
|
||||||
let emailSmtpUseSsl = service.glitchTip.emailSmtpUseSsl;
|
|
||||||
let emailSmtpUseTls = service.glitchTip.emailSmtpUseTls;
|
|
||||||
|
|
||||||
loading = true;
|
|
||||||
if (name === 'enableOpenUserRegistration') {
|
|
||||||
enableOpenUserRegistration = !enableOpenUserRegistration;
|
|
||||||
}
|
|
||||||
if (name === 'emailSmtpUseSsl') {
|
|
||||||
emailSmtpUseSsl = !emailSmtpUseSsl;
|
|
||||||
}
|
|
||||||
if (name === 'emailSmtpUseTls') {
|
|
||||||
emailSmtpUseTls = !emailSmtpUseTls;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
await post(`/services/${id}/glitchtip/settings`, {
|
|
||||||
enableOpenUserRegistration,
|
|
||||||
emailSmtpUseSsl,
|
|
||||||
emailSmtpUseTls
|
|
||||||
});
|
|
||||||
service.glitchTip.emailSmtpUseTls = emailSmtpUseTls;
|
|
||||||
service.glitchTip.emailSmtpUseSsl = emailSmtpUseSsl;
|
|
||||||
service.glitchTip.enableOpenUserRegistration = enableOpenUserRegistration;
|
|
||||||
return addToast({
|
|
||||||
message: 'Settings updated.',
|
|
||||||
type: 'success'
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
return errorNotification(error);
|
|
||||||
} finally {
|
|
||||||
loading = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">GlitchTip</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<Setting
|
|
||||||
id="enableOpenUserRegistration"
|
|
||||||
bind:setting={service.glitchTip.enableOpenUserRegistration}
|
|
||||||
{loading}
|
|
||||||
disabled={$status.service.isRunning}
|
|
||||||
on:click={() => changeSettings('enableOpenUserRegistration')}
|
|
||||||
title="Enable Open User Registration"
|
|
||||||
description={''}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Email Settings</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<Setting
|
|
||||||
id="emailSmtpUseTls"
|
|
||||||
bind:setting={service.glitchTip.emailSmtpUseTls}
|
|
||||||
{loading}
|
|
||||||
disabled={$status.service.isRunning}
|
|
||||||
on:click={() => changeSettings('emailSmtpUseTls')}
|
|
||||||
title="Use TLS for SMTP"
|
|
||||||
description={''}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<Setting
|
|
||||||
id="emailSmtpUseSsl"
|
|
||||||
bind:setting={service.glitchTip.emailSmtpUseSsl}
|
|
||||||
{loading}
|
|
||||||
disabled={$status.service.isRunning}
|
|
||||||
on:click={() => changeSettings('emailSmtpUseSsl')}
|
|
||||||
title="Use SSL for SMTP"
|
|
||||||
description={''}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="defaultEmailFrom">Default Email From</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
required
|
|
||||||
name="defaultEmailFrom"
|
|
||||||
id="defaultEmailFrom"
|
|
||||||
bind:value={service.glitchTip.defaultEmailFrom}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailSmtpHost">SMTP Host</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="emailSmtpHost"
|
|
||||||
id="emailSmtpHost"
|
|
||||||
bind:value={service.glitchTip.emailSmtpHost}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailSmtpPort">SMTP Port</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="emailSmtpPort"
|
|
||||||
id="emailSmtpPort"
|
|
||||||
bind:value={service.glitchTip.emailSmtpPort}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailSmtpUser">SMTP User</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="emailSmtpUser"
|
|
||||||
id="emailSmtpUser"
|
|
||||||
bind:value={service.glitchTip.emailSmtpUser}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailSmtpPassword">SMTP Password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="emailSmtpPassword"
|
|
||||||
id="emailSmtpPassword"
|
|
||||||
bind:value={service.glitchTip.emailSmtpPassword}
|
|
||||||
isPasswordField
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="emailBackend">Email Backend</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="emailBackend"
|
|
||||||
id="emailBackend"
|
|
||||||
bind:value={service.glitchTip.emailBackend}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="mailgunApiKey">Mailgun API Key</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="mailgunApiKey"
|
|
||||||
id="mailgunApiKey"
|
|
||||||
bind:value={service.glitchTip.mailgunApiKey}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="sendgridApiKey">SendGrid API Key</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="sendgridApiKey"
|
|
||||||
id="sendgridApiKey"
|
|
||||||
bind:value={service.glitchTip.sendgridApiKey}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex space-x-1 py-2 font-bold">
|
|
||||||
<div class="subtitle">Default User & Superuser</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="defaultEmail">{$t('forms.email')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="defaultEmail"
|
|
||||||
id="defaultEmail"
|
|
||||||
bind:value={service.glitchTip.defaultEmail}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="defaultUsername">{$t('forms.username')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="defaultUsername"
|
|
||||||
id="defaultUsername"
|
|
||||||
bind:value={service.glitchTip.defaultUsername}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="defaultPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="defaultPassword"
|
|
||||||
id="defaultPassword"
|
|
||||||
bind:value={service.glitchTip.defaultPassword}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
isPasswordField
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">PostgreSQL</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="postgresqlUser">{$t('forms.username')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlUser"
|
|
||||||
id="postgresqlUser"
|
|
||||||
bind:value={service.glitchTip.postgresqlUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="postgresqlPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="postgresqlPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="postgresqlPassword"
|
|
||||||
bind:value={service.glitchTip.postgresqlPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="postgresqlDatabase">{$t('index.database')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlDatabase"
|
|
||||||
id="postgresqlDatabase"
|
|
||||||
bind:value={service.glitchTip.postgresqlDatabase}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -1,63 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Hasura</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="graphQLAdminPassword">GraphQL Admin Password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="graphQLAdminPassword"
|
|
||||||
id="graphQLAdminPassword"
|
|
||||||
isPasswordField
|
|
||||||
value={service.hasura.graphQLAdminPassword}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="px-4">
|
|
||||||
Hasura Console is <span class="text-warning">not enabled by default</span> for security reasons.
|
|
||||||
<br />To enable it, add the following secret:<br /><br />
|
|
||||||
<code>HASURA_GRAPHQL_ENABLE_CONSOLE=true</code>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">PostgreSQL</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="postgresqlUser">{$t('forms.username')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlUser"
|
|
||||||
id="postgresqlUser"
|
|
||||||
value={service.hasura.postgresqlUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="postgresqlPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="postgresqlPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="postgresqlPassword"
|
|
||||||
value={service.hasura.postgresqlPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="postgresqlDatabase">{$t('index.database')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlDatabase"
|
|
||||||
id="postgresqlDatabase"
|
|
||||||
value={service.hasura.postgresqlDatabase}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -1,20 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">MeiliSearch</div>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="masterKey">{$t('forms.admin_api_key')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="masterKey"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="masterKey"
|
|
||||||
value={service.meiliSearch.masterKey}
|
|
||||||
/>
|
|
||||||
</div>
|
|
@@ -1,49 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">MinIO</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="rootUser">{$t('forms.root_user')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="rootUser"
|
|
||||||
id="rootUser"
|
|
||||||
placeholder={$t('forms.username')}
|
|
||||||
value={service.minio.rootUser}
|
|
||||||
disabled
|
|
||||||
readonly
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="rootUserPassword">{$t('forms.roots_password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="rootUserPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="rootUserPassword"
|
|
||||||
value={service.minio.rootUserPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{#if !service.minio.apiFqdn}
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label for="publicPort">{$t('forms.api_port')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="publicPort"
|
|
||||||
id="publicPort"
|
|
||||||
value={service.minio.publicPort}
|
|
||||||
disabled
|
|
||||||
readonly
|
|
||||||
placeholder={$t('forms.generated_automatically_after_start')}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
@@ -1,104 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
export let readOnly: any;
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Moodle</div>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="email">{$t('forms.default_email_address')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="email"
|
|
||||||
id="email"
|
|
||||||
required
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
placeholder={$t('forms.email')}
|
|
||||||
value={service.moodle.defaultEmail}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="defaultUsername">Default Username</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="defaultUsername"
|
|
||||||
required
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
name="defaultUsername"
|
|
||||||
value={service.moodle.defaultUsername}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="defaultPassword">{$t('forms.default_password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="defaultPassword"
|
|
||||||
isPasswordField
|
|
||||||
required
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
name="defaultPassword"
|
|
||||||
value={service.moodle.defaultPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">MariaDB</div>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="mariadbUser">{$t('forms.username')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="mariadbUser"
|
|
||||||
id="mariadbUser"
|
|
||||||
value={service.moodle.mariadbUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="mariadbPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mariadbPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="mariadbPassword"
|
|
||||||
value={service.moodle.mariadbPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="mariadbDatabase">{$t('index.database')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="mariadbDatabase"
|
|
||||||
id="mariadbDatabase"
|
|
||||||
required
|
|
||||||
readonly={readOnly}
|
|
||||||
disabled={readOnly}
|
|
||||||
bind:value={service.moodle.mariadbDatabase}
|
|
||||||
placeholder="{$t('forms.eg')}: moodle_db"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="mariadbRootUser">{$t('forms.root_db_user')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mariadbRootUser"
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="mariadbRootUser"
|
|
||||||
value={service.moodle.mariadbRootUser}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="mariadbRootUserPassword">{$t('forms.root_db_password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mariadbRootUserPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="mariadbRootUserPassword"
|
|
||||||
value={service.moodle.mariadbRootUserPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
@@ -1,126 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
export let service: any;
|
|
||||||
export let readOnly: any;
|
|
||||||
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import Explainer from '$lib/components/Explainer.svelte';
|
|
||||||
import { appSession, status } from '$lib/store';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
import ServiceStatus from '../ServiceStatus.svelte';
|
|
||||||
let serviceStatus = {
|
|
||||||
isExited: false,
|
|
||||||
isRunning: false,
|
|
||||||
isRestarting: false,
|
|
||||||
isStopped: false
|
|
||||||
};
|
|
||||||
|
|
||||||
$: if (Object.keys($status.service.statuses).length > 0) {
|
|
||||||
let { isExited, isRunning, isRestarting } = $status.service.statuses[service.id].status;
|
|
||||||
serviceStatus.isExited = isExited;
|
|
||||||
serviceStatus.isRunning = isRunning;
|
|
||||||
serviceStatus.isRestarting = isRestarting;
|
|
||||||
serviceStatus.isStopped = !isExited && !isRunning && !isRestarting;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- <div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Plausible Analytics</div>
|
|
||||||
<ServiceStatus id={service.id} />
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="scriptName"
|
|
||||||
>Script Name <Explainer
|
|
||||||
explanation="Useful if you would like to rename the collector script to prevent it blocked by AdBlockers."
|
|
||||||
/></label
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="scriptName"
|
|
||||||
id="scriptName"
|
|
||||||
readonly={!$appSession.isAdmin && !$status.service.isRunning}
|
|
||||||
disabled={!$appSession.isAdmin || $status.service.isRunning || $status.service.initialLoading}
|
|
||||||
placeholder="plausible.js"
|
|
||||||
bind:value={service.plausibleAnalytics.scriptName}
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="email">{$t('forms.email')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="email"
|
|
||||||
id="email"
|
|
||||||
disabled={!$appSession.isAdmin || $status.service.isRunning || $status.service.initialLoading}
|
|
||||||
readonly={readOnly}
|
|
||||||
placeholder={$t('forms.email')}
|
|
||||||
bind:value={service.plausibleAnalytics.email}
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="username">{$t('forms.username')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="username"
|
|
||||||
id="username"
|
|
||||||
disabled={!$appSession.isAdmin || $status.service.isRunning || $status.service.initialLoading}
|
|
||||||
readonly={readOnly}
|
|
||||||
placeholder={$t('forms.username')}
|
|
||||||
bind:value={service.plausibleAnalytics.username}
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="password">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="password"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="password"
|
|
||||||
value={service.plausibleAnalytics.password}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">PostgreSQL</div>
|
|
||||||
<ServiceStatus id={`${service.id}-postgresql`} />
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="postgresqlUser">{$t('forms.username')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlUser"
|
|
||||||
id="postgresqlUser"
|
|
||||||
value={service.plausibleAnalytics.postgresqlUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="postgresqlPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="postgresqlPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="postgresqlPassword"
|
|
||||||
value={service.plausibleAnalytics.postgresqlPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="postgresqlDatabase">{$t('index.database')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlDatabase"
|
|
||||||
id="postgresqlDatabase"
|
|
||||||
value={service.plausibleAnalytics.postgresqlDatabase}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">ClickHouse</div>
|
|
||||||
<ServiceStatus id={`${service.id}-clickhouse`} />
|
|
||||||
</div> -->
|
|
@@ -1,36 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">SearXNG</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="secretKey">Secret Key</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="secretKey"
|
|
||||||
id="secretKey"
|
|
||||||
isPasswordField
|
|
||||||
value={service.searxng.secretKey}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Redis</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="redisPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="redisPassword"
|
|
||||||
id="redisPassword"
|
|
||||||
isPasswordField
|
|
||||||
value={service.searxng.redisPassword}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
@@ -1,118 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Taiga</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="secretKey">Secret Key</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="secretKey"
|
|
||||||
id="secretKey"
|
|
||||||
isPasswordField
|
|
||||||
value={service.taiga.secretKey}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Django</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="djangoAdminUser">Admin User</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="djangoAdminUser"
|
|
||||||
id="djangoAdminUser"
|
|
||||||
value={service.taiga.djangoAdminUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="djangoAdminPassword">Admin Password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="djangoAdminPassword"
|
|
||||||
id="djangoAdminPassword"
|
|
||||||
isPasswordField
|
|
||||||
value={service.taiga.djangoAdminPassword}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">RabbitMQ</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="rabbitMQUser">User</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="rabbitMQUser"
|
|
||||||
id="rabbitMQUser"
|
|
||||||
value={service.taiga.rabbitMQUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="rabbitMQPassword">Password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="rabbitMQPassword"
|
|
||||||
id="rabbitMQPassword"
|
|
||||||
isPasswordField
|
|
||||||
value={service.taiga.rabbitMQPassword}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">PostgreSQL</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="postgresqlHost">PostgreSQL Host</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlHost"
|
|
||||||
id="postgresqlHost"
|
|
||||||
value={service.taiga.postgresqlHost}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="postgresqlPort">PostgreSQL Port</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlPort"
|
|
||||||
id="postgresqlPort"
|
|
||||||
value={service.taiga.postgresqlPort}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="postgresqlUser">PostgreSQL User</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlUser"
|
|
||||||
id="postgresqlUser"
|
|
||||||
value={service.taiga.postgresqlUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label class="text-base font-bold text-stone-100" for="postgresqlPassword">PostgreSQL Password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlPassword"
|
|
||||||
id="postgresqlPassword"
|
|
||||||
isPasswordField
|
|
||||||
value={service.taiga.postgresqlPassword}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
@@ -1,39 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import Explainer from '$lib/components/Explainer.svelte';
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Umami</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2 px-4">
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="adminUser">Admin User</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="adminUser"
|
|
||||||
id="adminUser"
|
|
||||||
placeholder="admin"
|
|
||||||
value="admin"
|
|
||||||
disabled
|
|
||||||
readonly
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center ">
|
|
||||||
<label for="umamiAdminPassword"
|
|
||||||
>Initial Admin Password <Explainer
|
|
||||||
explanation="It could be changed in Umami. <br>This is just the password set initially after the first start."
|
|
||||||
/></label
|
|
||||||
>
|
|
||||||
<CopyPasswordField
|
|
||||||
isPasswordField
|
|
||||||
name="umamiAdminPassword"
|
|
||||||
id="umamiAdminPassword"
|
|
||||||
placeholder="admin"
|
|
||||||
value={service.umami.umamiAdminPassword}
|
|
||||||
disabled
|
|
||||||
readonly
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -1,21 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">VScode Server</div>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="password">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="password"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="password"
|
|
||||||
value={service.vscodeserver.password}
|
|
||||||
/>
|
|
||||||
</div>
|
|
@@ -1,67 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
export let service: any;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">Weblate</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="adminPassword">Admin password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="adminPassword"
|
|
||||||
id="adminPassword"
|
|
||||||
isPasswordField
|
|
||||||
value={service.weblate.adminPassword}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">PostgreSQL</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2">
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="postgresqlHost">Host</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlHost"
|
|
||||||
id="postgresqlHost"
|
|
||||||
value={service.weblate.postgresqlHost}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="postgresqlPort">Port</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlPort"
|
|
||||||
id="postgresqlPort"
|
|
||||||
value={service.weblate.postgresqlPort}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="postgresqlUser">User</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlUser"
|
|
||||||
id="postgresqlUser"
|
|
||||||
value={service.weblate.postgresqlUser}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="postgresqlPassword">Password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
name="postgresqlPassword"
|
|
||||||
id="postgresqlPassword"
|
|
||||||
isPasswordField
|
|
||||||
value={service.weblate.postgresqlPassword}
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -1,228 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import { post } from '$lib/api';
|
|
||||||
import { page } from '$app/stores';
|
|
||||||
import { status } from '$lib/store';
|
|
||||||
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
|
||||||
import Setting from '$lib/components/Setting.svelte';
|
|
||||||
import { browser } from '$app/env';
|
|
||||||
import { t } from '$lib/translations';
|
|
||||||
import { errorNotification, getDomain } from '$lib/common';
|
|
||||||
|
|
||||||
export let service: any;
|
|
||||||
export let readOnly: any;
|
|
||||||
export let settings: any;
|
|
||||||
const { id } = $page.params;
|
|
||||||
const { ipv4, ipv6 } = settings;
|
|
||||||
let ftpUrl = generateUrl(service.wordpress.ftpPublicPort);
|
|
||||||
let ftpUser = service.wordpress.ftpUser;
|
|
||||||
let ftpPassword = service.wordpress.ftpPassword;
|
|
||||||
let ftpLoading = false;
|
|
||||||
let ownMysql = service.wordpress.ownMysql;
|
|
||||||
|
|
||||||
function generateUrl(publicPort: any) {
|
|
||||||
return browser
|
|
||||||
? `sftp://${settings?.fqdn ? getDomain(settings.fqdn) : ipv4 || ipv6}:${publicPort}`
|
|
||||||
: 'Loading...';
|
|
||||||
}
|
|
||||||
async function changeSettings(name: any) {
|
|
||||||
if (ftpLoading) return;
|
|
||||||
if ($status.service.isRunning) {
|
|
||||||
ftpLoading = true;
|
|
||||||
let ftpEnabled = service.wordpress.ftpEnabled;
|
|
||||||
|
|
||||||
if (name === 'ftpEnabled') {
|
|
||||||
ftpEnabled = !ftpEnabled;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
const {
|
|
||||||
publicPort,
|
|
||||||
ftpUser: user,
|
|
||||||
ftpPassword: password
|
|
||||||
} = await post(`/services/${id}/wordpress/ftp`, {
|
|
||||||
ftpEnabled
|
|
||||||
});
|
|
||||||
ftpUrl = generateUrl(publicPort);
|
|
||||||
ftpUser = user;
|
|
||||||
ftpPassword = password;
|
|
||||||
service.wordpress.ftpEnabled = ftpEnabled;
|
|
||||||
} catch (error) {
|
|
||||||
return errorNotification(error);
|
|
||||||
} finally {
|
|
||||||
ftpLoading = false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
if (name === 'ownMysql') {
|
|
||||||
ownMysql = !ownMysql;
|
|
||||||
}
|
|
||||||
await post(`/services/${id}/wordpress/settings`, {
|
|
||||||
ownMysql
|
|
||||||
});
|
|
||||||
service.wordpress.ownMysql = ownMysql;
|
|
||||||
} catch (error) {
|
|
||||||
return errorNotification(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">WordPress</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="extraConfig">{$t('forms.extra_config')}</label>
|
|
||||||
<textarea
|
|
||||||
class="w-full"
|
|
||||||
bind:value={service.wordpress.extraConfig}
|
|
||||||
disabled={$status.service.isRunning || $status.service.initialLoading}
|
|
||||||
readonly={$status.service.isRunning}
|
|
||||||
class:resize-none={$status.service.isRunning}
|
|
||||||
rows="5"
|
|
||||||
name="extraConfig"
|
|
||||||
id="extraConfig"
|
|
||||||
placeholder={!$status.service.isRunning && !$status.service.initialLoading
|
|
||||||
? `${$t('forms.eg')}:
|
|
||||||
|
|
||||||
define('WP_ALLOW_MULTISITE', true);
|
|
||||||
define('MULTISITE', true);
|
|
||||||
define('SUBDOMAIN_INSTALL', false);`
|
|
||||||
: 'N/A'}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<Setting
|
|
||||||
id="ftpEnabled"
|
|
||||||
bind:setting={service.wordpress.ftpEnabled}
|
|
||||||
loading={ftpLoading}
|
|
||||||
disabled={!$status.service.isRunning}
|
|
||||||
on:click={() => changeSettings('ftpEnabled')}
|
|
||||||
title="Enable sFTP connection to WordPress data"
|
|
||||||
description="Enables an on-demand sFTP connection to the WordPress data directory. This is useful if you want to use sFTP to upload files."
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{#if service.wordpress.ftpEnabled}
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="ftpUrl">sFTP Connection URI</label>
|
|
||||||
<CopyPasswordField id="ftpUrl" readonly disabled name="ftpUrl" value={ftpUrl} />
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="ftpUser">User</label>
|
|
||||||
<CopyPasswordField id="ftpUser" readonly disabled name="ftpUser" value={ftpUser} />
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="ftpPassword">Password</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="ftpPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
name="ftpPassword"
|
|
||||||
value={ftpPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
<div class="flex flex-row border-b border-coolgray-500 my-6 space-x-2">
|
|
||||||
<div class="title font-bold pb-3">MySQL</div>
|
|
||||||
</div>
|
|
||||||
<div class="space-y-2">
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<Setting
|
|
||||||
id="ownMysql"
|
|
||||||
dataTooltip={$t('forms.must_be_stopped_to_modify')}
|
|
||||||
bind:setting={service.wordpress.ownMysql}
|
|
||||||
disabled={$status.service.isRunning}
|
|
||||||
on:click={() => !$status.service.isRunning && changeSettings('ownMysql')}
|
|
||||||
title="Use your own MySQL server"
|
|
||||||
description="Enables the use of your own MySQL server. If you don't have one, you can use the one provided by Coolify."
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{#if service.wordpress.ownMysql}
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="mysqlHost">Host</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="mysqlHost"
|
|
||||||
id="mysqlHost"
|
|
||||||
required
|
|
||||||
readonly={$status.service.isRunning}
|
|
||||||
disabled={$status.service.isRunning}
|
|
||||||
bind:value={service.wordpress.mysqlHost}
|
|
||||||
placeholder="{$t('forms.eg')}: db.coolify.io"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="mysqlPort">Port</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="mysqlPort"
|
|
||||||
id="mysqlPort"
|
|
||||||
required
|
|
||||||
readonly={$status.service.isRunning}
|
|
||||||
disabled={$status.service.isRunning}
|
|
||||||
bind:value={service.wordpress.mysqlPort}
|
|
||||||
placeholder="{$t('forms.eg')}: 3306"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="mysqlDatabase">{$t('index.database')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="mysqlDatabase"
|
|
||||||
id="mysqlDatabase"
|
|
||||||
required
|
|
||||||
readonly={readOnly && !service.wordpress.ownMysql}
|
|
||||||
disabled={readOnly && !service.wordpress.ownMysql}
|
|
||||||
bind:value={service.wordpress.mysqlDatabase}
|
|
||||||
placeholder="{$t('forms.eg')}: wordpress_db"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{#if !service.wordpress.ownMysql}
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="mysqlRootUser">{$t('forms.root_user')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="mysqlRootUser"
|
|
||||||
id="mysqlRootUser"
|
|
||||||
placeholder="MySQL {$t('forms.root_user')}"
|
|
||||||
value={service.wordpress.mysqlRootUser}
|
|
||||||
readonly={$status.service.isRunning || !service.wordpress.ownMysql}
|
|
||||||
disabled={$status.service.isRunning || !service.wordpress.ownMysql}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="mysqlRootUserPassword">{$t('forms.roots_password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mysqlRootUserPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly={$status.service.isRunning || !service.wordpress.ownMysql}
|
|
||||||
disabled={$status.service.isRunning || !service.wordpress.ownMysql}
|
|
||||||
name="mysqlRootUserPassword"
|
|
||||||
value={service.wordpress.mysqlRootUserPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="mysqlUser">{$t('forms.user')}</label>
|
|
||||||
<input
|
|
||||||
class="w-full"
|
|
||||||
name="mysqlUser"
|
|
||||||
id="mysqlUser"
|
|
||||||
bind:value={service.wordpress.mysqlUser}
|
|
||||||
readonly={$status.service.isRunning || !service.wordpress.ownMysql}
|
|
||||||
disabled={$status.service.isRunning || !service.wordpress.ownMysql}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 items-center px-4">
|
|
||||||
<label for="mysqlPassword">{$t('forms.password')}</label>
|
|
||||||
<CopyPasswordField
|
|
||||||
id="mysqlPassword"
|
|
||||||
isPasswordField
|
|
||||||
readonly={$status.service.isRunning || !service.wordpress.ownMysql}
|
|
||||||
disabled={$status.service.isRunning || !service.wordpress.ownMysql}
|
|
||||||
name="mysqlPassword"
|
|
||||||
bind:value={service.wordpress.mysqlPassword}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -1,15 +0,0 @@
|
|||||||
//@ts-nocheck
|
|
||||||
export { default as Plausibleanalytics } from './PlausibleAnalytics.svelte';
|
|
||||||
export { default as Minio } from './MinIO.svelte';
|
|
||||||
export { default as Vscodeserver } from './VSCodeServer.svelte';
|
|
||||||
export { default as Wordpress } from './Wordpress.svelte';
|
|
||||||
export { default as Ghost } from './Ghost.svelte';
|
|
||||||
export { default as Meilisearch } from './MeiliSearch.svelte';
|
|
||||||
export { default as Umami } from './Umami.svelte';
|
|
||||||
export { default as Hasura } from './Hasura.svelte';
|
|
||||||
export { default as Fider } from './Fider.svelte';
|
|
||||||
export { default as Appwrite } from './Appwrite.svelte';
|
|
||||||
export { default as Moodle } from './Moodle.svelte';
|
|
||||||
export { default as Glitchtip } from './GlitchTip.svelte';
|
|
||||||
export { default as Searxng } from './Searxng.svelte';
|
|
||||||
export { default as Weblate } from './Weblate.svelte';
|
|
@@ -1,15 +0,0 @@
|
|||||||
export function getStatusOfService(service: any) {
|
|
||||||
if (service) {
|
|
||||||
if (service.status.isRunning === 'running') {
|
|
||||||
return 'running';
|
|
||||||
}
|
|
||||||
if (service.status.isExited === 'exited') {
|
|
||||||
return 'stopped';
|
|
||||||
}
|
|
||||||
if (service.status.isRestarting === 'degraded') {
|
|
||||||
return 'degraded';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 'stopped';
|
|
||||||
}
|
|
@@ -4,11 +4,11 @@
|
|||||||
import { dismissToast, pauseToast, resumeToast, toasts } from '$lib/store';
|
import { dismissToast, pauseToast, resumeToast, toasts } from '$lib/store';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if $toasts}
|
{#if $toasts.length > 0}
|
||||||
<section>
|
<section>
|
||||||
<article class="toast toast-top toast-end rounded-none px-10" role="alert" >
|
<article class="toast toast-top toast-end rounded-none px-10" role="alert">
|
||||||
{#each $toasts as toast (toast.id)}
|
{#each $toasts as toast (toast.id)}
|
||||||
<Toast
|
<Toast
|
||||||
type={toast.type}
|
type={toast.type}
|
||||||
on:resume={() => resumeToast(toast.id)}
|
on:resume={() => resumeToast(toast.id)}
|
||||||
on:pause={() => pauseToast(toast.id)}
|
on:pause={() => pauseToast(toast.id)}
|
||||||
|
@@ -171,7 +171,24 @@
|
|||||||
}
|
}
|
||||||
} else if (typeof dualCerts !== 'undefined') {
|
} else if (typeof dualCerts !== 'undefined') {
|
||||||
const response = await get(`/services/${id}/status`);
|
const response = await get(`/services/${id}/status`);
|
||||||
isRunning = response.isRunning;
|
if (Object.keys(response).length === 0) {
|
||||||
|
isRunning = false;
|
||||||
|
} else {
|
||||||
|
let overallStatus = false;
|
||||||
|
for (const oneStatus of Object.keys(response)) {
|
||||||
|
if (response[oneStatus].status.isRunning) {
|
||||||
|
overallStatus = true;
|
||||||
|
} else {
|
||||||
|
isDegraded = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (overallStatus) {
|
||||||
|
isRunning = true;
|
||||||
|
} else {
|
||||||
|
isRunning = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
const response = await get(`/databases/${id}/status`);
|
const response = await get(`/databases/${id}/status`);
|
||||||
isRunning = response.isRunning;
|
isRunning = response.isRunning;
|
||||||
@@ -237,7 +254,8 @@
|
|||||||
(application.id && application.id.toLowerCase().includes($search.toLowerCase())) ||
|
(application.id && application.id.toLowerCase().includes($search.toLowerCase())) ||
|
||||||
(application.name && application.name.toLowerCase().includes($search.toLowerCase())) ||
|
(application.name && application.name.toLowerCase().includes($search.toLowerCase())) ||
|
||||||
(application.fqdn && application.fqdn.toLowerCase().includes($search.toLowerCase())) ||
|
(application.fqdn && application.fqdn.toLowerCase().includes($search.toLowerCase())) ||
|
||||||
(application.dockerComposeConfiguration && application.dockerComposeConfiguration.toLowerCase().includes($search.toLowerCase())) ||
|
(application.dockerComposeConfiguration &&
|
||||||
|
application.dockerComposeConfiguration.toLowerCase().includes($search.toLowerCase())) ||
|
||||||
(application.repository &&
|
(application.repository &&
|
||||||
application.repository.toLowerCase().includes($search.toLowerCase())) ||
|
application.repository.toLowerCase().includes($search.toLowerCase())) ||
|
||||||
(application.buildpack &&
|
(application.buildpack &&
|
||||||
@@ -643,7 +661,7 @@
|
|||||||
<div class="h-10 text-xs">
|
<div class="h-10 text-xs">
|
||||||
{#if application?.fqdn}
|
{#if application?.fqdn}
|
||||||
<h2>{application?.fqdn.replace('https://', '').replace('http://', '')}</h2>
|
<h2>{application?.fqdn.replace('https://', '').replace('http://', '')}</h2>
|
||||||
{:else if (!application.settings?.isBot && !application?.fqdn) && application.buildPack !== 'compose'}
|
{:else if !application.settings?.isBot && !application?.fqdn && application.buildPack !== 'compose'}
|
||||||
<h2 class="text-red-500">Not configured</h2>
|
<h2 class="text-red-500">Not configured</h2>
|
||||||
{/if}
|
{/if}
|
||||||
{#if application.destinationDocker?.name}
|
{#if application.destinationDocker?.name}
|
||||||
|
@@ -212,21 +212,21 @@
|
|||||||
>
|
>
|
||||||
{/if}
|
{/if}
|
||||||
{#if service.type === 'plausibleanalytics' && $status.service.overallStatus === 'healthy'}
|
{#if service.type === 'plausibleanalytics' && $status.service.overallStatus === 'healthy'}
|
||||||
<button
|
<button
|
||||||
class="btn btn-sm"
|
class="btn btn-sm"
|
||||||
on:click|preventDefault={setEmailsToVerified}
|
on:click|preventDefault={setEmailsToVerified}
|
||||||
disabled={loading.verification}
|
disabled={loading.verification}
|
||||||
class:loading={loading.verification}
|
class:loading={loading.verification}
|
||||||
>{loading.verification
|
>{loading.verification
|
||||||
? $t('forms.verifying')
|
? $t('forms.verifying')
|
||||||
: $t('forms.verify_emails_without_smtp')}</button
|
: $t('forms.verify_emails_without_smtp')}</button
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
class="btn btn-sm"
|
class="btn btn-sm"
|
||||||
on:click|preventDefault={cleanupLogs}
|
on:click|preventDefault={cleanupLogs}
|
||||||
disabled={loading.cleanup}
|
disabled={loading.cleanup}
|
||||||
class:loading={loading.cleanup}>Cleanup Unnecessary Database Logs</button
|
class:loading={loading.cleanup}>Cleanup Unnecessary Database Logs</button
|
||||||
>
|
>
|
||||||
{/if}
|
{/if}
|
||||||
{#if service.type === 'appwrite' && $status.service.overallStatus === 'healthy'}
|
{#if service.type === 'appwrite' && $status.service.overallStatus === 'healthy'}
|
||||||
<button
|
<button
|
||||||
@@ -251,17 +251,15 @@
|
|||||||
<div class="grid grid-cols-2 items-center">
|
<div class="grid grid-cols-2 items-center">
|
||||||
<label for="version">Version / Tag</label>
|
<label for="version">Version / Tag</label>
|
||||||
<a
|
<a
|
||||||
href={$appSession.isAdmin && !$status.service.isRunning && !$status.service.initialLoading
|
href={isDisabled ? `/services/${id}/configuration/version?from=/services/${id}` : ''}
|
||||||
? `/services/${id}/configuration/version?from=/services/${id}`
|
|
||||||
: ''}
|
|
||||||
class="no-underline"
|
class="no-underline"
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
class="w-full"
|
class="w-full"
|
||||||
value={service.version}
|
value={service.version}
|
||||||
id="service"
|
id="service"
|
||||||
readonly
|
readonly={isDisabled}
|
||||||
disabled={$status.service.isRunning || $status.service.initialLoading}
|
disabled={isDisabled}
|
||||||
class:cursor-pointer={!$status.service.isRunning}
|
class:cursor-pointer={!$status.service.isRunning}
|
||||||
/></a
|
/></a
|
||||||
>
|
>
|
||||||
@@ -289,10 +287,8 @@
|
|||||||
</label>
|
</label>
|
||||||
<CopyPasswordField
|
<CopyPasswordField
|
||||||
placeholder="eg: https://coollabs.io"
|
placeholder="eg: https://coollabs.io"
|
||||||
readonly={!$appSession.isAdmin && !$status.service.isRunning}
|
readonly={isDisabled}
|
||||||
disabled={!$appSession.isAdmin ||
|
disabled={isDisabled}
|
||||||
$status.service.isRunning ||
|
|
||||||
$status.service.initialLoading}
|
|
||||||
name="fqdn"
|
name="fqdn"
|
||||||
id="fqdn"
|
id="fqdn"
|
||||||
pattern="^https?://([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{'{'}2,{'}'}$"
|
pattern="^https?://([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{'{'}2,{'}'}$"
|
||||||
@@ -306,6 +302,8 @@
|
|||||||
<label for={fqdn.name}>{fqdn.label || fqdn.name}</label>
|
<label for={fqdn.name}>{fqdn.label || fqdn.name}</label>
|
||||||
<CopyPasswordField
|
<CopyPasswordField
|
||||||
placeholder="eg: https://coolify.io"
|
placeholder="eg: https://coolify.io"
|
||||||
|
readonly={isDisabled}
|
||||||
|
disabled={isDisabled}
|
||||||
required={fqdn.required}
|
required={fqdn.required}
|
||||||
name={fqdn.name}
|
name={fqdn.name}
|
||||||
id={fqdn.name}
|
id={fqdn.name}
|
||||||
@@ -368,10 +366,8 @@
|
|||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
class="w-full"
|
class="w-full"
|
||||||
readonly={!$appSession.isAdmin && !$status.service.isRunning}
|
readonly={isDisabled}
|
||||||
disabled={!$appSession.isAdmin ||
|
disabled={isDisabled}
|
||||||
$status.service.isRunning ||
|
|
||||||
$status.service.initialLoading}
|
|
||||||
name="exposePort"
|
name="exposePort"
|
||||||
id="exposePort"
|
id="exposePort"
|
||||||
bind:value={service.exposePort}
|
bind:value={service.exposePort}
|
||||||
|
Reference in New Issue
Block a user