How to provide Mikrotik Hotspot Users an option to change there password using any form or web page?
The simple answer is to configure USER MANAGER and provide User Panel which is very nice and informative, it also allows users to change there password too, but what if you don’t want to install User Manager, or what if user also change his information via the user panel which you don’t want them to ?? since mikrotik source code is not public so we cannot hide that option (as far as in my limited knowledge) . Using the form base technique you can simply give them a web page from where they can simply change there password when required.
You can also add more functions in this page ,like it can send an email or add any entry in log file so that admin can be aware that at which time the last password was changed or other functions as required.
This is a simple password change form for hotspot users, After they logged in to hotspot , they can change there own password using this simple form.
REQUIREMENTS:
- Linux base system (I used UBUNTU, but you can use any flavor of your own choice)
- Apache / PHP5.x / PEAR2 library
Also Make sure you have enabled the API service in MIKROTIK
/ IP > Services
As showed in the image below …
LINUX SECTION
First Update your Ubuntu (if its not already updated on fresh installation)
apt-get install update
Now Install Apache Web Server with PHP5
apt-get install apache2 php5
Don’t forget to restart the apache2 service, otherwise when you will try to open the password change form, it will ask you to save the file, instead of opening it on the browser
service apache2 restart
Now we have to download PEAR2 support library for the RouterOS functions to be performed via WEB,
Goto your web folder and download pear2 library, and extract it
cd /var/www wget http://wifismartzone.com/files/linux_related/pear2.tar.gz tar zxvf pear2.tar.gz
Ok now it’s time to create the change password page so that user can access it or you can link it with your status page for the user comfort level.
touch /var/www/changepass.php nano /var/www/changepass.php
and paste the following code.
{Make sure to change the IP address of Mikrotik and its admin ID Password}
<?php use PEAR2\Net\RouterOS; require_once 'PEAR2/Autoload.php'; $errors = array(); try { //Adjust RouterOS IP, username and password accordingly. $client = new RouterOS\Client('192.168.30.10', 'admin', 'admin'); $printRequest = new RouterOS\Request( '/ip hotspot active print', RouterOS\Query::where('address', $_SERVER['REMOTE_ADDR']) ); $hotspotUsername = $client->sendSync($printRequest)->getArgument('user'); } catch(Exception $e) { $errors[] = $e->getMessage(); } if (isset($_POST['password']) && isset($_POST['password2'])) { if ($_POST['password'] !== $_POST['password2']) { $errors[] = 'Passwords do not match.'; } elseif (empty($errors)) { //Here's the fun part - actually changing the password $setRequest = new RouterOS\Request('/ip hotspot user set'); $client($setRequest ->setArgument('numbers', $hotspotUsername) ->setArgument('password', $_POST['password']) ); } } ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Change your hotspot password sample page in PHP / Syed Jahanzaib.PK-KHI</title> <style type="text/css"> #errors {background-color:darkred;color:white;} #success {background-color:darkgreen:color:white;} </style> </head> <body> <div> <?php if (!isset($hotspotUsername)) { ?> <?php } else { ?> <h3> <pre><span style="color: blue">PA</span><span style="color: red">KI</span><span style="color: purple">ST</span><span style="color: orange">AN</span> <span style="color: green">ZINDABAD</span> ...JZ!!</pre> <h2> <br>HOTSPOT ... Sample password change FORM <br><br> You are currently logged in as "<?php echo $hotspotUsername; ?>"</h2> <?php if(!empty($errors)) { ?> <div id="errors"><ul> <?php foreach ($errors as $error) { ?> <li><?php echo $error; ?></li> <?php } ?> </ul></div> <?php } elseif (isset($_POST['password'])) { ?> <div id="success">Your password has been changed.</div> <?php } ?> <form action="" method="post"> <ul> <li> <label for="password">New password:</label> <input type="password" id="password" name="password" value="" /> </li> <li> <label for="password2">Confirm new password:</label> <input type="password" id="password2" name="password2" value="" /> </li> <li> <input type="submit" id="act" name="act" value="Change password" /> </li> </ul> </form> <?php } ?> </div> </body> </html>
Now once the user have logged in to hotspot, he can access the page like below.
http://192.168.30.50/changepass.php
As showed in the image below …
.
.
Credits and legal stuff
Author: Vasil Rangelov, a.k.a. boen_robot (boen [dot] robot [at] gmail [dot] com)
Regard’s
Syed Jahanzaib
Filed under: Mikrotik Related
