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.

MikroTik Version

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