initial v0.8 pre-release

This commit is contained in:
Gani Georgiev
2022-10-30 10:28:14 +02:00
parent 9cbb2e750e
commit 90dba45d7c
388 changed files with 21580 additions and 13603 deletions
@@ -82,13 +82,6 @@
</Field>
</div>
<div class="col-lg-12">
<Field class="form-field" name="{key}.allowRegistrations" let:uniqueId>
<input type="checkbox" id={uniqueId} bind:checked={config.allowRegistrations} />
<label for={uniqueId}>Allow registration for new users</label>
</Field>
</div>
{#if showSelfHostedFields}
<div class="col-lg-12">
<div class="section-title">Optional endpoints (if you self host the OAUTH2 service)</div>
@@ -1,123 +0,0 @@
<script>
import { scale, slide } from "svelte/transition";
import tooltip from "@/actions/tooltip";
import { errors } from "@/stores/errors";
import CommonHelper from "@/utils/CommonHelper";
import Accordion from "@/components/base/Accordion.svelte";
import Field from "@/components/base/Field.svelte";
import MultipleValueInput from "@/components/base/MultipleValueInput.svelte";
export let config = {}; // EmailAuthConfig
let accordion;
$: hasErrors = !CommonHelper.isEmpty($errors?.emailAuth);
export function expand() {
accordion?.expand();
}
export function collapse() {
accordion?.collapse();
}
export function collapseSiblings() {
accordion?.collapseSiblings();
}
</script>
<Accordion bind:this={accordion} on:expand on:collapse on:toggle {...$$restProps}>
<svelte:fragment slot="header">
<div class="inline-flex">
<i class="ri-mail-lock-line" />
<span class="txt">Email/Password</span>
</div>
{#if config.enabled}
<span class="label label-success">Enabled</span>
{:else}
<span class="label">Disabled</span>
{/if}
<div class="flex-fill" />
{#if hasErrors}
<i
class="ri-error-warning-fill txt-danger"
transition:scale={{ duration: 150, start: 0.7 }}
use:tooltip={{ text: "Has errors", position: "left" }}
/>
{/if}
</svelte:fragment>
<Field class="form-field form-field-toggle m-b-0" name="emailAuth.enabled" let:uniqueId>
<input type="checkbox" id={uniqueId} bind:checked={config.enabled} />
<label for={uniqueId}>Enable</label>
</Field>
{#if config.enabled}
<div class="grid" transition:slide|local={{ duration: 150 }}>
<div class="col-sm-12 m-t-sm">
<Field class="form-field required" name="emailAuth.minPasswordLength" let:uniqueId>
<label for={uniqueId}>Minimum password length</label>
<input
type="number"
id={uniqueId}
required
min="5"
max="200"
bind:value={config.minPasswordLength}
/>
</Field>
</div>
<div class="col-lg-6">
<Field
class="form-field {!CommonHelper.isEmpty(config.onlyDomains) ? 'disabled' : ''}"
name="emailAuth.exceptDomains"
let:uniqueId
>
<label for={uniqueId}>
<span class="txt">Except domains</span>
<i
class="ri-information-line link-hint"
use:tooltip={{
text: 'Email domains that are NOT allowed to sign up. \n This field is disabled if "Only domains" is set.',
position: "top",
}}
/>
</label>
<MultipleValueInput
id={uniqueId}
disabled={!CommonHelper.isEmpty(config.onlyDomains)}
bind:value={config.exceptDomains}
/>
<div class="help-block">Use comma as separator.</div>
</Field>
</div>
<div class="col-lg-6">
<Field
class="form-field {!CommonHelper.isEmpty(config.exceptDomains) ? 'disabled' : ''}"
name="emailAuth.onlyDomains"
let:uniqueId
>
<label for="{uniqueId}.config.onlyDomains">
<span class="txt">Only domains</span>
<i
class="ri-information-line link-hint"
use:tooltip={{
text: 'Email domains that are ONLY allowed to sign up. \n This field is disabled if "Except domains" is set.',
position: "top",
}}
/>
</label>
<MultipleValueInput
id="{uniqueId}.config.onlyDomains"
disabled={!CommonHelper.isEmpty(config.exceptDomains)}
bind:value={config.onlyDomains}
/>
<div class="help-block">Use comma as separator.</div>
</Field>
</div>
</div>
{/if}
</Accordion>
@@ -1,3 +1,7 @@
<script context="module">
let cachedEditorComponent;
</script>
<script>
import { scale } from "svelte/transition";
import tooltip from "@/actions/tooltip";
@@ -12,7 +16,7 @@
export let config = {};
let accordion;
let editorComponent;
let editorComponent = cachedEditorComponent;
let isEditorComponentLoading = false;
$: hasErrors = !CommonHelper.isEmpty(CommonHelper.getNestedVal($errors, key));
@@ -42,6 +46,8 @@
editorComponent = (await import("@/components/base/CodeEditor.svelte")).default;
cachedEditorComponent = editorComponent;
isEditorComponentLoading = false;
}
@@ -6,13 +6,12 @@
import { addSuccessToast } from "@/stores/toasts";
import PageWrapper from "@/components/base/PageWrapper.svelte";
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
import EmailAuthAccordion from "@/components/settings/EmailAuthAccordion.svelte";
import AuthProviderAccordion from "@/components/settings/AuthProviderAccordion.svelte";
import providersList from "@/providers.js";
$pageTitle = "Auth providers";
let emailAuthAccordion;
let accordions = {};
let originalFormSettings = {};
let formSettings = {};
let isLoading = false;
@@ -48,7 +47,8 @@
const result = await ApiClient.settings.update(CommonHelper.filterRedactedProps(formSettings));
initSettings(result);
setErrors({});
emailAuthAccordion?.collapseSiblings();
accordions[Object.keys(accordions)[0]]?.collapseSiblings();
addSuccessToast("Successfully updated auth providers.");
} catch (err) {
ApiClient.errorResponseHandler(err);
@@ -60,15 +60,10 @@
function initSettings(data) {
data = data || {};
formSettings = {
emailAuth: Object.assign({ enabled: true }, data.emailAuth),
};
formSettings = {};
for (const providerKey in providersList) {
formSettings[providerKey] = Object.assign(
{ enabled: false, allowRegistrations: true },
data[providerKey]
);
formSettings[providerKey] = Object.assign({ enabled: false }, data[providerKey]);
}
originalFormSettings = JSON.parse(JSON.stringify(formSettings));
@@ -97,14 +92,9 @@
<div class="loader" />
{:else}
<div class="accordions">
<EmailAuthAccordion
bind:this={emailAuthAccordion}
single
bind:config={formSettings.emailAuth}
/>
{#each Object.entries(providersList) as [key, provider]}
<AuthProviderAccordion
bind:this={accordions[key]}
single
{key}
title={provider.title}
+36 -29
View File
@@ -1,4 +1,5 @@
<script>
import { onMount } from "svelte";
import { slide } from "svelte/transition";
import ApiClient from "@/utils/ApiClient";
import CommonHelper from "@/utils/CommonHelper";
@@ -42,24 +43,6 @@
isLoading = false;
}
async function testS3() {
testS3Error = null;
if (!formSettings.s3.enabled) {
return; // nothing to test
}
isTesting = true;
try {
await ApiClient.settings.testS3({ $cancelKey: testRequestKey });
} catch (err) {
testS3Error = err;
}
isTesting = false;
}
async function save() {
if (isSaving || !hasChanges) {
return;
@@ -67,13 +50,6 @@
isSaving = true;
// auto cancel the test request after 30sec
clearTimeout(testS3TimeoutId);
testS3TimeoutId = setTimeout(() => {
ApiClient.cancelRequest(testRequestKey);
addErrorToast("S3 test connection timeout.");
}, 30000);
try {
ApiClient.cancelRequest(testRequestKey);
const settings = await ApiClient.settings.update(CommonHelper.filterRedactedProps(formSettings));
@@ -92,8 +68,6 @@
ApiClient.errorResponseHandler(err);
}
clearTimeout(testS3TimeoutId);
isSaving = false;
}
@@ -111,6 +85,39 @@
await testS3();
}
async function testS3() {
testS3Error = null;
if (!formSettings.s3.enabled) {
return; // nothing to test
}
// auto cancel the test request after 30sec
ApiClient.cancelRequest(testRequestKey);
clearTimeout(testS3TimeoutId);
testS3TimeoutId = setTimeout(() => {
ApiClient.cancelRequest(testRequestKey);
addErrorToast("S3 test connection timeout.");
}, 30000);
isTesting = true;
try {
await ApiClient.settings.testS3({ $cancelKey: testRequestKey });
} catch (err) {
testS3Error = err;
}
isTesting = false;
clearTimeout(testS3TimeoutId);
}
onMount(() => {
return () => {
clearTimeout(testS3TimeoutId);
};
});
</script>
<SettingsSidebar />
@@ -160,7 +167,7 @@
<a
href="https://github.com/rclone/rclone"
target="_blank"
rel="noopener"
rel="noopener noreferrer"
class="txt-bold"
>
rclone
@@ -168,7 +175,7 @@
<a
href="https://github.com/peak/s5cmd"
target="_blank"
rel="noopener"
rel="noopener noreferrer"
class="txt-bold"
>
s5cmd
@@ -8,10 +8,10 @@
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
const tokensList = [
{ key: "userAuthToken", label: "Users auth token" },
{ key: "userVerificationToken", label: "Users email verification token" },
{ key: "userPasswordResetToken", label: "Users password reset token" },
{ key: "userEmailChangeToken", label: "Users email change token" },
{ key: "recordAuthToken", label: "Auth record authentication token" },
{ key: "recordVerificationToken", label: "Auth record email verification token" },
{ key: "recordPasswordResetToken", label: "Auth record password reset token" },
{ key: "recordEmailChangeToken", label: "Auth record email change token" },
{ key: "adminAuthToken", label: "Admins auth token" },
{ key: "adminPasswordResetToken", label: "Admins password reset token" },
];