9 |
10 |
11 | @if (count($sessions) > 0)
12 |
13 |
14 | @foreach ($sessions as $session)
15 |
16 |
17 | #{{ $session->user_id }}
18 |
19 | @if (empty($session->users->name))
20 | Conta excluída
21 | @else
22 | ({{ $session->users->name }})
23 | @endif
24 |
25 | {{ $session->last_login }}
26 |
27 |
28 |
29 |
30 |
31 | {{ $session->ip_address }},
32 | {{ $session->user_agent }},
33 |
34 |
35 |
36 |
37 | @endforeach
38 |
39 | @endif
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/resources/views/admin/users/create.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Create User
5 |
6 |
7 |
8 |
62 |
--------------------------------------------------------------------------------
/resources/views/admin/users/table.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Name
10 | Email
11 | Whats
12 | CPF
13 | Ações
14 |
15 |
16 |
17 |
18 | @foreach ($users as $user)
19 |
20 | {{ $user->name }}
21 | {{ $user->email }}
22 | Whats
23 | 61930303323
24 |
25 |
26 | {{ __('Edit') }}
27 |
28 |
29 | {{ __('View') }}
30 |
31 |
32 |
33 | @endforeach
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/resources/views/api/index.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ __('API Tokens') }}
5 |
6 |
7 |
8 |
9 |
10 | @livewire('api.api-token-manager')
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/auth/confirm-password.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ __('This is a secure area of the application. Please confirm your password before continuing.') }}
9 |
10 |
11 |
12 |
13 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/resources/views/auth/forgot-password.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }}
9 |
10 |
11 | @if (session('status'))
12 |
13 | {{ session('status') }}
14 |
15 | @endif
16 |
17 |
18 |
19 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/resources/views/auth/login.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | @if (session('status'))
10 |
11 | {{ session('status') }}
12 |
13 | @endif
14 |
15 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/resources/views/auth/register.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/resources/views/auth/reset-password.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/resources/views/auth/two-factor-challenge.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {{ __('Please confirm access to your account by entering the authentication code provided by your authenticator application.') }}
10 |
11 |
12 |
13 | {{ __('Please confirm access to your account by entering one of your emergency recovery codes.') }}
14 |
15 |
16 |
17 |
18 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/resources/views/auth/verify-email.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ __('Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.') }}
9 |
10 |
11 | @if (session('status') == 'verification-link-sent')
12 |
13 | {{ __('A new verification link has been sent to the email address you provided during registration.') }}
14 |
15 | @endif
16 |
17 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/resources/views/dashboard.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ __('Dashboard') }}
5 |
6 |
7 |
8 |
15 |
16 |
--------------------------------------------------------------------------------
/resources/views/layouts/app.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
{{ config('app.name', 'Laravel') }}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | @livewireStyles
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | @livewire('navigation-menu')
26 |
27 |
28 | @if (isset($header))
29 |
30 |
31 | {{ $header }}
32 |
33 |
34 | @endif
35 |
36 |
37 |
38 | {{ $slot }}
39 |
40 |
41 |
42 | @stack('modals')
43 |
44 | @livewireScripts
45 |
46 |
47 |
--------------------------------------------------------------------------------
/resources/views/layouts/guest.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
{{ config('app.name', 'Laravel') }}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | {{ $slot }}
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/resources/views/policy.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {!! $policy !!}
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/profile/delete-user-form.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ __('Delete Account') }}
4 |
5 |
6 |
7 | {{ __('Permanently delete your account.') }}
8 |
9 |
10 |
11 |
12 | {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }}
13 |
14 |
15 |
16 |
17 | {{ __('Delete Account') }}
18 |
19 |
20 |
21 |
22 |
23 |
24 | {{ __('Delete Account') }}
25 |
26 |
27 |
28 | {{ __('Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.') }}
29 |
30 |
31 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | {{ __('Cancel') }}
44 |
45 |
46 |
47 | {{ __('Delete Account') }}
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/resources/views/profile/show.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ __('Profile') }}
5 |
6 |
7 |
8 |
9 |
10 | @if (Laravel\Fortify\Features::canUpdateProfileInformation())
11 | @livewire('profile.update-profile-information-form')
12 |
13 |
14 | @endif
15 |
16 | @if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::updatePasswords()))
17 |
18 | @livewire('profile.update-password-form')
19 |
20 |
21 |
22 | @endif
23 |
24 | @if (Laravel\Fortify\Features::canManageTwoFactorAuthentication())
25 |
26 | @livewire('profile.two-factor-authentication-form')
27 |
28 |
29 |
30 | @endif
31 |
32 |
33 | @livewire('profile.logout-other-browser-sessions-form')
34 |
35 |
36 | @if (Laravel\Jetstream\Jetstream::hasAccountDeletionFeatures())
37 |
38 |
39 |
40 | @livewire('profile.delete-user-form')
41 |
42 | @endif
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/resources/views/profile/two-factor-authentication-form.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ __('Two Factor Authentication') }}
4 |
5 |
6 |
7 | {{ __('Add additional security to your account using two factor authentication.') }}
8 |
9 |
10 |
11 |
12 | @if ($this->enabled)
13 | {{ __('You have enabled two factor authentication.') }}
14 | @else
15 | {{ __('You have not enabled two factor authentication.') }}
16 | @endif
17 |
18 |
19 |
20 |
21 | {{ __('When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone\'s Google Authenticator application.') }}
22 |
23 |
24 |
25 | @if ($this->enabled)
26 | @if ($showingQrCode)
27 |
28 |
29 | {{ __('Two factor authentication is now enabled. Scan the following QR code using your phone\'s authenticator application.') }}
30 |
31 |
32 |
33 |
34 | {!! $this->user->twoFactorQrCodeSvg() !!}
35 |
36 | @endif
37 |
38 | @if ($showingRecoveryCodes)
39 |
40 |
41 | {{ __('Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.') }}
42 |
43 |
44 |
45 |
46 | @foreach (json_decode(decrypt($this->user->two_factor_recovery_codes), true) as $code)
47 |
{{ $code }}
48 | @endforeach
49 |
50 | @endif
51 | @endif
52 |
53 |
54 | @if (! $this->enabled)
55 |
56 |
57 | {{ __('Enable') }}
58 |
59 |
60 | @else
61 | @if ($showingRecoveryCodes)
62 |
63 |
64 | {{ __('Regenerate Recovery Codes') }}
65 |
66 |
67 | @else
68 |
69 |
70 | {{ __('Show Recovery Codes') }}
71 |
72 |
73 | @endif
74 |
75 |
76 |
77 | {{ __('Disable') }}
78 |
79 |
80 | @endif
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/resources/views/profile/update-password-form.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ __('Update Password') }}
4 |
5 |
6 |
7 | {{ __('Ensure your account is using a long, random password to stay secure.') }}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | {{ __('Saved.') }}
33 |
34 |
35 |
36 | {{ __('Save') }}
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/resources/views/profile/update-profile-information-form.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ __('Profile Information') }}
4 |
5 |
6 |
7 | {{ __('Update your account\'s profile information and email address.') }}
8 |
9 |
10 |
11 |
12 | @if (Laravel\Jetstream\Jetstream::managesProfilePhotos())
13 |
14 |
15 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
38 |
39 |
40 |
41 |
42 | {{ __('Select A New Photo') }}
43 |
44 |
45 | @if ($this->user->profile_photo_path)
46 |
47 | {{ __('Remove Photo') }}
48 |
49 | @endif
50 |
51 |
52 |
53 | @endif
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | {{ __('Saved.') }}
73 |
74 |
75 |
76 | {{ __('Save') }}
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/resources/views/terms.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {!! $terms !!}
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/action-message.blade.php:
--------------------------------------------------------------------------------
1 | @props(['on'])
2 |
3 |
merge(['class' => 'text-sm text-gray-600']) }}>
9 | {{ $slot->isEmpty() ? 'Saved.' : $slot }}
10 |
11 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/action-section.blade.php:
--------------------------------------------------------------------------------
1 |
merge(['class' => 'md:grid md:grid-cols-3 md:gap-6']) }}>
2 |
3 | {{ $title }}
4 | {{ $description }}
5 |
6 |
7 |
8 |
9 | {{ $content }}
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/application-logo.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/application-mark.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/authentication-card-logo.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/authentication-card.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ $logo }}
4 |
5 |
6 |
7 | {{ $slot }}
8 |
9 |
10 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/banner.blade.php:
--------------------------------------------------------------------------------
1 | @props(['style' => session('flash.bannerStyle', 'success'), 'message' => session('flash.banner')])
2 |
3 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/button.blade.php:
--------------------------------------------------------------------------------
1 |
merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:outline-none focus:border-gray-900 focus:ring focus:ring-gray-300 disabled:opacity-25 transition']) }}>
2 | {{ $slot }}
3 |
4 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/checkbox.blade.php:
--------------------------------------------------------------------------------
1 |
merge(['class' => 'rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!}>
2 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/confirmation-modal.blade.php:
--------------------------------------------------------------------------------
1 | @props(['id' => null, 'maxWidth' => null])
2 |
3 |
4 |
5 |
6 |
11 |
12 |
13 |
14 | {{ $title }}
15 |
16 |
17 |
18 | {{ $content }}
19 |
20 |
21 |
22 |
23 |
24 |
25 | {{ $footer }}
26 |
27 |
28 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/confirms-password.blade.php:
--------------------------------------------------------------------------------
1 | @props(['title' => __('Confirm Password'), 'content' => __('For your security, please confirm your password to continue.'), 'button' => __('Confirm')])
2 |
3 | @php
4 | $confirmableId = md5($attributes->wire('then'));
5 | @endphp
6 |
7 |
wire('then') }}
9 | x-data
10 | x-ref="span"
11 | x-on:click="$wire.startConfirmingPassword('{{ $confirmableId }}')"
12 | x-on:password-confirmed.window="setTimeout(() => $event.detail.id === '{{ $confirmableId }}' && $refs.span.dispatchEvent(new CustomEvent('then', { bubbles: false })), 250);"
13 | >
14 | {{ $slot }}
15 |
16 |
17 | @once
18 |
19 |
20 | {{ $title }}
21 |
22 |
23 |
24 | {{ $content }}
25 |
26 |
27 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {{ __('Cancel') }}
39 |
40 |
41 |
42 | {{ $button }}
43 |
44 |
45 |
46 | @endonce
47 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/danger-button.blade.php:
--------------------------------------------------------------------------------
1 |
merge(['type' => 'button', 'class' => 'inline-flex items-center justify-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-500 focus:outline-none focus:border-red-700 focus:ring focus:ring-red-200 active:bg-red-600 disabled:opacity-25 transition']) }}>
2 | {{ $slot }}
3 |
4 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/dialog-modal.blade.php:
--------------------------------------------------------------------------------
1 | @props(['id' => null, 'maxWidth' => null])
2 |
3 |
4 |
5 |
6 | {{ $title }}
7 |
8 |
9 |
10 | {{ $content }}
11 |
12 |
13 |
14 |
15 | {{ $footer }}
16 |
17 |
18 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/dropdown-link.blade.php:
--------------------------------------------------------------------------------
1 |
merge(['class' => 'block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition']) }}>{{ $slot }}
2 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/dropdown.blade.php:
--------------------------------------------------------------------------------
1 | @props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white', 'dropdownClasses' => ''])
2 |
3 | @php
4 | switch ($align) {
5 | case 'left':
6 | $alignmentClasses = 'origin-top-left left-0';
7 | break;
8 | case 'top':
9 | $alignmentClasses = 'origin-top';
10 | break;
11 | case 'none':
12 | case 'false':
13 | $alignmentClasses = '';
14 | break;
15 | case 'right':
16 | default:
17 | $alignmentClasses = 'origin-top-right right-0';
18 | break;
19 | }
20 |
21 | switch ($width) {
22 | case '48':
23 | $width = 'w-48';
24 | break;
25 | }
26 | @endphp
27 |
28 |
29 |
30 | {{ $trigger }}
31 |
32 |
33 |
43 |
44 | {{ $content }}
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/form-section.blade.php:
--------------------------------------------------------------------------------
1 | @props(['submit'])
2 |
3 |
merge(['class' => 'md:grid md:grid-cols-3 md:gap-6']) }}>
4 |
5 | {{ $title }}
6 | {{ $description }}
7 |
8 |
9 |
24 |
25 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/input-error.blade.php:
--------------------------------------------------------------------------------
1 | @props(['for'])
2 |
3 | @error($for)
4 |
merge(['class' => 'text-sm text-red-600']) }}>{{ $message }}
5 | @enderror
6 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/input.blade.php:
--------------------------------------------------------------------------------
1 | @props(['disabled' => false])
2 |
3 |
merge(['class' => 'border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm']) !!}>
4 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/label.blade.php:
--------------------------------------------------------------------------------
1 | @props(['value'])
2 |
3 |
merge(['class' => 'block font-medium text-sm text-gray-700']) }}>
4 | {{ $value ?? $slot }}
5 |
6 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/modal.blade.php:
--------------------------------------------------------------------------------
1 | @props(['id', 'maxWidth'])
2 |
3 | @php
4 | $id = $id ?? md5($attributes->wire('model'));
5 |
6 | $maxWidth = [
7 | 'sm' => 'sm:max-w-sm',
8 | 'md' => 'sm:max-w-md',
9 | 'lg' => 'sm:max-w-lg',
10 | 'xl' => 'sm:max-w-xl',
11 | '2xl' => 'sm:max-w-2xl',
12 | ][$maxWidth ?? '2xl'];
13 | @endphp
14 |
15 |
50 |
58 |
59 |
66 | {{ $slot }}
67 |
68 |
69 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/nav-link.blade.php:
--------------------------------------------------------------------------------
1 | @props(['active'])
2 |
3 | @php
4 | $classes = ($active ?? false)
5 | ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 text-sm font-medium leading-5 text-gray-900 focus:outline-none focus:border-indigo-700 transition'
6 | : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-300 transition';
7 | @endphp
8 |
9 |
merge(['class' => $classes]) }}>
10 | {{ $slot }}
11 |
12 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/responsive-nav-link.blade.php:
--------------------------------------------------------------------------------
1 | @props(['active'])
2 |
3 | @php
4 | $classes = ($active ?? false)
5 | ? 'block pl-3 pr-4 py-2 border-l-4 border-indigo-400 text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition'
6 | : 'block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition';
7 | @endphp
8 |
9 |
merge(['class' => $classes]) }}>
10 | {{ $slot }}
11 |
12 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/secondary-button.blade.php:
--------------------------------------------------------------------------------
1 |
merge(['type' => 'button', 'class' => 'inline-flex items-center px-4 py-2 bg-white border border-gray-300 rounded-md font-semibold text-xs text-gray-700 uppercase tracking-widest shadow-sm hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:ring focus:ring-blue-200 active:text-gray-800 active:bg-gray-50 disabled:opacity-25 transition']) }}>
2 | {{ $slot }}
3 |
4 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/section-border.blade.php:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/section-title.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ $title }}
4 |
5 |
6 | {{ $description }}
7 |
8 |
9 |
10 |
11 | {{ $aside ?? '' }}
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/switchable-team.blade.php:
--------------------------------------------------------------------------------
1 | @props(['team', 'component' => 'jet-dropdown-link'])
2 |
3 |
20 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/components/validation-errors.blade.php:
--------------------------------------------------------------------------------
1 | @if ($errors->any())
2 |
3 |
{{ __('Whoops! Something went wrong.') }}
4 |
5 |
6 | @foreach ($errors->all() as $error)
7 | {{ $error }}
8 | @endforeach
9 |
10 |
11 | @endif
12 |
--------------------------------------------------------------------------------
/resources/views/vendor/jetstream/mail/team-invitation.blade.php:
--------------------------------------------------------------------------------
1 | @component('mail::message')
2 | {{ __('You have been invited to join the :team team!', ['team' => $invitation->team->name]) }}
3 |
4 | @if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::registration()))
5 | {{ __('If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:') }}
6 |
7 | @component('mail::button', ['url' => route('register')])
8 | {{ __('Create Account') }}
9 | @endcomponent
10 |
11 | {{ __('If you already have an account, you may accept this invitation by clicking the button below:') }}
12 |
13 | @else
14 | {{ __('You may accept this invitation by clicking the button below:') }}
15 | @endif
16 |
17 |
18 | @component('mail::button', ['url' => $acceptUrl])
19 | {{ __('Accept Invitation') }}
20 | @endcomponent
21 |
22 | {{ __('If you did not expect to receive an invitation to this team, you may discard this email.') }}
23 | @endcomponent
24 |
--------------------------------------------------------------------------------
/routes/api.php:
--------------------------------------------------------------------------------
1 | get('/user', function (Request $request) {
18 | return $request->user();
19 | });
20 |
--------------------------------------------------------------------------------
/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
18 | });
19 |
--------------------------------------------------------------------------------
/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
19 | })->purpose('Display an inspiring quote');
20 |
--------------------------------------------------------------------------------
/routes/web.php:
--------------------------------------------------------------------------------
1 | name("root",);
10 |
11 | Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
12 | return view('dashboard');
13 | })->name('dashboard');
14 |
15 | Route::resource(name: 'users', controller: \App\Http\Controllers\UserController::class);
16 |
17 | Route::get('/sessions', [SessionController::class, 'index'])->name('sessions.index');
18 |
19 | Route::get('/clear-cache', function() {
20 | $configCache = Artisan::call('config:cache');
21 | $clearCache = Artisan::call('cache:clear');
22 | return "Cache cleared";
23 | });
--------------------------------------------------------------------------------
/server.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | $uri = urldecode(
11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
12 | );
13 |
14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the
15 | // built-in PHP web server. This provides a convenient way to test a Laravel
16 | // application without having installed a "real" web server software here.
17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
18 | return false;
19 | }
20 |
21 | require_once __DIR__.'/public/index.php';
22 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | compiled.php
2 | config.php
3 | down
4 | events.scanned.php
5 | maintenance.php
6 | routes.php
7 | routes.scanned.php
8 | schedule-*
9 | services.json
10 |
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/framework/cache/data/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | const defaultTheme = require('tailwindcss/defaultTheme');
2 |
3 | module.exports = {
4 | content: [
5 | './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
6 | './vendor/laravel/jetstream/**/*.blade.php',
7 | './storage/framework/views/*.php',
8 | './resources/views/**/*.blade.php',
9 | ],
10 |
11 | theme: {
12 | extend: {
13 | fontFamily: {
14 | sans: ['Nunito', ...defaultTheme.fontFamily.sans],
15 | },
16 | },
17 | },
18 |
19 | plugins: [require('@tailwindcss/forms'), require('@tailwindcss/typography')],
20 | };
21 |
--------------------------------------------------------------------------------
/tests/CreatesApplication.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
19 |
20 | return $app;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/tests/Feature/ApiTokenPermissionsTest.php:
--------------------------------------------------------------------------------
1 | markTestSkipped('API support is not enabled.');
21 | }
22 |
23 | $this->actingAs($user = User::factory()->withPersonalTeam()->create());
24 |
25 | $token = $user->tokens()->create([
26 | 'name' => 'Test Token',
27 | 'token' => Str::random(40),
28 | 'abilities' => ['create', 'read'],
29 | ]);
30 |
31 | Livewire::test(ApiTokenManager::class)
32 | ->set(['managingPermissionsFor' => $token])
33 | ->set(['updateApiTokenForm' => [
34 | 'permissions' => [
35 | 'delete',
36 | 'missing-permission',
37 | ],
38 | ]])
39 | ->call('updateApiToken');
40 |
41 | $this->assertTrue($user->fresh()->tokens->first()->can('delete'));
42 | $this->assertFalse($user->fresh()->tokens->first()->can('read'));
43 | $this->assertFalse($user->fresh()->tokens->first()->can('missing-permission'));
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/tests/Feature/AuthenticationTest.php:
--------------------------------------------------------------------------------
1 | get('/login');
18 |
19 | $response->assertResponseStatus(200);
20 | }
21 |
22 | public function test_users_can_authenticate_using_the_login_screen()
23 | {
24 | $user = User::factory()->create();
25 |
26 | $response = $this->post('/login', [
27 | 'email' => $user->email,
28 | 'password' => 'password',
29 | ]);
30 |
31 | $this->assertAuthenticated();
32 | $response->assertRedirectedToRoute('dashboard');
33 | }
34 |
35 | public function test_users_can_not_authenticate_with_invalid_password()
36 | {
37 | $user = User::factory()->create();
38 |
39 | $this->post('/login', [
40 | 'email' => $user->email,
41 | 'password' => 'wrong-password',
42 | ]);
43 |
44 | $this->assertGuest();
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/tests/Feature/BrowserSessionsTest.php:
--------------------------------------------------------------------------------
1 | actingAs($user = User::factory()->create());
18 |
19 | Livewire::test(LogoutOtherBrowserSessionsForm::class)
20 | ->set('password', 'password')
21 | ->call('logoutOtherBrowserSessions');
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/tests/Feature/CreateApiTokenTest.php:
--------------------------------------------------------------------------------
1 | markTestSkipped('API support is not enabled.');
20 | }
21 |
22 | $this->actingAs($user = User::factory()->withPersonalTeam()->create());
23 |
24 | Livewire::test(ApiTokenManager::class)
25 | ->set(['createApiTokenForm' => [
26 | 'name' => 'Test Token',
27 | 'permissions' => [
28 | 'read',
29 | 'update',
30 | ],
31 | ]])
32 | ->call('createApiToken');
33 |
34 | $this->assertCount(1, $user->fresh()->tokens);
35 | $this->assertEquals('Test Token', $user->fresh()->tokens->first()->name);
36 | $this->assertTrue($user->fresh()->tokens->first()->can('read'));
37 | $this->assertFalse($user->fresh()->tokens->first()->can('delete'));
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/tests/Feature/DeleteAccountTest.php:
--------------------------------------------------------------------------------
1 | markTestSkipped('Account deletion is not enabled.');
20 | }
21 |
22 | $this->actingAs($user = User::factory()->create());
23 |
24 | $component = Livewire::test(DeleteUserForm::class)
25 | ->set('password', 'password')
26 | ->call('deleteUser');
27 |
28 | $this->assertNull($user->fresh());
29 | }
30 |
31 | public function test_correct_password_must_be_provided_before_account_can_be_deleted()
32 | {
33 | if (! Features::hasAccountDeletionFeatures()) {
34 | return $this->markTestSkipped('Account deletion is not enabled.');
35 | }
36 |
37 | $this->actingAs($user = User::factory()->create());
38 |
39 | Livewire::test(DeleteUserForm::class)
40 | ->set('password', 'wrong-password')
41 | ->call('deleteUser')
42 | ->assertHasErrors(['password']);
43 |
44 | $this->assertNotNull($user->fresh());
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/tests/Feature/DeleteApiTokenTest.php:
--------------------------------------------------------------------------------
1 | markTestSkipped('API support is not enabled.');
21 | }
22 |
23 | $this->actingAs($user = User::factory()->withPersonalTeam()->create());
24 |
25 | $token = $user->tokens()->create([
26 | 'name' => 'Test Token',
27 | 'token' => Str::random(40),
28 | 'abilities' => ['create', 'read'],
29 | ]);
30 |
31 | Livewire::test(ApiTokenManager::class)
32 | ->set(['apiTokenIdBeingDeleted' => $token->id])
33 | ->call('deleteApiToken');
34 |
35 | $this->assertCount(0, $user->fresh()->tokens);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/tests/Feature/EmailVerificationTest.php:
--------------------------------------------------------------------------------
1 | markTestSkipped('Email verification not enabled.');
22 | }
23 |
24 | $user = User::factory()->withPersonalTeam()->unverified()->create();
25 |
26 | $response = $this->actingAs($user)->get('/email/verify');
27 |
28 | $response->assertStatus(200);
29 | }
30 |
31 | public function test_email_can_be_verified()
32 | {
33 | if (! Features::enabled(Features::emailVerification())) {
34 | return $this->markTestSkipped('Email verification not enabled.');
35 | }
36 |
37 | Event::fake();
38 |
39 | $user = User::factory()->unverified()->create();
40 |
41 | $verificationUrl = URL::temporarySignedRoute(
42 | 'verification.verify',
43 | now()->addMinutes(60),
44 | ['id' => $user->id, 'hash' => sha1($user->email)]
45 | );
46 |
47 | $response = $this->actingAs($user)->get($verificationUrl);
48 |
49 | Event::assertDispatched(Verified::class);
50 |
51 | $this->assertTrue($user->fresh()->hasVerifiedEmail());
52 | $response->assertRedirect(RouteServiceProvider::HOME.'?verified=1');
53 | }
54 |
55 | public function test_email_can_not_verified_with_invalid_hash()
56 | {
57 | if (! Features::enabled(Features::emailVerification())) {
58 | return $this->markTestSkipped('Email verification not enabled.');
59 | }
60 |
61 | $user = User::factory()->unverified()->create();
62 |
63 | $verificationUrl = URL::temporarySignedRoute(
64 | 'verification.verify',
65 | now()->addMinutes(60),
66 | ['id' => $user->id, 'hash' => sha1('wrong-email')]
67 | );
68 |
69 | $this->actingAs($user)->get($verificationUrl);
70 |
71 | $this->assertFalse($user->fresh()->hasVerifiedEmail());
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/tests/Feature/ExampleTest.php:
--------------------------------------------------------------------------------
1 | get('/');
18 |
19 | $response->assertResponseStatus(200);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/Feature/PasswordConfirmationTest.php:
--------------------------------------------------------------------------------
1 | withPersonalTeam()->create();
17 |
18 | $response = $this->actingAs($user)->get('/user/confirm-password');
19 |
20 | $response->assertResponseStatus(200);
21 | }
22 |
23 | /**
24 | * @TODO: This test is failing
25 | */
26 | public function test_password_can_be_confirmed()
27 | {
28 | $user = User::factory()->create();
29 |
30 | $response = $this->actingAs($user)->post('/user/confirm-password', [
31 | 'password' => 'password',
32 | ]);
33 |
34 | $this->markTestIncomplete(
35 | 'This test has not been implemented yet.'
36 | );
37 | // $response->assertRedirect();
38 | // $response->assertSessionHasNoErrors();
39 | }
40 |
41 | public function test_password_is_not_confirmed_with_invalid_password()
42 | {
43 | $user = User::factory()->create();
44 |
45 | $response = $this->actingAs($user)->post('/user/confirm-password', [
46 | 'password' => 'wrong-password',
47 | ]);
48 |
49 | $response->assertSessionHasErrors();
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/tests/Feature/PasswordResetTest.php:
--------------------------------------------------------------------------------
1 | markTestSkipped('Password updates are not enabled.');
20 | }
21 |
22 | $response = $this->get('/forgot-password');
23 |
24 | $response->assertResponseStatus(200);
25 | }
26 |
27 | public function test_reset_password_link_can_be_requested()
28 | {
29 | if (! Features::enabled(Features::resetPasswords())) {
30 | return $this->markTestSkipped('Password updates are not enabled.');
31 | }
32 |
33 | Notification::fake();
34 |
35 | $user = User::factory()->create();
36 |
37 | $response = $this->post('/forgot-password', [
38 | 'email' => $user->email,
39 | ]);
40 |
41 | Notification::assertSentTo($user, ResetPassword::class);
42 | }
43 |
44 | public function test_reset_password_screen_can_be_rendered()
45 | {
46 | if (! Features::enabled(Features::resetPasswords())) {
47 | return $this->markTestSkipped('Password updates are not enabled.');
48 | }
49 |
50 | Notification::fake();
51 |
52 | $user = User::factory()->create();
53 |
54 | $response = $this->post('/forgot-password', [
55 | 'email' => $user->email,
56 | ]);
57 |
58 | Notification::assertSentTo($user, ResetPassword::class, function ($notification) {
59 | $response = $this->get('/reset-password/'.$notification->token);
60 |
61 | $response->assertResponseStatus(200);
62 |
63 | return true;
64 | });
65 | }
66 |
67 | public function test_password_can_be_reset_with_valid_token()
68 | {
69 | if (! Features::enabled(Features::resetPasswords())) {
70 | return $this->markTestSkipped('Password updates are not enabled.');
71 | }
72 |
73 | Notification::fake();
74 |
75 | $user = User::factory()->create();
76 |
77 | $response = $this->post('/forgot-password', [
78 | 'email' => $user->email,
79 | ]);
80 |
81 | Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
82 | $response = $this->post('/reset-password', [
83 | 'token' => $notification->token,
84 | 'email' => $user->email,
85 | 'password' => 'password',
86 | 'password_confirmation' => 'password',
87 | ]);
88 |
89 | // $response->assertSessionHasNoErrors();
90 | $this->markTestIncomplete(
91 | 'This test has not been implemented yet.'
92 | );
93 | return true;
94 | });
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/tests/Feature/ProfileInformationTest.php:
--------------------------------------------------------------------------------
1 | actingAs($user = User::factory()->create());
18 |
19 | $component = Livewire::test(UpdateProfileInformationForm::class);
20 |
21 | $this->assertEquals($user->name, $component->state['name']);
22 | $this->assertEquals($user->email, $component->state['email']);
23 | }
24 |
25 | public function test_profile_information_can_be_updated()
26 | {
27 | $this->actingAs($user = User::factory()->create());
28 |
29 | Livewire::test(UpdateProfileInformationForm::class)
30 | ->set('state', ['name' => 'Test Name', 'email' => 'test@example.com'])
31 | ->call('updateProfileInformation');
32 |
33 | $this->assertEquals('Test Name', $user->fresh()->name);
34 | $this->assertEquals('test@example.com', $user->fresh()->email);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/tests/Feature/RegistrationTest.php:
--------------------------------------------------------------------------------
1 | markTestSkipped('Registration support is not enabled.');
19 | }
20 |
21 | $response = $this->get('/register');
22 |
23 | $response->assertResponseStatus(200);
24 | }
25 |
26 | public function test_registration_screen_cannot_be_rendered_if_support_is_disabled()
27 | {
28 | if (Features::enabled(Features::registration())) {
29 | return $this->markTestSkipped('Registration support is enabled.');
30 | }
31 |
32 | $response = $this->get('/register');
33 |
34 | $response->assertStatus(404);
35 | }
36 |
37 | public function test_new_users_can_register()
38 | {
39 | if (! Features::enabled(Features::registration())) {
40 | return $this->markTestSkipped('Registration support is not enabled.');
41 | }
42 |
43 | $response = $this->post('/register', [
44 | 'name' => 'Test User',
45 | 'email' => 'test@example.com',
46 | 'password' => 'password',
47 | 'password_confirmation' => 'password',
48 | 'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature(),
49 | ]);
50 |
51 | $this->markTestIncomplete(
52 | 'This test has not been implemented yet.'
53 | );
54 | // $this->assertAuthenticated();
55 |
56 | $response->assertRedirect(RouteServiceProvider::HOME);
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/tests/Feature/TwoFactorAuthenticationSettingsTest.php:
--------------------------------------------------------------------------------
1 | markTestIncomplete(
18 | 'This test has not been implemented yet.'
19 | );
20 |
21 | $this->actingAs($user = User::factory()->create());
22 |
23 | $this->withSession(['auth.password_confirmed_at' => time()]);
24 |
25 | Livewire::test(TwoFactorAuthenticationForm::class)
26 | ->call('enableTwoFactorAuthentication');
27 |
28 | $user = $user->fresh();
29 |
30 | $this->assertNotNull($user->two_factor_secret);
31 | $this->assertCount(8, $user->recoveryCodes());
32 | }
33 |
34 | public function test_recovery_codes_can_be_regenerated()
35 | {
36 | $this->markTestIncomplete(
37 | 'This test has not been implemented yet.'
38 | );
39 | $this->actingAs($user = User::factory()->create());
40 |
41 | $this->withSession(['auth.password_confirmed_at' => time()]);
42 |
43 | $component = Livewire::test(TwoFactorAuthenticationForm::class)
44 | ->call('enableTwoFactorAuthentication')
45 | ->call('regenerateRecoveryCodes');
46 |
47 | $user = $user->fresh();
48 |
49 | $component->call('regenerateRecoveryCodes');
50 |
51 | $this->assertCount(8, $user->recoveryCodes());
52 | $this->assertCount(8, array_diff($user->recoveryCodes(), $user->fresh()->recoveryCodes()));
53 | }
54 |
55 | public function test_two_factor_authentication_can_be_disabled()
56 | {
57 | $this->markTestIncomplete(
58 | 'This test has not been implemented yet.'
59 | );
60 |
61 | $this->actingAs($user = User::factory()->create());
62 |
63 | $this->withSession(['auth.password_confirmed_at' => time()]);
64 |
65 | $component = Livewire::test(TwoFactorAuthenticationForm::class)
66 | ->call('enableTwoFactorAuthentication');
67 |
68 | $this->assertNotNull($user->fresh()->two_factor_secret);
69 |
70 | $component->call('disableTwoFactorAuthentication');
71 |
72 | $this->assertNull($user->fresh()->two_factor_secret);
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/tests/Feature/UpdatePasswordTest.php:
--------------------------------------------------------------------------------
1 | actingAs($user = User::factory()->create());
19 |
20 | Livewire::test(UpdatePasswordForm::class)
21 | ->set('state', [
22 | 'current_password' => 'password',
23 | 'password' => 'new-password',
24 | 'password_confirmation' => 'new-password',
25 | ])
26 | ->call('updatePassword');
27 |
28 | $this->assertTrue(Hash::check('new-password', $user->fresh()->password));
29 | }
30 |
31 | public function test_current_password_must_be_correct()
32 | {
33 | $this->actingAs($user = User::factory()->create());
34 |
35 | Livewire::test(UpdatePasswordForm::class)
36 | ->set('state', [
37 | 'current_password' => 'wrong-password',
38 | 'password' => 'new-password',
39 | 'password_confirmation' => 'new-password',
40 | ])
41 | ->call('updatePassword')
42 | ->assertHasErrors(['current_password']);
43 |
44 | $this->assertTrue(Hash::check('password', $user->fresh()->password));
45 | }
46 |
47 | public function test_new_passwords_must_match()
48 | {
49 | $this->actingAs($user = User::factory()->create());
50 |
51 | Livewire::test(UpdatePasswordForm::class)
52 | ->set('state', [
53 | 'current_password' => 'password',
54 | 'password' => 'new-password',
55 | 'password_confirmation' => 'wrong-password',
56 | ])
57 | ->call('updatePassword')
58 | ->assertHasErrors(['password']);
59 |
60 | $this->assertTrue(Hash::check('password', $user->fresh()->password));
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | app->detectEnvironment( function () {
23 | return 'testing';
24 | });
25 |
26 | }
27 |
28 | public function tearDown() : void
29 | {
30 | parent::tearDown();
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/tests/Unit/ExampleTest.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/webpack.mix.js:
--------------------------------------------------------------------------------
1 | const mix = require('laravel-mix');
2 |
3 | /*
4 | |--------------------------------------------------------------------------
5 | | Mix Asset Management
6 | |--------------------------------------------------------------------------
7 | |
8 | | Mix provides a clean, fluent API for defining some Webpack build steps
9 | | for your Laravel applications. By default, we are compiling the CSS
10 | | file for the application as well as bundling up all the JS files.
11 | |
12 | */
13 |
14 | mix.js('resources/js/app.js', 'public/js')
15 | .postCss('resources/css/app.css', 'public/css', [
16 | require('postcss-import'),
17 | require('tailwindcss'),
18 | ]);
19 |
20 | if (mix.inProduction()) {
21 | mix.version();
22 | }
23 |
--------------------------------------------------------------------------------