From f21aca5c1b64b2719a1dc4421680599c290ff34a Mon Sep 17 00:00:00 2001 From: Meghdad Date: Wed, 16 Jul 2025 14:17:06 +0330 Subject: [PATCH] implement find_or_create_user --- composer.json | 3 + dabestaniha-authenticate-bridge.php | 68 ++++++++++++------- .../Http}/Requests/BaseFormRequest.php | 3 +- .../DabestanihaAuthenticateRequest.php | 7 +- src/helpers.php | 9 +++ src/resources/views/server-error.php | 14 ++++ vendor/composer/autoload_real.php | 2 + vendor/composer/platform_check.php | 25 +++++++ 8 files changed, 105 insertions(+), 26 deletions(-) rename src/{ => app/Http}/Requests/BaseFormRequest.php (94%) rename src/{ => app/Http}/Requests/DabestanihaAuthenticateRequest.php (51%) create mode 100644 src/resources/views/server-error.php create mode 100644 vendor/composer/platform_check.php diff --git a/composer.json b/composer.json index d0ffcd9..1c025e7 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,8 @@ { "name": "dabestaniha/authenticate-bridge", + "require": { + "php": "^8.2" + }, "autoload": { "psr-4": { "Dabestaniha\\AuthenticateBridge\\": "src/" diff --git a/dabestaniha-authenticate-bridge.php b/dabestaniha-authenticate-bridge.php index 86fb107..1c1322b 100644 --- a/dabestaniha-authenticate-bridge.php +++ b/dabestaniha-authenticate-bridge.php @@ -1,14 +1,16 @@ validate(); $token = $request->string('token'); - var_dump($token); - die(); + $name = $request->string('name'); + $email = $request->string('email'); - // اینجا توکن رو اعتبارسنجی می‌کنیم - $user_id = verify_laravel_token_and_get_user_id($token); // این تابع رو بعداً می‌نویسیم + $user_id = find_or_create_user($email, $name); - if ($user_id) { - wp_set_auth_cookie($user_id); - wp_set_current_user($user_id); - do_action('wp_login', get_userdata($user_id)->user_login, get_userdata($user_id)); - - // انتقال به پنل - wp_redirect(home_url('/dashboard')); - exit; - } else { - wp_die('توکن نامعتبر است.'); - } + login_user($user_id); + wp_redirect(home_url('/dashboard')); + exit(); }); function verify_laravel_token_and_get_user_id($token): bool|int { - // مثلا: رمزگشایی JWT، یا بررسی دیتابیس توکن‌ها - // برای تست می‌تونیم یک توکن ثابت بذاریم + return 0; +} - if ($token === 'sample_token_123') { - return 2; // ID یک کاربر موجود +function find_or_create_user(string $email, string $name): int +{ + $user = get_user_by('email', $email); + + if ($user) { + return $user->ID; + } + $random_password = wp_generate_password(12, true); + $username = sanitize_user(strstr($email, '@', true)); + + if (username_exists($username)) { + $username .= '_'.wp_generate_password(4, false); } - return false; + $user_id = wp_create_user($username, $random_password, $email); + + if (is_wp_error($user_id)) { + wp_die(view('invalid-token'), 'Invalid Token', ['response' => 500]); + } + + wp_update_user([ + 'ID' => $user_id, + 'display_name' => $name, + ]); + + return $user_id; } + +function login_user(int $user_id): bool +{ + wp_set_auth_cookie($user_id); + wp_set_current_user($user_id); + do_action('wp_login', get_userdata($user_id)->user_login, get_userdata($user_id)); + return true; +} \ No newline at end of file diff --git a/src/Requests/BaseFormRequest.php b/src/app/Http/Requests/BaseFormRequest.php similarity index 94% rename from src/Requests/BaseFormRequest.php rename to src/app/Http/Requests/BaseFormRequest.php index f85ab51..2ab51e1 100644 --- a/src/Requests/BaseFormRequest.php +++ b/src/app/Http/Requests/BaseFormRequest.php @@ -1,6 +1,6 @@ !empty($value), + 'nullable' => true, default => false, }; } diff --git a/src/Requests/DabestanihaAuthenticateRequest.php b/src/app/Http/Requests/DabestanihaAuthenticateRequest.php similarity index 51% rename from src/Requests/DabestanihaAuthenticateRequest.php rename to src/app/Http/Requests/DabestanihaAuthenticateRequest.php index bc2cdcc..be774fe 100644 --- a/src/Requests/DabestanihaAuthenticateRequest.php +++ b/src/app/Http/Requests/DabestanihaAuthenticateRequest.php @@ -1,19 +1,22 @@ getRoutePath() === '/dabestaniha/login'; + $path = $this->getRoutePath(); + return trim($path, '/') === 'dabestaniha/login'; } public function rules(): array { return [ 'token' => ['required'], + 'name' => ['nullable'], + 'email' => ['nullable'], ]; } } \ No newline at end of file diff --git a/src/helpers.php b/src/helpers.php index 9ef3a77..42e59bb 100644 --- a/src/helpers.php +++ b/src/helpers.php @@ -7,3 +7,12 @@ if (!function_exists('view')) { return file_get_contents("{$basedir}resources/views/$view.php"); } } + +if (!function_exists('dd')) { + function dd(): never + { + echo '
';
+        array_map(function($arg) {var_dump($arg);}, func_get_args());
+        die;
+    }
+}
\ No newline at end of file
diff --git a/src/resources/views/server-error.php b/src/resources/views/server-error.php
new file mode 100644
index 0000000..31ce4f6
--- /dev/null
+++ b/src/resources/views/server-error.php
@@ -0,0 +1,14 @@
+
+
+
+
+
+    
+    خطا سامانه
+
+
+    

اوه...

+

مشکلی پیش آمده، لطفا تا دقایق دیگر دوباره امتحان کنید.

+ بازگشت به صفحه اصلی + + \ No newline at end of file diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index fc90f42..eebbd6a 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -22,6 +22,8 @@ class ComposerAutoloaderInit1e84672d5963a78cf9ba3e25dc66cf6f return self::$loader; } + require __DIR__ . '/platform_check.php'; + spl_autoload_register(array('ComposerAutoloaderInit1e84672d5963a78cf9ba3e25dc66cf6f', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); spl_autoload_unregister(array('ComposerAutoloaderInit1e84672d5963a78cf9ba3e25dc66cf6f', 'loadClassLoader')); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php new file mode 100644 index 0000000..14bf88d --- /dev/null +++ b/vendor/composer/platform_check.php @@ -0,0 +1,25 @@ += 80200)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 8.2.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + throw new \RuntimeException( + 'Composer detected issues in your platform: ' . implode(' ', $issues) + ); +}