در تیم زیرساخت دیجیکالا، میکروسرویسهای مختلفی در حال پدید آمدن هستند. برخی از این میکروسرویسها قرار است تنها برای کاربران برخی از کشورها در دسترس باشند. سالار که وظیفهی مدیریت درخواستهای ورودی از کشورهای مختلف را برعهده دارد، لیستی از بازههای آیپیهای کشورهای مدنظرش جمعآوری کرده است. او اکنون از شما میخواهد اسکریپتی برای او بنویسید که با استفاده از آن بتوان درخواستهای ورودی از کشورهای مختلف را مسدود یا آزاد کرد.
# جزئیات پروژه
پروژهی اولیه را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/148127/) دانلود کنید.
ساختار فایلهای پروژه بهصورت زیر است:
```
country-manager
├── ip_lists
│ ├── AG.txt
│ ├── CC.txt
│ └── IR.txt
└── country_manager.sh
```
اسکریپت `country_manager.sh` را مطابق توضیحات زیر پیادهسازی کنید:
+ نحوهی اجرای اسکریپت بهصورت `./country_manager.sh command ip_list_filepath` است. مثال:
```terminal bash terminal
./country_manager.sh block ./ip_lists/CC.txt
```
+ اگر تعداد آرگومانهای ورودی اسکریپت کمتر از ۲ تا (یکی برای `command` و یکی برای `ip_list_filepath`) بود، اسکریپت باید عبارت `not enough arguments` را چاپ کند و متوقف شود.
+ اگر مقدار `command` برابر با `block` یا `unblock` نبود، اسکریپت باید عبارت `invalid command` را چاپ کند و متوقف شود.
+ اگر فایلی که مسیر آن بهعنوان آرگومان دوم وارد میشود وجود نداشت، اسکریپت باید عبارت `ip list file not found` را چاپ کند و متوقف شود.
+ اگر مقدار `command` برابر با `block` باشد، اسکریپت باید لیست بازههای آیپی موجود در فایل را دریافت کند و درخواستهای ورودی مربوط به این آیپیها را بهازای همهی پروتکلها و پورتها `DROP` کند. اگر *rule* مربوط به `ACCEPT` کردن این درخواستها از قبل موجود بود، اسکریپت باید آنها را حذف کند.
+ اگر مقدار `command` برابر با `unblock` باشد، اسکریپت باید لیست بازههای آیپی موجود در فایل را دریافت کند و درخواستهای ورودی مربوط به این آیپیها را بهازای همهی پروتکلها و پورتها `ACCEPT` کند. اگر *rule* مربوط به `DROP` کردن این درخواستها از قبل موجود بود، اسکریپت باید آنها را حذف کند.
# نکات
+ عملیات مسدودسازی و آزادسازی درخواستها باید با استفاده از `iptables` انجام شود.
+ داوری این سؤال کمی بیشتر از سایر سؤالات طول میکشد.
+ بازههای آیپی طبق نگارش *CIDR* هستند.
+ تضمین میشود که هیچ *rule* ای خارج از اسکریپت اضافه نمیشود.
# آنچه باید آپلود کنید
پس از پیادهسازی موارد خواستهشده، فایل `country_manager.sh` را آپلود کنید.