#!/bin/bash

# Version: 2025/10

## If you are using proxy, please uncomment ##
# PROXY='http://<modify>:<port>'

## If you dont't refresh scanner, please set "false" ##
AUTO_REFRESH_BINARY=${AUTO_REFRESH_BINARY:=true}

VULS_USER=${VULS_USER:=vuls-saas}
VULS_GROUP=${VULS_GROUP:=vuls-saas}
VULS_ROOT_DIR=${VULS_ROOT_DIR:=/opt/vuls-saas}
VULS_INSTALLER_REPO=${VULS_INSTALLER_REPO:=https://installer.vuls.biz}

#####
my_logger() {
  echo "[$(date '+%Y/%m/%d %H:%M:%S')] \"$1\": $2" >> ${VULS_ROOT_DIR}/vuls-saas.log
}

REFRESH_BINARY() {
  if [[ $AUTO_REFRESH_BINARY == false ]]; then
    my_logger "SKIP" "Refresh scanner."
    return
  fi

  LATEST_VERSION=$(curl -L -s ${VULS_INSTALLER_REPO}/latest_version_linux.txt)
  if [ -z "$LATEST_VERSION" ]; then
    my_logger "WARN" "Failed to get latest version. Continuing with refresh."
  elif [ -f "${VULS_ROOT_DIR}/vuls" ]; then
    CURRENT_VERSION=$(${VULS_ROOT_DIR}/vuls -v | awk '{print $2}')
    if [ "$LATEST_VERSION" = "$CURRENT_VERSION" ]; then
      my_logger "INFO" "Scanner is already at the latest version (${CURRENT_VERSION})."
      return
    fi
    my_logger "INFO" "Scanner update available. Current: ${CURRENT_VERSION}, Latest: ${LATEST_VERSION}"
  else
    my_logger "INFO" "No existing scanner found. Installing the latest version."
  fi

  mv ${VULS_ROOT_DIR}/vuls ${VULS_ROOT_DIR}/vuls-old

  arch=$(uname -m)
  binType="linux"
  if [[ $(uname -a | grep -c FreeBSD) -ne 0 ]]; then
    binType='freebsd'
  fi

  curl -L -s -o ${VULS_ROOT_DIR}/vuls ${VULS_INSTALLER_REPO}/vuls_${binType}_${arch}
  if [ $? -ne 0 ]; then
    my_logger "WARN" "Download binary failer. [type: ${binType}_${arch}]"
    my_logger "WARN" "Use old binary."
    mv ${VULS_ROOT_DIR}/vuls-old ${VULS_ROOT_DIR}/vuls
    return
  fi

  rm -rf ${VULS_ROOT_DIR}/vuls-old
  chown "${VULS_USER}":"${VULS_GROUP}" "${VULS_ROOT_DIR}/vuls"
  chmod 770 ${VULS_ROOT_DIR}/vuls
  my_logger "SUCCESS" "Refresh scanner. [${VULS_ROOT_DIR}/vuls   type: ${binType}_${arch}]"
}

export http_proxy=${PROXY}
export https_proxy=${PROXY}

: > ${VULS_ROOT_DIR}/vuls-saas.log
my_logger "INFO" "Start to scan."

REFRESH_BINARY

cd $(dirname $0)

./vuls scan -ips "$@" > scan.log 2>&1
if [ $? -gt 0 ]; then
  my_logger "ERROR" "Failed to complete vuls scan."
fi
my_logger "SUCCESS" "Complete vuls scan."

./vuls saas > report.log 2>&1
if [ $? -gt 0 ]; then
  my_logger "ERROR" "Failed to complete vuls upload."
  exit 1
fi
my_logger "SUCCESS" "Complete vuls upload."

chown ${VULS_USER}:${VULS_GROUP} ${VULS_ROOT_DIR}/*

exit 0
