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)
+ );
+}