سلیب که از امنیت کوئرا به ستوه آمده بود، با نیما (اسطورهی امنیت در سطح بینالمللی) در اینباره صحبتی را شروع کرد. نیما به این نتیجه رسید که کوئرا نیاز به یک اقدام امنیتی در ورود به حساب کاربری دارد. پیشنهاد او تأیید از طریق SMS بود و تأکید اکیدی بر زمان انقضای آنها داشت. به نظر او هر کد تأیید باید فقط برای ۱۰ ثانیه معتبر میبودند و پس از گذشت بیش از ۱۰ ثانیه، کد دیگر مورد قبول نباشد. سلیب از آنسو تاکید بر ماندگاری دیتاها داشت. به نظر او نیاز بود تا تمامی اطلاعات را به فرمت زیر در یک فایل CSV نگهداری کند:
در ستون اول شماره مورد نظر، ستون دوم کد ساخته شده برای شماره و در ستون سوم اعتبار کد را نمایش میدهد، در ادامه به بیان جزئیات بیشتر سؤال میپردازیم.
پروژهی اولیه را از این لینک دانلود کنید.
ساختار فایلهای پروژه بهصورت زیر است:
شما باید متدهای generateCode
، sendAuthenticationSMS
، loadData
، verifyCode
موجود در کلاس SMSAuthentication
را مطابق با خواستههای سؤال پیادهسازی کنید. نمای کلی فایل مورد نظر به شکل زیر است:
generateCode
🔗این متد باید یک رشته تصادفی به طول ۵ بسازد و مقدار آن را برگرداند. در این رشته میتوانید از فقط متشکل از ارقام انگلیسی استفاده کنید. نمونهی اجرای متد در زیر آمده است:
sendAuthenticationSMS
🔗این متد یک رشته به عنوان شماره و رشتهای دیگر به عنوان آدرس فایلی که باید اطلاعات را در آن ذخیره کند، به عنوان ورودی دریافت میکند. خروجی این متد باید رشتهای به فرمت JSON
باشد. در خروجی JSON
مورد نظر باید کلید و مقدارهای زیر را داشته باشد:
phone
برابر با مقدار شماره مورد نظر خواهد بود.code
برابر با کد ساخته شده برای شماره مورد نظر خواهد بود.exp
برابر با زمانی که کد مورد نظر منقضی میشود است، زمان در این سؤال به فرمت "yyyy/MM/dd-HH:mm:ss"
استفاده میشود.این متد باید این محتوا را درون فایل CSV موجود در آدرس path
ذخیره کند. خروجی و رفتار خواسته شده در بخش مثال با جزئیات بیشتری نمایش داده شده است.
محتوای چند خط آخر فایل test.csv
پس از اجرای بالا برابر با زیر خواهد بود:
loadData
🔗این متد یک رشته به عنوان آدرس فایلی که باید اطلاعات آن را بخواند، به عنوان ورودی دریافت میکند. خروجی این متد لیستی از آرایهای از String
ها خواهد بود که برابر با مقادیر موجود در فایل CSV ورودی متد است.
برای مثال فرض کنید محتوای فایل CSV بهصورت زیر باشد:
اگر متد را بهصورت زیر فراخوانی کنیم
و بخواهیم خروجی متد را بهصورت زیر چاپ کنیم:
خروجی بهصورت زیر خواهد بود
دقت کنید که خط اول (یا همان Phone,Code,Expiration
) در خروجی متد وجود ندارد.
verifyCode
🔗این متد یک رشته به عنوان کد، یک رشته به عنوان شماره و رشتهای دیگر به عنوان آدرس فایلی که باید اطلاعات را از آن بخواند، به عنوان ورودی دریافت میکند. خروجی این متد یک boolean
است که در صورتی که کد با شماره مورد نظر تطابق داشت و کد منقضی نشده بود، باید مقدار true
برگرداند و در غیر این صورت مقدار false
برگرداند.
pom.xml
نیستید.JSON
، تنها مجاز به استفاده از کتابخانه opencsv
هستید.jackson-databind
هستید.pom.xml
، تنها مجاز به استفاده از کتابخانههای استاندارد جاوا هستید.sendAuthenticationSMS
) قرار دهید.پس از پیادهسازی موارد خواستهشده، فایل تمامی پروژه را زیپ کنید و آن را آپلود کنید. فایل زیپ شما باید بهصورتی باشد که پس از خروج از حالت فشرده، پوشهی src
مشاهده شود.