mirror of
				https://github.com/billz/raspap-webgui.git
				synced 2025-03-01 10:31:47 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			225 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| 
 | |
| include_once( 'includes/status_messages.php' );
 | |
| 
 | |
| /**
 | |
| *
 | |
| * Manage DHCP configuration
 | |
| *
 | |
| */
 | |
| function DisplayDHCPConfig() {
 | |
| 
 | |
|   $status = new StatusMessages();
 | |
|   if( isset( $_POST['savedhcpdsettings'] ) ) {
 | |
|     if (CSRFValidate()) {
 | |
|       $config = 'interface='.$_POST['interface'].PHP_EOL
 | |
|         .'dhcp-range='.$_POST['RangeStart'].','.$_POST['RangeEnd'].',255.255.255.0,'.$_POST['RangeLeaseTime'].''.$_POST['RangeLeaseTimeUnits'];
 | |
|       exec( 'echo "'.$config.'" > /tmp/dhcpddata',$temp );
 | |
|       system( 'sudo cp /tmp/dhcpddata '. RASPI_DNSMASQ_CONFIG, $return );
 | |
| 
 | |
|       if( $return == 0 ) {
 | |
|         $status->addMessage('Dnsmasq configuration updated successfully', 'success');
 | |
|       } else {
 | |
|         $status->addMessage('Dnsmasq configuration failed to be updated', 'danger');
 | |
|       }
 | |
|     } else {
 | |
|       error_log('CSRF violation');
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   exec( 'pidof dnsmasq | wc -l',$dnsmasq );
 | |
|   $dnsmasq_state = ($dnsmasq[0] > 0);
 | |
| 
 | |
|   if( isset( $_POST['startdhcpd'] ) ) {
 | |
|     if (CSRFValidate()) {
 | |
|       if ($dnsmasq_state) {
 | |
|         $status->addMessage('dnsmasq already running', 'info');
 | |
|       } else {
 | |
|         exec('sudo /etc/init.d/dnsmasq start', $dnsmasq, $return);
 | |
|         if ($return == 0) {
 | |
|           $status->addMessage('Successfully started dnsmasq', 'success');
 | |
|           $dnsmasq_state = true;
 | |
|         } else {
 | |
|           $status->addMessage('Failed to start dnsmasq', 'danger');
 | |
|         }
 | |
|       }
 | |
|     } else {
 | |
|       error_log('CSRF violation');
 | |
|     }
 | |
|   } elseif( isset($_POST['stopdhcpd'] ) ) {
 | |
|     if (CSRFValidate()) {
 | |
|       if ($dnsmasq_state) {
 | |
|         exec('sudo /etc/init.d/dnsmasq stop', $dnsmasq, $return);
 | |
|         if ($return == 0) {
 | |
|           $status->addMessage('Successfully stopped dnsmasq', 'success');
 | |
|           $dnsmasq_state = false;
 | |
|         } else {
 | |
|           $status->addMessage('Failed to stop dnsmasq', 'danger');
 | |
|         }
 | |
|       } else {
 | |
|         $status->addMessage('dnsmasq already stopped', 'info');
 | |
|       }
 | |
|     } else {
 | |
|       error_log('CSRF violation');
 | |
|     }
 | |
|   } else {
 | |
|     if( $dnsmasq_state ) {
 | |
|       $status->addMessage('Dnsmasq is running', 'success');
 | |
|     } else {
 | |
|       $status->addMessage('Dnsmasq is not running', 'warning');
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   exec( 'cat '. RASPI_DNSMASQ_CONFIG, $return );
 | |
|   $conf = ParseConfig($return);
 | |
|   $arrRange = explode( ",", $conf['dhcp-range'] );
 | |
|   $RangeStart = $arrRange[0];
 | |
|   $RangeEnd = $arrRange[1];
 | |
|   $RangeMask = $arrRange[2];
 | |
|   preg_match( '/([0-9]*)([a-z])/i', $arrRange[3], $arrRangeLeaseTime );
 | |
| 
 | |
|   $hselected = '';
 | |
|   $mselected = '';
 | |
|   $dselected = '';
 | |
| 
 | |
|   switch( $arrRangeLeaseTime[2] ) {
 | |
|     case "h":
 | |
|       $hselected = " selected";
 | |
|     break;
 | |
|     case "m":
 | |
|       $mselected = " selected";
 | |
|     break;
 | |
|     case "d":
 | |
|       $dselected = " selected";
 | |
|     break;
 | |
|   }
 | |
| 
 | |
|   ?>
 | |
|   <div class="row">
 | |
|   <div class="col-lg-12">
 | |
|       <div class="panel panel-primary">
 | |
|       <div class="panel-heading"><i class="fa fa-exchange fa-fw"></i> Configure DHCP
 | |
|             </div>
 | |
|         <!-- /.panel-heading -->
 | |
|         <div class="panel-body">
 | |
|         <p><?php $status->showMessages(); ?></p>
 | |
|         <!-- Nav tabs -->
 | |
|             <ul class="nav nav-tabs">
 | |
|                 <li class="active"><a href="#server-settings" data-toggle="tab">Server settings</a>
 | |
|                 </li>
 | |
|                 <li><a href="#client-list" data-toggle="tab">Client list</a>
 | |
|                 </li>
 | |
|             </ul>
 | |
|         <!-- Tab panes -->
 | |
|         <div class="tab-content">
 | |
|     <div class="tab-pane fade in active" id="server-settings">
 | |
|     <h4>DHCP server settings</h4>
 | |
|     <form method="POST" action="?page=dhcpd_conf">
 | |
|     <?php CSRFToken() ?>
 | |
|     <div class="row">
 | |
|       <div class="form-group col-md-4">
 | |
|         <label for="code">Interface</label>
 | |
|         <select class="form-control" name="interface">
 | |
|         <?php 
 | |
|         exec("ip -o link show | awk -F': ' '{print $2}'", $interfaces);
 | |
| 
 | |
|         foreach( $interfaces as $int ) {
 | |
|           $select = '';
 | |
|           if( $int == $conf['interface'] ) {
 | |
|             $select = " selected";
 | |
|           }
 | |
|             echo '<option value="'.$int.'"'.$select.'>'.$int.'</option>';
 | |
|           }
 | |
|         ?>
 | |
|         </select>
 | |
|       </div>
 | |
|     </div>
 | |
|     <div class="row">
 | |
|       <div class="form-group col-md-4">
 | |
|         <label for="code">Starting IP Address</label>
 | |
|         <input type="text" class="form-control"name="RangeStart" value="<?php echo $RangeStart; ?>" />
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <div class="row">
 | |
|       <div class="form-group col-md-4">
 | |
|         <label for="code">Ending IP Address</label>
 | |
|         <input type="text" class="form-control" name="RangeEnd" value="<?php echo $RangeEnd; ?>" />
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <div class="row">
 | |
|       <div class="form-group col-xs-2 col-sm-2">
 | |
|         <label for="code">Lease Time</label>
 | |
|         <input type="text" class="form-control" name="RangeLeaseTime" value="<?php echo $arrRangeLeaseTime[1]; ?>" />
 | |
|       </div>
 | |
|       <div class="col-xs-2 col-sm-2">
 | |
|         <label for="code">Interval</label>
 | |
|         <select name="RangeLeaseTimeUnits" class="form-control" ><option value="m" <?php echo $mselected; ?>>Minute(s)</option><option value="h" <?php echo $hselected; ?>>Hour(s)</option><option value="d" <?php echo $dselected; ?>>Day(s)</option><option value="infinite">Infinite</option></select> 
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <input type="submit" class="btn btn-outline btn-primary" value="Save settings" name="savedhcpdsettings" />
 | |
|     <?php
 | |
| 
 | |
|     if ( $dnsmasq_state ) {
 | |
|       echo '<input type="submit" class="btn btn-warning" value="Stop dnsmasq" name="stopdhcpd" />';
 | |
|     } else {
 | |
|       echo'<input type="submit" class="btn btn-success" value="Start dnsmasq" name="startdhcpd" />';
 | |
|     }
 | |
|     ?>
 | |
|     </form>
 | |
|     </div><!-- /.tab-pane -->
 | |
| 
 | |
|     <div class="tab-pane fade in" id="client-list">
 | |
|     <h4>Client list</h4>
 | |
|     <div class="col-lg-12">
 | |
|       <div class="panel panel-default">
 | |
|       <div class="panel-heading">
 | |
|         Active DHCP leases
 | |
|       </div>
 | |
|       <!-- /.panel-heading -->
 | |
|       <div class="panel-body">
 | |
|         <div class="table-responsive">
 | |
|           <table class="table table-hover">
 | |
|             <thead>
 | |
|               <tr>
 | |
|                 <th>Expire time</th>
 | |
|                 <th>MAC Address</th>
 | |
|                 <th>IP Address</th>
 | |
|                 <th>Host name</th>
 | |
|                 <th>Client ID</th>
 | |
|               </tr>
 | |
|             </thead>
 | |
|             <tbody>
 | |
|               <tr>
 | |
|                 <?php
 | |
|                 exec( 'cat ' . RASPI_DNSMASQ_LEASES, $leases );
 | |
|                 foreach( $leases as $lease ) {
 | |
|                   $lease_items = explode(' ', $lease);
 | |
|                   foreach( $lease_items as $lease_item ) {
 | |
|                     echo '<td>' . $lease_item . '</td>';
 | |
|                   }
 | |
|                   echo '</tr>';
 | |
|                 };
 | |
|                 ?>
 | |
|               </tr>
 | |
|             </tbody>
 | |
|           </table>
 | |
|         </div><!-- /.table-responsive -->
 | |
|       </div><!-- /.panel-body -->
 | |
|       </div><!-- /.panel -->
 | |
|     </div><!-- /.col-lg-6 -->
 | |
|     </div><!-- /.tab-pane -->
 | |
|     </div><!-- /.tab-content -->
 | |
|     </div><!-- ./ Panel body -->
 | |
|     <div class="panel-footer"> Information provided by Dnsmasq</div>
 | |
|         </div><!-- /.panel-primary -->
 | |
|     </div><!-- /.col-lg-12 -->
 | |
|   </div><!-- /.row -->
 | |
| <?php
 | |
| }
 | |
| 
 | |
| ?>
 | |
| 
 |