سلیب که از امنیت کوئرا به ستوه آمده بود، با نیما (اسطورهی امنیت در سطح بینالمللی) در اینباره صحبتی را شروع کرد. نیما به این نتیجه رسید که کوئرا نیاز به یک اقدام امنیتی در ورود به حساب کاربری دارد. پیشنهاد او تأیید از طریق 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
هستید. - برای کار با CSV ، تنها مجاز به استفاده از کتابخانه
jackson-databind
هستید. - به جز کتابخانههای موجود در
pom.xml
، تنها مجاز به استفاده از کتابخانههای استاندارد جاوا هستید. - هر کد تنها ده ثانیه زمان دارد.
- دقت کنید که تاریخ و زمان انقضای کد را باید دقیقا برابر با ۱۰ ثانیه پس از تولید کد (یا فراخوانی متد
sendAuthenticationSMS
) قرار دهید. - شما مجاز به عوض کردن فرمت ذخیرهسازی اطلاعات در فایل CSV نیستید و باید دقیقا برابر با فرمت خواسته شده، اطلاعات را ذخیره سازی کنید.
- داوری این سؤال، بیشتر از باقی مسائل طول میکشد.
آنچه باید آپلود کنید
پس از پیادهسازی موارد خواستهشده، فایل تمامی پروژه را زیپ کنید و آن را آپلود کنید. فایل زیپ شما باید بهصورتی باشد که پس از خروج از حالت فشرده، پوشهی src
مشاهده شود.
ارسال پاسخ برای این سؤال