#!/bin/bash

OUI_BASE_UPDATE_LOG=/tmp/oui-base-update.log
TMP_OUI_TXT=/tmp/oui.txt
OUI_BASE_DIR=/usr/share/oui-base/
OUI_FILE=$OUI_BASE_DIR/oui.txt
OUI_SMALL_FILE=$OUI_BASE_DIR/oui-small.txt
OUI_FR_FILE=$OUI_BASE_DIR/oui-freeradius.txt
TEMPLATE_FILE=$OUI_BASE_DIR/replacement.txt
COMPANIES_FILE=$OUI_BASE_DIR/companies.txt
FREERADIUS_UBI_VENDORS="Apple|Ubiquiti"

# Step 1: download new oui.txt

date > $OUI_BASE_UPDATE_LOG

# wget doesn't overwrite it (ignores downloading)
rm $TMP_OUI_TXT

# -t 5 - number of retries
# -T 1800 - downloading timeout, seconds
# -c - resume getting a partially-downloaded file
# -O $TMP_OUI_TXT - write documents to FILE.
# To connect to standards.ieee.org insecurely, use `--no-check-certificate'
wget --no-check-certificate -t 5 -T 1800 -c https://standards-oui.ieee.org/oui/oui.txt -O $TMP_OUI_TXT

RETVAL=$?
if [ $RETVAL -ne 0 ]; then
    echo "Error while downloading file. Exit!" >> $OUI_BASE_UPDATE_LOG
    exit 1
fi

# Step 2: oui.txt validation

awk '
BEGIN {
z=1
IGNORECASE = 1
}
/.*00\-00\-00.+/ {
z=0
exit z
}
END {
exit z
}' $TMP_OUI_TXT

AWKRET=$?
echo "oui.txt return $AWKRET"

if [ $AWKRET -ne 0 ]; then
    echo "Invalid ${TMP_OUI_TXT}. Exit!" >> $OUI_BASE_UPDATE_LOG
    exit 2
fi

# Step 3: copy to share

if [ ! -d $OUI_BASE_DIR ]; then
mkdir $OUI_BASE_DIR
fi

cp $TMP_OUI_TXT $OUI_FILE
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
    echo "Can't copy file!" >> $OUI_BASE_UPDATE_LOG
    exit 3
fi

# Step 4: generate simple file

sed -e '/(hex)/!d' -e 's/\r$//' -e 's/\s*(hex)\s*/ /' $OUI_FILE > $OUI_SMALL_FILE
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
    echo "Can't generate simple file! $RETVAL" >> $OUI_BASE_UPDATE_LOG
    exit 4
fi

# Step 5: small-oui.txt replacing  sudo sed -ie 's/, Inc//g' oui.txt
IFS=$'\n'
for j in $(cat $TEMPLATE_FILE)
do
    #obtain mac address
    sed -ie "s/$j//g" $OUI_SMALL_FILE
    echo "remove from $OUI_SMALL_FILE $j" >> $OUI_BASE_UPDATE_LOG
done
echo "remove from $OUI_SMALL_FILE end ','" >> $OUI_BASE_UPDATE_LOG
sed -ie "s/, *$//g" $OUI_SMALL_FILE

# Step 6: oui-small.txt replacing company names
IFS=$'\n'
for j in $(cat $COMPANIES_FILE)
do
    sed -ie "$j" $OUI_SMALL_FILE
    echo "replace in $OUI_SMALL_FILE by sed '$j'" >> $OUI_BASE_UPDATE_LOG
done

# Step 7: filter ubi-like vendors for freeradius
grep -P "$FREERADIUS_UBI_VENDORS" "$OUI_SMALL_FILE" > "$OUI_FR_FILE"

echo "${OUI_BASE_DIR}oui.txt updated successfully" >> $OUI_BASE_UPDATE_LOG

exit 0
