2018-05-07 12:12:58 +01:00
/**
* @author n1474335 [n1474335@gmail.com]
* @copyright Crown Copyright 2016
* @license Apache-2.0
*/
import Operation from "../Operation" ;
/**
* Format MAC addresses operation
*/
class FormatMACAddresses extends Operation {
/**
* FormatMACAddresses constructor
*/
constructor () {
super ();
this . name = "Format MAC addresses" ;
this . module = "Default" ;
this . description = "Displays given MAC addresses in multiple different formats.<br><br>Expects addresses in a list separated by newlines, spaces or commas.<br><br>WARNING: There are no validity checks." ;
2018-08-21 19:07:13 +01:00
this . infoURL = "https://wikipedia.org/wiki/MAC_address#Notational_conventions" ;
2018-05-07 12:12:58 +01:00
this . inputType = "string" ;
this . outputType = "string" ;
this . args = [
{
"name" : "Output case" ,
"type" : "option" ,
"value" : [ "Both" , "Upper only" , "Lower only" ]
},
{
"name" : "No delimiter" ,
"type" : "boolean" ,
"value" : true
},
{
"name" : "Dash delimiter" ,
"type" : "boolean" ,
"value" : true
},
{
"name" : "Colon delimiter" ,
"type" : "boolean" ,
"value" : true
},
{
"name" : "Cisco style" ,
"type" : "boolean" ,
"value" : false
},
{
"name" : "IPv6 interface ID" ,
"type" : "boolean" ,
"value" : false
}
];
}
/**
* @param {string} input
* @param {Object[]} args
* @returns {string}
*/
run ( input , args ) {
if ( ! input ) return "" ;
const [
outputCase ,
noDelim ,
dashDelim ,
colonDelim ,
ciscoStyle ,
ipv6IntID
] = args ,
outputList = [],
macs = input . toLowerCase (). split ( /[,\s\r\n]+/ );
macs . forEach ( function ( mac ) {
const cleanMac = mac . replace ( /[:.-]+/g , "" ),
macHyphen = cleanMac . replace ( /(.{2}(?=.))/g , "$1-" ),
macColon = cleanMac . replace ( /(.{2}(?=.))/g , "$1:" ),
macCisco = cleanMac . replace ( /(.{4}(?=.))/g , "$1." );
let macIPv6 = cleanMac . slice ( 0 , 6 ) + "fffe" + cleanMac . slice ( 6 );
macIPv6 = macIPv6 . replace ( /(.{4}(?=.))/g , "$1:" );
let bite = parseInt ( macIPv6 . slice ( 0 , 2 ), 16 ) ^ 2 ;
bite = bite . toString ( 16 ). padStart ( 2 , "0" );
macIPv6 = bite + macIPv6 . slice ( 2 );
if ( outputCase === "Lower only" ) {
if ( noDelim ) outputList . push ( cleanMac );
if ( dashDelim ) outputList . push ( macHyphen );
if ( colonDelim ) outputList . push ( macColon );
if ( ciscoStyle ) outputList . push ( macCisco );
if ( ipv6IntID ) outputList . push ( macIPv6 );
} else if ( outputCase === "Upper only" ) {
if ( noDelim ) outputList . push ( cleanMac . toUpperCase ());
if ( dashDelim ) outputList . push ( macHyphen . toUpperCase ());
if ( colonDelim ) outputList . push ( macColon . toUpperCase ());
if ( ciscoStyle ) outputList . push ( macCisco . toUpperCase ());
if ( ipv6IntID ) outputList . push ( macIPv6 . toUpperCase ());
} else {
if ( noDelim ) outputList . push ( cleanMac , cleanMac . toUpperCase ());
if ( dashDelim ) outputList . push ( macHyphen , macHyphen . toUpperCase ());
if ( colonDelim ) outputList . push ( macColon , macColon . toUpperCase ());
if ( ciscoStyle ) outputList . push ( macCisco , macCisco . toUpperCase ());
if ( ipv6IntID ) outputList . push ( macIPv6 , macIPv6 . toUpperCase ());
}
outputList . push (
"" // Empty line to delimit groups
);
});
// Return the data as a string
return outputList . join ( "\n" );
}
}
export default FormatMACAddresses ;