90 lines
3.3 KiB
PHP
90 lines
3.3 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Api;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use App\Models\User;
|
||
use Illuminate\Http\JsonResponse;
|
||
use Illuminate\Http\Request;
|
||
|
||
class BridgeAuthController extends Controller
|
||
{
|
||
/**
|
||
* احراز هویت از طریق وردپرس Bridge
|
||
* POST /api/v1/bridge/login
|
||
*
|
||
* این endpoint فقط برای پلاگین وردپرس IFNEX Bridge است.
|
||
* با API Key مشترک و user_id وردپرس، توکن Sanctum میدهد.
|
||
*/
|
||
public function login(Request $request): JsonResponse
|
||
{
|
||
$validated = $request->validate([
|
||
'bridge_api_key' => ['required', 'string'],
|
||
'wp_user_id' => ['required', 'integer'],
|
||
'wp_user_email' => ['required', 'email'],
|
||
'wp_user_name' => ['nullable', 'string', 'max:255'],
|
||
'token_name' => ['nullable', 'string', 'max:100'],
|
||
]);
|
||
|
||
// ۱. بررسی API Key
|
||
$expectedKey = config('ifnex.bridge_api_key');
|
||
if (empty($expectedKey) || $expectedKey === 'change-this-secret-key') {
|
||
return response()->json([
|
||
'success' => false,
|
||
'message' => 'Bridge API Key تنظیم نشده است.',
|
||
], 500);
|
||
}
|
||
|
||
if (!hash_equals($expectedKey, $validated['bridge_api_key'])) {
|
||
return response()->json([
|
||
'success' => false,
|
||
'message' => 'Bridge API Key نامعتبر است.',
|
||
], 401);
|
||
}
|
||
|
||
// ۲. پیدا کردن کاربر در لاراول (با ایمیل)
|
||
$user = User::where('email', $validated['wp_user_email'])->first();
|
||
|
||
if (!$user) {
|
||
return response()->json([
|
||
'success' => false,
|
||
'message' => 'کاربر در سیستم یافت نشد. لطفاً با مدیر سیستم تماس بگیرید.',
|
||
'debug' => 'email_not_found: ' . $validated['wp_user_email'],
|
||
], 404);
|
||
}
|
||
|
||
// ۳. بررسی فعال بودن کاربر
|
||
if (isset($user->is_active) && !$user->is_active) {
|
||
return response()->json([
|
||
'success' => false,
|
||
'message' => 'حساب کاربری شما غیرفعال است.',
|
||
], 403);
|
||
}
|
||
|
||
// ۴. ذخیره wp_user_id در metadata کاربر (اختیاری، برای ردیابی)
|
||
$metadata = $user->metadata ?? [];
|
||
if (!is_array($metadata)) $metadata = [];
|
||
$metadata['wp_user_id'] = $validated['wp_user_id'];
|
||
$metadata['wp_synced_at'] = now()->toIso8601String();
|
||
|
||
// اگر فیلد metadata در User هست، ذخیره کن
|
||
if (in_array('metadata', \Schema::getColumnListing('users'))) {
|
||
$user->update(['metadata' => $metadata]);
|
||
}
|
||
|
||
// ۵. ایجاد توکن Sanctum
|
||
$tokenName = $validated['token_name'] ?? 'wordpress-bridge';
|
||
$token = $user->createToken($tokenName)->plainTextToken;
|
||
|
||
return response()->json([
|
||
'success' => true,
|
||
'token' => $token,
|
||
'user' => [
|
||
'id' => $user->id,
|
||
'name' => $user->name,
|
||
'email' => $user->email,
|
||
'wp_user_id' => $validated['wp_user_id'],
|
||
],
|
||
]);
|
||
}
|
||
} |