Support TLS option in IMAP connection

This commit is contained in:
Wayne
2025-07-28 20:29:04 +03:00
parent 32752ce90f
commit e9d84fb438
7 changed files with 56 additions and 8 deletions

View File

@@ -1,8 +1,8 @@
# Open Archiver
![Docker Compose](https://img.shields.io/badge/Docker%20Compose-up-blue?style=for-the-badge&logo=docker)
![PostgreSQL](https://img.shields.io/badge/PostgreSQL-blue?style=for-the-badge&logo=postgresql)
![Meilisearch](https://img.shields.io/badge/Meilisearch-red?style=for-the-badge&logo=meilisearch)
![Docker Compose](https://img.shields.io/badge/Docker%20Compose-up-4A4A4A?style=for-the-badge&logo=docker)
![PostgreSQL](https://img.shields.io/badge/PostgreSQL-6B6B6B?style=for-the-badge&logo=postgresql)
![Meilisearch](https://img.shields.io/badge/Meilisearch-2F2F2F?style=for-the-badge&logo=meilisearch)
**A secure, sovereign, and affordable open-source platform for email archiving and eDiscovery.**
@@ -10,13 +10,13 @@ Open Archiver provides a robust, self-hosted solution for archiving, storing, in
## Screenshots
![Open Archiver Preview](assets/screenshots/dashboard-1.png)
![Open Archiver Preview](assets/screenshots/dashboard.png)
_Dashboard_
![Open Archiver Preview](assets/screenshots/archived-emails-1.png)
![Open Archiver Preview](assets/screenshots/archived-emails.png)
_Archived emails_
![Open Archiver Preview](assets/screenshots/search-1.png)
![Open Archiver Preview](assets/screenshots/search.png)
_Full-text search across all your emails and attachments_
## Key Features
@@ -87,7 +87,7 @@ After deploying the application, you will need to configure one or more ingestio
Join our growing community on Discord to ask questions, share your projects, and connect with other developers.
[![Discord](https://img.shields.io/discord/123456789012345678?label=Join%20our%20Discord&logo=discord&style=for-the-badge)](https://discord.gg/Qpv4BmHp)
[![Discord](https://img.shields.io/badge/Join%20our%20Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/Qpv4BmHp)
## Contributing

View File

Before

Width:  |  Height:  |  Size: 305 KiB

After

Width:  |  Height:  |  Size: 305 KiB

View File

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 114 KiB

View File

Before

Width:  |  Height:  |  Size: 199 KiB

After

Width:  |  Height:  |  Size: 199 KiB

View File

@@ -2,6 +2,7 @@
import type { IngestionSource, CreateIngestionSourceDto } from '@open-archiver/types';
import { Button } from '$lib/components/ui/button';
import * as Dialog from '$lib/components/ui/dialog';
import { Checkbox } from '$lib/components/ui/checkbox';
import { Input } from '$lib/components/ui/input';
import { Label } from '$lib/components/ui/label';
import * as Select from '$lib/components/ui/select';
@@ -25,7 +26,8 @@
name: source?.name ?? '',
provider: source?.provider ?? 'google_workspace',
providerConfig: source?.credentials ?? {
type: source?.provider ?? 'google_workspace'
type: source?.provider ?? 'google_workspace',
secure: true
}
});
@@ -129,6 +131,10 @@
class="col-span-3"
/>
</div>
<div class="grid grid-cols-4 items-center gap-4">
<Label for="secure" class="text-right">Use TLS</Label>
<Checkbox id="secure" bind:checked={formData.providerConfig.secure} />
</div>
{/if}
<Dialog.Footer>
<Button type="submit" disabled={isSubmitting}>

View File

@@ -0,0 +1,36 @@
<script lang="ts">
import { Checkbox as CheckboxPrimitive } from "bits-ui";
import CheckIcon from "@lucide/svelte/icons/check";
import MinusIcon from "@lucide/svelte/icons/minus";
import { cn, type WithoutChildrenOrChild } from "$lib/utils.js";
let {
ref = $bindable(null),
checked = $bindable(false),
indeterminate = $bindable(false),
class: className,
...restProps
}: WithoutChildrenOrChild<CheckboxPrimitive.RootProps> = $props();
</script>
<CheckboxPrimitive.Root
bind:ref
data-slot="checkbox"
class={cn(
"border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive shadow-xs peer flex size-4 shrink-0 items-center justify-center rounded-[4px] border outline-none transition-shadow focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
className
)}
bind:checked
bind:indeterminate
{...restProps}
>
{#snippet children({ checked, indeterminate })}
<div data-slot="checkbox-indicator" class="text-current transition-none">
{#if checked}
<CheckIcon class="size-3.5" />
{:else if indeterminate}
<MinusIcon class="size-3.5" />
{/if}
</div>
{/snippet}
</CheckboxPrimitive.Root>

View File

@@ -0,0 +1,6 @@
import Root from "./checkbox.svelte";
export {
Root,
//
Root as Checkbox,
};