Add SealShare file sharing application with encryption, branding, auth, Docker, and Octane support

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
surtic86
2026-02-13 11:43:20 +01:00
co-authored by Claude Opus 4.6
parent 4790be8142
commit e37b322dde
120 changed files with 6346 additions and 1459 deletions
@@ -10,19 +10,15 @@
<form method="POST" action="{{ route('password.confirm.store') }}" class="flex flex-col gap-6">
@csrf
<flux:input
<x-password
name="password"
:label="__('Password')"
type="password"
label="{{ __('Password') }}"
required
autocomplete="current-password"
:placeholder="__('Password')"
viewable
placeholder="{{ __('Password') }}"
/>
<flux:button variant="primary" type="submit" class="w-full" data-test="confirm-password-button">
{{ __('Confirm') }}
</flux:button>
<x-button type="submit" label="{{ __('Confirm') }}" class="btn-primary w-full" data-test="confirm-password-button" />
</form>
</div>
</x-layouts::auth>
@@ -9,23 +9,22 @@
@csrf
<!-- Email Address -->
<flux:input
<x-input
name="email"
:label="__('Email Address')"
label="{{ __('Email Address') }}"
type="email"
required
autofocus
placeholder="email@example.com"
icon="o-envelope"
/>
<flux:button variant="primary" type="submit" class="w-full" data-test="email-password-reset-link-button">
{{ __('Email password reset link') }}
</flux:button>
<x-button type="submit" label="{{ __('Email password reset link') }}" class="btn-primary w-full" data-test="email-password-reset-link-button" />
</form>
<div class="space-x-1 rtl:space-x-reverse text-center text-sm text-zinc-400">
<div class="space-x-1 rtl:space-x-reverse text-center text-sm opacity-60">
<span>{{ __('Or, return to') }}</span>
<flux:link :href="route('login')" wire:navigate>{{ __('log in') }}</flux:link>
<a href="{{ route('login') }}" class="link link-primary" wire:navigate>{{ __('log in') }}</a>
</div>
</div>
</x-layouts::auth>
+15 -15
View File
@@ -9,50 +9,50 @@
@csrf
<!-- Email Address -->
<flux:input
<x-input
name="email"
:label="__('Email address')"
label="{{ __('Email address') }}"
:value="old('email')"
type="email"
required
autofocus
autocomplete="email"
placeholder="email@example.com"
icon="o-envelope"
/>
<!-- Password -->
<div class="relative">
<flux:input
<x-password
name="password"
:label="__('Password')"
type="password"
label="{{ __('Password') }}"
required
autocomplete="current-password"
:placeholder="__('Password')"
viewable
placeholder="{{ __('Password') }}"
/>
@if (Route::has('password.request'))
<flux:link class="absolute top-0 text-sm end-0" :href="route('password.request')" wire:navigate>
<a class="absolute top-0 text-sm end-0 link link-primary" href="{{ route('password.request') }}" wire:navigate>
{{ __('Forgot your password?') }}
</flux:link>
</a>
@endif
</div>
<!-- Remember Me -->
<flux:checkbox name="remember" :label="__('Remember me')" :checked="old('remember')" />
<label class="flex items-center gap-2 cursor-pointer">
<input type="checkbox" name="remember" class="checkbox checkbox-sm" {{ old('remember') ? 'checked' : '' }} />
<span class="text-sm">{{ __('Remember me') }}</span>
</label>
<div class="flex items-center justify-end">
<flux:button variant="primary" type="submit" class="w-full" data-test="login-button">
{{ __('Log in') }}
</flux:button>
<x-button type="submit" label="{{ __('Log in') }}" class="btn-primary w-full" data-test="login-button" />
</div>
</form>
@if (Route::has('register'))
<div class="space-x-1 text-sm text-center rtl:space-x-reverse text-zinc-600 dark:text-zinc-400">
<div class="space-x-1 text-sm text-center rtl:space-x-reverse opacity-60">
<span>{{ __('Don\'t have an account?') }}</span>
<flux:link :href="route('register')" wire:navigate>{{ __('Sign up') }}</flux:link>
<a href="{{ route('register') }}" class="link link-primary" wire:navigate>{{ __('Sign up') }}</a>
</div>
@endif
</div>
+16 -20
View File
@@ -8,60 +8,56 @@
<form method="POST" action="{{ route('register.store') }}" class="flex flex-col gap-6">
@csrf
<!-- Name -->
<flux:input
<x-input
name="name"
:label="__('Name')"
label="{{ __('Name') }}"
:value="old('name')"
type="text"
required
autofocus
autocomplete="name"
:placeholder="__('Full name')"
placeholder="{{ __('Full name') }}"
icon="o-user"
/>
<!-- Email Address -->
<flux:input
<x-input
name="email"
:label="__('Email address')"
label="{{ __('Email address') }}"
:value="old('email')"
type="email"
required
autocomplete="email"
placeholder="email@example.com"
icon="o-envelope"
/>
<!-- Password -->
<flux:input
<x-password
name="password"
:label="__('Password')"
type="password"
label="{{ __('Password') }}"
required
autocomplete="new-password"
:placeholder="__('Password')"
viewable
placeholder="{{ __('Password') }}"
/>
<!-- Confirm Password -->
<flux:input
<x-password
name="password_confirmation"
:label="__('Confirm password')"
type="password"
label="{{ __('Confirm password') }}"
required
autocomplete="new-password"
:placeholder="__('Confirm password')"
viewable
placeholder="{{ __('Confirm password') }}"
/>
<div class="flex items-center justify-end">
<flux:button type="submit" variant="primary" class="w-full" data-test="register-user-button">
{{ __('Create account') }}
</flux:button>
<x-button type="submit" label="{{ __('Create account') }}" class="btn-primary w-full" data-test="register-user-button" />
</div>
</form>
<div class="space-x-1 rtl:space-x-reverse text-center text-sm text-zinc-600 dark:text-zinc-400">
<div class="space-x-1 rtl:space-x-reverse text-center text-sm opacity-60">
<span>{{ __('Already have an account?') }}</span>
<flux:link :href="route('login')" wire:navigate>{{ __('Log in') }}</flux:link>
<a href="{{ route('login') }}" class="link link-primary" wire:navigate>{{ __('Log in') }}</a>
</div>
</div>
</x-layouts::auth>
@@ -11,41 +11,36 @@
<input type="hidden" name="token" value="{{ request()->route('token') }}">
<!-- Email Address -->
<flux:input
<x-input
name="email"
value="{{ request('email') }}"
:label="__('Email')"
label="{{ __('Email') }}"
type="email"
required
autocomplete="email"
icon="o-envelope"
/>
<!-- Password -->
<flux:input
<x-password
name="password"
:label="__('Password')"
type="password"
label="{{ __('Password') }}"
required
autocomplete="new-password"
:placeholder="__('Password')"
viewable
placeholder="{{ __('Password') }}"
/>
<!-- Confirm Password -->
<flux:input
<x-password
name="password_confirmation"
:label="__('Confirm password')"
type="password"
label="{{ __('Confirm password') }}"
required
autocomplete="new-password"
:placeholder="__('Confirm password')"
viewable
placeholder="{{ __('Confirm password') }}"
/>
<div class="flex items-center justify-end">
<flux:button type="submit" variant="primary" class="w-full" data-test="reset-password-button">
{{ __('Reset password') }}
</flux:button>
<x-button type="submit" label="{{ __('Reset password') }}" class="btn-primary w-full" data-test="reset-password-button" />
</div>
</form>
</div>
@@ -9,16 +9,12 @@
recovery_code: '',
toggleInput() {
this.showRecoveryInput = !this.showRecoveryInput;
this.code = '';
this.recovery_code = '';
$dispatch('clear-2fa-auth-code');
$nextTick(() => {
this.showRecoveryInput
? this.$refs.recovery_code?.focus()
: $dispatch('focus-2fa-auth-code');
: this.$refs.code?.focus();
});
},
}"
@@ -42,21 +38,24 @@
<div class="space-y-5 text-center">
<div x-show="!showRecoveryInput">
<div class="flex items-center justify-center my-5">
<flux:otp
x-model="code"
length="6"
<div class="my-5">
<x-input
type="text"
name="code"
label="OTP Code"
label:sr-only
class="mx-auto"
/>
x-ref="code"
x-model="code"
x-bind:required="!showRecoveryInput"
autocomplete="one-time-code"
placeholder="000000"
class="text-center text-2xl tracking-widest"
maxlength="6"
/>
</div>
</div>
<div x-show="showRecoveryInput">
<div class="my-5">
<flux:input
<x-input
type="text"
name="recovery_code"
x-ref="recovery_code"
@@ -67,19 +66,15 @@
</div>
@error('recovery_code')
<flux:text color="red">
{{ $message }}
</flux:text>
<p class="text-error text-sm">{{ $message }}</p>
@enderror
</div>
<flux:button
variant="primary"
<x-button
type="submit"
class="w-full"
>
{{ __('Continue') }}
</flux:button>
label="{{ __('Continue') }}"
class="btn-primary w-full"
/>
</div>
<div class="mt-5 space-x-0.5 text-sm leading-5 text-center">
@@ -1,28 +1,24 @@
<x-layouts::auth>
<div class="mt-4 flex flex-col gap-6">
<flux:text class="text-center">
<p class="text-center text-sm opacity-70">
{{ __('Please verify your email address by clicking on the link we just emailed to you.') }}
</flux:text>
</p>
@if (session('status') == 'verification-link-sent')
<flux:text class="text-center font-medium !dark:text-green-400 !text-green-600">
<p class="text-center text-sm font-medium text-success">
{{ __('A new verification link has been sent to the email address you provided during registration.') }}
</flux:text>
</p>
@endif
<div class="flex flex-col items-center justify-between space-y-3">
<form method="POST" action="{{ route('verification.send') }}">
@csrf
<flux:button type="submit" variant="primary" class="w-full">
{{ __('Resend verification email') }}
</flux:button>
<x-button type="submit" label="{{ __('Resend verification email') }}" class="btn-primary w-full" />
</form>
<form method="POST" action="{{ route('logout') }}">
@csrf
<flux:button variant="ghost" type="submit" class="text-sm cursor-pointer" data-test="logout-button">
{{ __('Log out') }}
</flux:button>
<x-button type="submit" label="{{ __('Log out') }}" class="btn-ghost btn-sm" data-test="logout-button" />
</form>
</div>
</div>