Coder Social home page Coder Social logo

kintoyyy / azk-manager Goto Github PK

View Code? Open in Web Editor NEW
23.0 3.0 20.0 71.44 MB

Azk-Manager is a web-based customer management and billing solution designed for Mikrotik routers, especially juanfi powered hotspots. It is developed in PHP that utilized SQLite as its backend database, and is licensed under CC-BY-4.0.

Home Page: https://kintoyyy.github.io/AZK-Manager/example/main.html

License: Creative Commons Attribution 4.0 International

PHP 52.32% CSS 0.42% HTML 44.90% JavaScript 2.35% Batchfile 0.01%
hotspot hotspot-management hotspot-user-management hotspot-wifi juanfi juanfi-generator mikrotik-api mikrotik-hotspot mikrotik-routeros-script

azk-manager's Introduction

JuanFi Manager

Made by Kintoyyy :)
FB: @kint.oyyy508

Donations would be appreciated
Gcash/Paymaya account: Kent R. 09760009422
Paypal account: https://www.paypal.com/paypalme/Kintoyyyy

View Preview Page

Features:

  • Voucher Generation Using API
  • JuanFi Dashboard
  • Resellers Dashboard
  • Reseller/Vendo Sales Report and Charts
  • Seller Customizations
  • Custom Currency
  • Qr Code scanner
  • Hotspot Subscribers
  • Proper Darkmode

Tested only on RouterOS v6.4x.xx

Run using Docker

docker compose up

Screenshots

- Login Page

Login-page

- Main Dashboard

Dashboard-1 Dashboard-2 Dashboard-3 Dashboard-4

- Voucher Reseller Dashboard

Dashboard-5

- Printing page

Click View print page

Print-page

- Telegram report

Print-page

- Subscribers report

Print-page

1. Setup Mikrotik

add the on login and on logout script in to your hotspot profile in order for the dashboard to display the informations

mt-setup

On login Script

### enable telegram notification, change from 0 to 1 if you want to enable telegram
:local enableTelegram 1;
###replace telegram token
:local telegramToken "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
###replace telegram chat id / group id
:local chatId "xxxxxxxxxxxxx";
### enable Random MAC synchronizer
:local enableRandomMacSyncFix 1;
### hotspot folder for HEX put flash/hotspot for haplite put hotspot only
:local hotspotFolder "flash/Hotspot";

:local com [/ip hotspot user get [find name=$user] comment];
/ip hotspot user set comment="" $user;

:if ($com!="") do={

:local mac $"mac-address";
:local macNoCol;
:for i from=0 to=([:len $mac] - 1) do={ 
  :local char [:pick $mac $i]
  :if ($char = ":") do={
	:set $char ""
  }
  :set macNoCol ($macNoCol . $char)
}

:local validity [:pick $com 0 [:find $com ","]];

:if ( $validity!="0m" ) do={
	:local sc [/sys scheduler find name=$user]; :if ($sc="") do={ :local a [/ip hotspot user get [find name=$user] limit-uptime]; :local c ($validity); :local date [ /system clock get date]; /sys sch add name="$user" disable=no start-date=$date interval=$c on-event="/ip hotspot user remove [find name=$user]; /ip hotspot active remove [find user=$user]; /ip hotspot cookie remove [find user=$user]; /system sche remove [find name=$user]; /file remove \"$hotspotFolder/data/$macNoCol.txt\";" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon; :delay 2s; } else={ :local sint [/sys scheduler get $user interval]; :if ( $validity!="" ) do={ /sys scheduler set $user interval ($sint+$validity); } };
}

:local infoArray [:toarray [:pick $com ([:find $com ","]+1) [:len $com]]];

:local totaltime [/ip hotspot user get [find name="$user"] limit-uptime];
:local amt [:pick $infoArray 0];
:local ext [:pick $infoArray 1];
:local vendo [:pick $infoArray 2];
:local uactive [/ip hotspot active print count-only];

:local getIncome [:put ([/system script get [find name=todayincome] source])];
/system script set source="$getIncome" todayincome;

:local getSales ($amt + $getIncome);
/system script set source="$getSales" todayincome;

:local getMonthlyIncome [:put ([/system script get [find name=monthlyincome] source])];
/system script set source="$getMonthlyIncome" monthlyincome;

:local getMonthlySales ($amt + $getMonthlyIncome);
/system script set source="$getMonthlySales" monthlyincome;

:if ( [/system script find name=$vendo] != "" ) do={ 
		:local getVendorScript [/system script get [find name=$vendo] comment];
		:local vendorArray [:toarray [:pick $getVendorScript ([:find $getVendorScript ","]) [:len $getVendorScript]]];
		:local getMontlhySales [:pick $vendorArray 0];
        :local getDailySales [:pick $vendorArray 2];
		:local getLastSales [:pick $vendorArray 1];
		:local addMonthly ($amt + $getMontlhySales);
        :local addDaily ($amt + $getDailySales);
		:local getSellerIncome [:put ([/system script get [find name=$vendo] source])];
		:local getSellerSales ($amt + $getSellerIncome);
		/system script set source="$getSellerSales" comment="VendoSales,$addMonthly,$getLastSales,$addDaily" $vendo;
		:if ($enableTelegram=1) do={/tool fetch url="https://api.telegram.org/bot$telegramToken/sendmessage?chat_id=$chatId&text=<<======New Sales======>> %0A Seller: $vendo %0A Sales : $getSellerSales %0A Montly Sales : $addMonthly %0A Daily Sales : $addDaily %0A Voucher: $user %0A IP: $address %0A MAC: $mac %0A Amount: $amt %0A Extended: $ext %0A Total Time: $totaltime %0A  %0A Total Today Sales : $getSales %0A Total Monthly Sales : $getMonthlySales %0A Active Users: $uactive%0A <<=====================>>" keep-result=no;};
	} else={ 
		:local comment "VendoSales,$amt,0,0";
		/system script add name=$vendo owner=admin comment=$comment source="$amt";
}

:local validUntil [/system scheduler get $user next-run];

/file print file="$hotspotFolder/data/$macNoCol" where name="dummyfile"; 
:delay 1s; 
/file set "$hotspotFolder/data/$macNoCol" contents="$user#$validUntil";
};

:if ($enableRandomMacSyncFix=1) do={
:local cmac $"mac-address"
:foreach AU in=[/ip hotspot active find user="$username"] do={
  :local amac [/ip hotspot active get $AU mac-address];
  :if ($cmac!=$amac) do={  /ip hotspot active remove [/ip hotspot active find mac-address="$amac"]; }
}
}

or if you have a custom juanfi onlogin script insert the script

### Azk Manager Script

	:if ( [/system script find name=$vendo] != "" ) do={ 
		:local getVendorScript [/system script get [find name=$vendo] comment];
		:local vendorArray [:toarray [:pick $getVendorScript ([:find $getVendorScript ","]) [:len $getVendorScript]]];
		:local getMontlhySales [:pick $vendorArray 0];
	:local getDailySales [:pick $vendorArray 2];
		:local getLastSales [:pick $vendorArray 1];
		:local addMonthly ($amt + $getMontlhySales);
	:local addDaily ($amt + $getDailySales);
		:local getSellerIncome [:put ([/system script get [find name=$vendo] source])];
		:local getSellerSales ($amt + $getSellerIncome);
		/system script set source="$getSellerSales" comment="VendoSales,$addMonthly,$getLastSales,$addDaily" $vendo;
	} else={ 
		:local comment "VendoSales,$amt,0,0";
		/system script add name=$vendo owner=admin comment=$comment source="$amt";
	};

### End Azk Manager Script

On logout Script

### hotspot folder for HEX put flash/hotspot for haplite put hotspot only
:local hotspotFolder "flash/hotspot";

:local mac $"mac-address";
:local macNoCol;
:for i from=0 to=([:len $mac] - 1) do={ 
:local char [:pick $mac $i]
:if ($char = ":") do={
    :set $char ""
}
:set macNoCol ($macNoCol . $char)
}

:if ([/ip hotspot user get [/ip hotspot user find where name="$user"] limit-uptime] <= [/ip hotspot user get [/ip hotspot user find where name="$user"] uptime]) do={
/ip hotspot user remove $user;
/file remove "$hotspotFolder/data/$macNoCol.txt";
/system sche remove [find name=$user];
}   

Scheduler Script (paste in terminal)

/system scheduler add comment="Reset Daily Income" interval=1d name="Reset Daily Income" on-event="/system script set source=\"0\" todayincome; /system script :foreach i in=[find] do={ :if ([get \$i comment]~\"VendoSales\") do={ :local getVendorScript [/system script get \$i comment]; :local vendorArray [:toarray [:pick \$getVendorScript ([:find \$getVendoScript \",\"]+1) [:len \$getVendorScript]]];:local getLastSales [:pick \$vendorArray 2];:local getMonthlySales [:pick \$vendorArray 1];/system script set \$i comment=\"VendoSales,\$getMonthlySales,\$getLastSales,0\";}}" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=sep/28/2021 start-time=00:00:00
/system scheduler add comment="Reset Monthly Income" interval=4w3d name="Reset Monthly Income" on-event="/system script set source=\"0\" monthlyincome; /system script :foreach i in=[find] do={ :if ([get \$i comment]~\"VendoSales\") do={ :local getVendorScript [/system script get \$i comment]; :local vendorArray [:toarray [:pick \$getVendorScript ([:find \$getVendoScript \",\"]+1) [:len \$getVendorScript]]]; :local getLastSales [:pick \$vendorArray 2]; /system script set \$i comment=\"VendoSales,0,\$getLastSales\"; }}" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=aug/01/2022 start-time=00:00:00

/system script add dont-require-permissions=no name=todayincome owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="0";
/system script add dont-require-permissions=no name= monthlyincome owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="0";

Create a scheduler with 1d interval and paste the script

###replace telegram token
:local telegramToken "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
###replace telegram chat id / group id
:local chatId "xxxxxxxxxxxxx";

/ip hotspot user
## Get Date Today
:local LocalDate [/system clock get date];
:local Day [:pick $LocalDate ([:find $LocalDate "/" -1] + 1) [:find $LocalDate "/" [:find $LocalDate "/" -1]]]
##Format Date 1 - 31
:global FormatDate do={
:if ($d > 31) do={
:return ($d - 31);
} else={ 
:return ($d);
}
};
## Scan Hotspot users
:foreach i in=[find] do={
    :local com [/ip hotspot user get $i comment];
    :local infoArray [:toarray [:pick $com ([:find $com ","]+1) [:len $com]]];
    :if ([get $i comment]~"unpaid" && ($Day+0) = [$FormatDate d=([:pick $infoArray 0]+3)] && "false" = [/ip hotspot user get $i disabled]) do={
        /ip hotspot user set $i disabled=yes;
        :local name [/ip hotspot user get $i name];
/ip hotspot active remove [find user=$name];
/ip hotspot cookie remove [find user=$name]; 
        :local price [:pick $infoArray 1];
        :local contact [:pick $infoArray 3];
        :local fb [:pick $infoArray 4];
        :tool fetch url="https://api.telegram.org/bot$telegramToken/sendmessage?chat_id=$chatId&text=[Over Due Subscriber Disconnected]%0A%0A Name: $name %0A Price: $price %0A Contact: $contact %0A Facebook: m.me/@$fb" keep-result=no;
        :log warning ("Subscriber Logs - Disabled Overdue: " . $name . " - due date: $LocalDate");
    }
    :if ([get $i comment]~"paid" && ($Day+0) = [:pick $infoArray 0] && "false" = [/ip hotspot user get $i disabled]) do={
        :local name [/ip hotspot user get $i name];
        :local date [:pick $infoArray 0];
        :local price [:pick $infoArray 1];
        :local contact [:pick $infoArray 3];
        :local fb [:pick $infoArray 4];
        /ip hotspot user set $i comment="subscriber,$date,$price,unpaid,$contact,$fb";
:tool fetch url="https://api.telegram.org/bot$telegramToken/sendmessage?chat_id=$chatId&text=[Changed to unpaid Subscriber]%0A%0A Name: $name %0A Price: $price %0A Contact: $contact %0A Facebook: m.me/@$fb" keep-result=no;
        :log warning ("Subscriber Logs - Changed : " . $name . " - $date - $price - unpaid - $contact - $fb");
    }
}

2. download the Desktop folder and Run the Azk-Manager.exe

3. Done Congrats!

You can now access the dashboard, click the server url in the window

Username: Admin
Password: admin123
//you can change this on the reset password page

This Voucher Generator/manager Only works for ivanalayan15/JuanFi system

azk-manager's People

Contributors

imgbotapp avatar kintoyyy avatar rickicode avatar rtorino avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

azk-manager's Issues

Desktop app not accessible outside the local network

When using the desktop app, the ip is 127.0.0.1 with corresponding port and can be accessed on localhost. However, even with disabling the firewall, the assigned ip address to the pc where the app was running, it can't be access trough the lan connection.

There was no firewall problem cuz the firewall was disabled and can be assured that the port is accessible by running xammp.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.