Network
PPP (Broadband) Accounts Auto-Disable — 7
Disables PPP secrets when their validity ends. The validity in days is the number at the start of the profile name (30@512.co = 30 days, 15@1M.co = 15 days) and the start date is the first-login stamp in the secret's comment (see 'PPP First Login Date Stamp'). Also kicks the live session. Runs daily from the Scheduler.
RouterOS 7
/system script add name=ppp_expiry_check source={
# EN: Month names/lengths used to turn a date into a day number (leap years ignored)
# AR: أسماء الشهور وأيامها لتحويل التاريخ إلى رقم يوم (بدون حساب السنة الكبيسة)
:local monthNames {"jan";"feb";"mar";"apr";"may";"jun";"jul";"aug";"sep";"oct";"nov";"dec"};
:local monthLens {31;28;31;30;31;30;31;31;30;31;30;31};
# EN: Helper: converts "yyyy-mm-dd" (RouterOS v7 date format) to a day number
# AR: دالة تحول التاريخ بصيغة yyyy-mm-dd (صيغة v7) إلى رقم يوم
:local toDays do={
:local y [:tonum [:pick $d 0 4]];
:local m [:tonum [:pick $d 5 7]];
:local total ([:tonum [:pick $d 8 10]] + ($y * 365));
:if ($m > 1) do={
:for k from=0 to=($m - 2) do={ :set total ($total + [:pick $lens $k]) }
}
:return $total;
}
# EN: Today as a day number | AR: تاريخ اليوم كرقم
:local today [$toDays d=[/system clock get date] names=$monthNames lens=$monthLens];
:foreach s in=[/ppp secret find where disabled=no] do={
:local profName [/ppp secret get $s profile];
:local note [/ppp secret get $s comment];
# EN: Validity (days) is the number before "@" in the profile name, e.g. 30@512.co
# AR: المدة بالأيام هي الرقم قبل علامة @ في اسم البروفايل مثل 30@512.co
:local at [:find $profName "@"];
:if ([:len $note] > 11 && [:typeof $at] = "num") do={
:if ($at > 0 && [:pick $note 4 5] = "-") do={
:local validity [:tonum [:pick $profName 0 $at]];
:if ([:typeof $validity] = "num") do={
# EN: First-login date is stored at the start of the comment | AR: تاريخ أول دخول مخزن في بداية الكومنت
:local startDay [$toDays d=[:pick $note 0 10] names=$monthNames lens=$monthLens];
:if (($startDay + $validity) < $today) do={
:local who [/ppp secret get $s name];
# EN: Disable the account and kick its live session | AR: تعطيل الحساب وفصل الجلسة الحالية
/ppp secret disable $s;
/ppp active remove [find where name=$who];
:log info ("PPP expired: disabled " . $who);
}
}
}
}
}
}
# EN: Run it once a day | AR: تشغيله مرة كل يوم
/system scheduler add name=ppp_expiry_daily interval=1d on-event=ppp_expiry_check start-time=00:05:00