diff --git a/src/app/Http/Controllers/Dashboard/UserProfileController.php b/src/app/Http/Controllers/Dashboard/UserProfileController.php new file mode 100644 index 0000000..6873b30 --- /dev/null +++ b/src/app/Http/Controllers/Dashboard/UserProfileController.php @@ -0,0 +1,86 @@ +validateTwoFactorAuthenticationState($request); + + return Jetstream::inertia()->render($request, 'Profile/Show', [ + 'sessions' => $this->sessions($request)->all(), + 'timezones' => timezone_identifiers_list(), + ]); + } + + /** + * Get the current sessions. + * + * @since 1.0.0 + * + * @param \Illuminate\Http\Request $request + * + * @return \Illuminate\Support\Collection + */ + public function sessions(Request $request): Collection + { + if (config('session.driver') !== 'database') { + return collect(); + } + + return collect( + DB::connection(config('session.connection'))->table(config('session.table', 'sessions')) + ->where('user_id', $request->user()->getAuthIdentifier()) + ->orderBy('last_activity', 'desc') + ->get() + )->map(function ($session) use ($request) { + $agent = $this->createAgent($session); + + return (object) [ + 'agent' => [ + 'is_desktop' => $agent->isDesktop(), + 'platform' => $agent->platform(), + 'browser' => $agent->browser(), + ], + 'ip_address' => $session->ip_address, + 'is_current_device' => $session->id === $request->session()->getId(), + 'last_active' => Carbon::createFromTimestamp($session->last_activity)->diffForHumans(), + ]; + }); + } + + /** + * Create a new agent instance from the given session. + * + * @since 1.0.0 + * + * @param mixed $session + * + * @return \Jenssegers\Agent\Agent + */ + protected function createAgent($session): Agent + { + return tap(new Agent, function ($agent) use ($session) { + $agent->setUserAgent($session->user_agent); + }); + } +} diff --git a/src/app/Views/Components/CountryFlags.php b/src/app/Views/Components/CountryFlags.php new file mode 100644 index 0000000..a389d6d --- /dev/null +++ b/src/app/Views/Components/CountryFlags.php @@ -0,0 +1,28 @@ + +import { reactive } from 'vue' +import Modal from './Modal.vue' + +const emit = defineEmits(['close']) + +const props = defineProps({ + show: { + default: false + }, + maxWidth: { + default: '2xl' + }, + closeable: { + default: true + }, +}) + +// computed properties + +// watchers + +// lifecycle hooks + +// methods +function close() { + emit('close') +} + + + + diff --git a/src/resources/js/Components/Modals/ConfirmPassword.vue b/src/resources/js/Components/Modals/ConfirmPassword.vue new file mode 100644 index 0000000..a24becb --- /dev/null +++ b/src/resources/js/Components/Modals/ConfirmPassword.vue @@ -0,0 +1,101 @@ + + + diff --git a/src/resources/js/Components/Modals/Dialog.vue b/src/resources/js/Components/Modals/Dialog.vue new file mode 100644 index 0000000..0493d8c --- /dev/null +++ b/src/resources/js/Components/Modals/Dialog.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/resources/js/Components/Modals/Modal.vue b/src/resources/js/Components/Modals/Modal.vue new file mode 100644 index 0000000..4a281d4 --- /dev/null +++ b/src/resources/js/Components/Modals/Modal.vue @@ -0,0 +1,98 @@ + + + diff --git a/src/resources/views/components/country-flag.blade.php b/src/resources/views/components/country-flag.blade.php new file mode 100644 index 0000000..d77346b --- /dev/null +++ b/src/resources/views/components/country-flag.blade.php @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/resources/views/components/flags.blade.php b/src/resources/views/components/flags.blade.php new file mode 100644 index 0000000..3c43e9f --- /dev/null +++ b/src/resources/views/components/flags.blade.php @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/resources/views/components/flags/br_BR.blade.php b/src/resources/views/components/flags/br_BR.blade.php new file mode 100644 index 0000000..08a2519 --- /dev/null +++ b/src/resources/views/components/flags/br_BR.blade.php @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/resources/views/components/flags/cn_CN.blade.php b/src/resources/views/components/flags/cn_CN.blade.php new file mode 100644 index 0000000..260da62 --- /dev/null +++ b/src/resources/views/components/flags/cn_CN.blade.php @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/resources/views/components/flags/de_DE.blade.php b/src/resources/views/components/flags/de_DE.blade.php new file mode 100644 index 0000000..f7a6765 --- /dev/null +++ b/src/resources/views/components/flags/de_DE.blade.php @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/resources/views/components/flags/en_US.blade.php b/src/resources/views/components/flags/en_US.blade.php new file mode 100644 index 0000000..7dd9842 --- /dev/null +++ b/src/resources/views/components/flags/en_US.blade.php @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/resources/views/components/flags/es_MX.blade.php b/src/resources/views/components/flags/es_MX.blade.php new file mode 100644 index 0000000..2c4a52d --- /dev/null +++ b/src/resources/views/components/flags/es_MX.blade.php @@ -0,0 +1,415 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/resources/views/components/flags/es_SP.blade.php b/src/resources/views/components/flags/es_SP.blade.php new file mode 100644 index 0000000..e39f143 --- /dev/null +++ b/src/resources/views/components/flags/es_SP.blade.php @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/resources/views/components/flags/fr_FR.blade.php b/src/resources/views/components/flags/fr_FR.blade.php new file mode 100644 index 0000000..0dafadf --- /dev/null +++ b/src/resources/views/components/flags/fr_FR.blade.php @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/resources/views/components/flags/jp_JP.blade.php b/src/resources/views/components/flags/jp_JP.blade.php new file mode 100644 index 0000000..6403625 --- /dev/null +++ b/src/resources/views/components/flags/jp_JP.blade.php @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/resources/views/components/flags/tw_TW.blade.php b/src/resources/views/components/flags/tw_TW.blade.php new file mode 100644 index 0000000..4fd0231 --- /dev/null +++ b/src/resources/views/components/flags/tw_TW.blade.php @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/resources/views/meta/facebook.blade.php b/src/resources/views/meta/facebook.blade.php new file mode 100644 index 0000000..4c06ea5 --- /dev/null +++ b/src/resources/views/meta/facebook.blade.php @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/resources/views/meta/geo-tags.blade.php b/src/resources/views/meta/geo-tags.blade.php new file mode 100644 index 0000000..5e409b3 --- /dev/null +++ b/src/resources/views/meta/geo-tags.blade.php @@ -0,0 +1,5 @@ + + + + + diff --git a/src/resources/views/meta/monetization.blade.php b/src/resources/views/meta/monetization.blade.php new file mode 100644 index 0000000..b410cbc --- /dev/null +++ b/src/resources/views/meta/monetization.blade.php @@ -0,0 +1,2 @@ + + diff --git a/src/resources/views/meta/twitter.blade.php b/src/resources/views/meta/twitter.blade.php new file mode 100644 index 0000000..9d04d85 --- /dev/null +++ b/src/resources/views/meta/twitter.blade.php @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/resources/views/meta/website-verifications.blade.php b/src/resources/views/meta/website-verifications.blade.php new file mode 100644 index 0000000..c715634 --- /dev/null +++ b/src/resources/views/meta/website-verifications.blade.php @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/routes/web.php b/src/routes/web.php new file mode 100644 index 0000000..ad9977a --- /dev/null +++ b/src/routes/web.php @@ -0,0 +1,22 @@ +group(function () { + $authMiddleware = config('jetstream.guard') + ? 'auth:'.config('jetstream.guard') + : 'auth'; + + Route::group(['middleware' => [$authMiddleware, 'verified']], function () { + // User & Profile... + Route::get('/user/profile', [UserProfileController::class, 'show']) + ->name('profile.show'); + }); +});