Subversion Repositories oidplus

Rev

Rev 1259 | Rev 1293 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3. /*
  4.  * OIDplus 2.0
  5.  * Copyright 2019 - 2023 Daniel Marschall, ViaThinkSoft
  6.  *
  7.  * Licensed under the Apache License, Version 2.0 (the "License");
  8.  * you may not use this file except in compliance with the License.
  9.  * You may obtain a copy of the License at
  10.  *
  11.  *     http://www.apache.org/licenses/LICENSE-2.0
  12.  *
  13.  * Unless required by applicable law or agreed to in writing, software
  14.  * distributed under the License is distributed on an "AS IS" BASIS,
  15.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16.  * See the License for the specific language governing permissions and
  17.  * limitations under the License.
  18.  */
  19.  
  20. namespace ViaThinkSoft\OIDplus;
  21.  
  22. // phpcs:disable PSR1.Files.SideEffects
  23. \defined('INSIDE_OIDPLUS') or die;
  24. // phpcs:enable PSR1.Files.SideEffects
  25.  
  26. class OIDplusObjectTypePluginMac extends OIDplusObjectTypePlugin
  27.         implements INTF_OID_1_3_6_1_4_1_37476_2_5_2_3_6 /* gridGeneratorLinks */
  28. {
  29.  
  30.         /**
  31.          * @return string
  32.          */
  33.         public static function getObjectTypeClassName(): string {
  34.                 return OIDplusMac::class;
  35.         }
  36.  
  37.         /**
  38.          * @param string $actionID
  39.          * @param array $params
  40.          * @return array
  41.          * @throws OIDplusException
  42.          */
  43.         public function action(string $actionID, array $params): array {
  44.                 if ($actionID == 'generate_aai') {
  45.                         _CheckParamExists($params, 'aai_bits');
  46.                         _CheckParamExists($params, 'aai_multicast');
  47.  
  48.                         if (($params['aai_bits'] != '48') && ($params['aai_bits'] != '64')) {
  49.                                 throw new OIDplusException(_L("Invalid bit amount"));
  50.                         }
  51.  
  52.                         $aai = '';
  53.                         for ($i=0; $i<$params['aai_bits']/4; $i++) {
  54.                                 try {
  55.                                         $aai .= dechex(random_int(0, 15));
  56.                                 } catch (\Exception $e) {
  57.                                         $aai .= dechex(mt_rand(0, 15));
  58.                                 }
  59.                         }
  60.  
  61.                         if ($params['aai_multicast'] == 'true') {
  62.                                 $aai[1] = '3';
  63.                         } else {
  64.                                 $aai[1] = '2';
  65.                         }
  66.  
  67.                         $aai = strtoupper($aai);
  68.                         $aai = rtrim(chunk_split($aai, 2, '-'), '-');
  69.  
  70.                         return array("status" => 0, "aai" => $aai);
  71.                 } else {
  72.                         return parent::action($actionID, $params);
  73.                 }
  74.         }
  75.  
  76.         /**
  77.          * Implements interface INTF_OID_1_3_6_1_4_1_37476_2_5_2_3_6
  78.          * @param OIDplusObject $objParent
  79.          * @return string
  80.          */
  81.         public function gridGeneratorLinks(OIDplusObject $objParent): string {
  82.                 if (!$objParent->isRoot()) return '';
  83.                 return
  84.                         '<br>'._L('Generate a random AAI:').
  85.                         '<br>- <abbr title="'._L('Random hexadecimal string, but second nibble must be %1','2').'">Unicast</abbr> <a href="javascript:OIDplusObjectTypePluginMac.generateRandomAAI(48, false)">(AAI-48)</a> | <a href="javascript:OIDplusObjectTypePluginMac.generateRandomAAI(64, false)">(AAI-64)</a>'.
  86.                         '<br>- <abbr title="'._L('Random hexadecimal string, but second nibble must be %1','3').'">Multicast</abbr> <a href="javascript:OIDplusObjectTypePluginMac.generateRandomAAI(48, true)">(AAI-48)</a> | <a href="javascript:OIDplusObjectTypePluginMac.generateRandomAAI(64, true)">(AAI-64)</a>'.
  87.                         '<br><a href="https://standards.ieee.org/products-programs/regauth/" target="_blank">('._L('Buy an OUI or CID from IEEE').')</a>';
  88.         }
  89.  
  90.         /**
  91.          * @param string $static_node_id
  92.          * @param bool $throw_exception
  93.          * @return string
  94.          */
  95.         public static function prefilterQuery(string $static_node_id, bool $throw_exception): string {
  96.                 $static_node_id = trim($static_node_id);
  97.  
  98.                 $static_node_id = preg_replace('@^eui:@', 'mac:', $static_node_id);
  99.                 $static_node_id = preg_replace('@^eli:@', 'mac:', $static_node_id);
  100.  
  101.                 // Special treatment for MACs: if someone enters a valid MAC address in the goto box, prepend "mac:"
  102.                 if (((strpos($static_node_id, ':') !== false) ||
  103.                      (strpos($static_node_id, '-') !== false) ||
  104.                      (strpos($static_node_id, ' ') !== false)) && mac_valid($static_node_id)) {
  105.                         $static_node_id = 'mac:'.$static_node_id;
  106.                 }
  107.  
  108.                 if (str_starts_with($static_node_id,'mac:')) {
  109.                         $static_node_id = 'mac:'.str_replace(array('-',':',' '), '', substr($static_node_id,4));
  110.                         $static_node_id = 'mac:'.strtoupper(substr($static_node_id,4));
  111.                 }
  112.  
  113.                 return $static_node_id;
  114.         }
  115.  
  116. }
  117.