Skip to main content
#P1390

POST /api/auth/connect/submit

Route Info

Method Endpoint Controller Middleware Purpose تگ Swagger
POST /api/auth/connect/submit UserController@connectSubmit domainAccess, ipTrust تأیید نهایی اتصال اپراتور به سرویس جانبی پس از دریافت رمز OTP tags={"Auth"}

توضیح عملکرد (Function Logic)

این Endpoint برای فاز نهایی فرآیند اتصال کاربر به سرویس جانبی (نظیر ربات تلگرام) استفاده می‌شود. پس از ارسال رمز موقت (OTP) از طریق مسیر POST /api/auth/connect/otp، اپراتور باید طی ۱۵ دقیقه آن را در این مسیر ثبت کند. در صورت صحت OTP و اعتبار زمانی آن، ارتباط کاربر ثبت و موفق اعلام می‌شود.
  1. دریافت پارامترهای personnel_id، otp و telegram از درخواست.
  2. جست‌وجوی اپراتور فعال در جدول operators براساس کد پرسنلی و رمز فعلی OTP.
  3. بررسی انقضای OTP با درنظر گرفتن بازه زمانی ۱۵ دقیقه‌ای.
  4. در صورت اعتبار، به‌روزرسانی ستون‌های telegram و otp (پاک کردن OTP).
  5. ثبت رویداد در SystemLog با نوع SubmitTelegram و تاخیر ۱۰ دقیقه‌ای در صف snailJob.
  6. ارسال پیامک اطلاع‌رسانی موفقیت اتصال با جزئیات IP و زمان شمسی.

ورودی‌ها (Inputs)

پارامتر نوع داده الزامی توضیح
personnel_id string بله کد پرسنلی اپراتور فعال (status=1).
otp integer بله رمز یکبار مصرف صادرشده از مرحله‌ی قبلی.
telegram string بله شناسه یا شماره کاربری تلگرام کاربر برای اتصال.
branch integer خیر شناسه‌ی شعبه برای ارسال اطلاع‌رسانی از طریق سرویس پیامک.
نمونه درخواست:
POST /api/auth/connect/submit
Content-Type: application/json

{
  "personnel_id": "P00157",
  "otp": "12345678",
  "telegram": "@aliiranpour",
  "branch": 1
}

خروجی‌ها (Outputs)

تصال موفق

{
  "status": true,
  "time": 1731963561,
  "message": "اتصال با موفقیت انجام شد."
}

رمز منقضی شده

{
  "status": false,
  "code": 1204,
  "message": "رمز یکبار مصرف منقضی شده است."
}

رمز اشتباه یا نامعتبر

{
  "status": false,
  "code": 1205,
  "message": "رمز یکبار مصرف وارد شده معتبر نمی باشد."
}

فرآیند بررسی زمان OTP

Carbon::now()->addMinutes(-15) <= $operator->otp_issuing
این شرط بررسی می‌کند که OTP مورد استفاده حداکثر ۱۵ دقیقه قبل صادر شده باشد. در صورت گذشتن بیش از ۱۵ دقیقه، سیستم خطای Expired Code با کد 1204 برمی‌گرداند.

به‌روزرسانی جدول Operators

UPDATE operators
SET
  telegram = {request.telegram},
  otp = NULL
WHERE id = {operator.id};

ثبت رویداد در SystemLog

SystemLog::dispatch([
  "type" => "SubmitTelegram",
  "data" => null,
  "goal" => $request->personnel_id,
  "by" => $operator->id,
  "agent" => $_SERVER['HTTP_USER_AGENT'],
  "ip" => getIP(),
  "datetime" => Carbon::now()
])->delay(now()->addMinutes(10))->onQueue('snailJob');

پیامک موفقیت اتصال

پیامک:
اتصال شما به سرویس مورد نظر موفقیت آمیز بود.
زمان: شنبه، ۲۷ آبان ۱۴۰۳ | ۱۲:۴۵:۱۰
📍 IP: 192.168.1.24
🌐 example.domain
ارسال از طریق:
StaticController::sendNotification($operator->mobile, $tempBody, $request->get('branch'));

وابستگی‌ها (Dependencies)

  • use Illuminate\Http\Request;
  • use Illuminate\Support\Facades\DB;
  • use Carbon\Carbon;
  • use Morilog\Jalali\Jalalian;
  • use App\Jobs\SystemLog;
  • use App\Http\Controllers\StaticController;

نمونه تست Postman

POST https://console.service01.ir/api/auth/connect/submit
Content-Type: application/json

{
  "personnel_id": "P00442",
  "otp": "55667788",
  "telegram": "@operator_test"
}

تحلیل امنیتی

  • OTP فقط ۱۵ دقیقه اعتبار دارد.
  • پس از تأیید موفق، مقدار آن از پایگاه‌داده حذف می‌شود (null).
  • اطلاعات IP و User Agent در SystemLog ذخیره می‌گردند.
  • ارسال پیامک از طریق سرویس داخلی شرکت انجام می‌شود و حاوی اطلاعات حساس نیست.
  • وجود middleware‌ های domainAccess و ipTrust مانع ارسال از منابع غیرمجاز می‌گردد.

پیوست نگهداری و توسعه بعدی

  • اتصال به سرویس Webhook Telegram برای تأیید دوطرفه.
  • ثبت زمان دقیق اتصال در جدول پیشرفته audit_log.
  • افزودن محدودیت IP برای کاربران خاص در مرحله Submit.
  • نمایش هشدار برای IPهای ناشناس محیط کاربری.

`