ronin-rb/ronin-masscan

View on GitHub
scripts/setup

Summary

Maintainability
Test Coverage
#!/usr/bin/env bash

#
# Prints a log message.
#
function log()
{
    if [[ -t 1 ]]; then
        echo -e "\x1b[1m\x1b[32m>>>\x1b[0m \x1b[1m$1\x1b[0m"
    else
        echo ">>> $1"
    fi
}

#
# Prints a warn message.
#
function warn()
{
    if [[ -t 1 ]]; then
        echo -e "\x1b[1m\x1b[33m***\x1b[0m \x1b[1m$1\x1b[0m" >&2
    else
        echo "*** $1" >&2
    fi
}

#
# Prints an error message.
#
function error()
{
    if [[ -t 1 ]]; then
        echo -e "\x1b[1m\x1b[31m!!!\x1b[0m \x1b[1m$1\x1b[0m" >&2
    else
        echo "!!! $1" >&2
    fi
}

#
# Prints an error message and exists with -1.
#
function fail()
{
    error "$@"
    exit -1
}

#
# Sets os_platform and os_arch.
#
function detect_os()
{
    os_platform="$(uname -s)"
    os_arch="$(uname -m)"
}

#
# Auto-detect the package manager.
#
function detect_package_manager()
{
    case "$os_platform" in
        Linux)
            if [[ -f /etc/redhat-release ]]; then
                if   command -v dnf >/dev/null; then
                    package_manager="dnf"
                elif command -v yum >/dev/null; then
                    package_manager="yum"
                fi
            elif [[ -f /etc/debian_version ]]; then
                if command -v apt-get >/dev/null; then
                    package_manager="apt"
                fi
            elif [[ -f /etc/SuSE-release ]]; then
                if command -v zypper >/dev/null; then
                    package_manager="zypper"
                fi
            elif [[ -f /etc/arch-release ]]; then
                if command -v pacman >/dev/null; then
                    package_manager="pacman"
                fi
            elif [[ -f /etc/os-release ]]; then
                if command -v pacman >/dev/null; then
                    package_manager="pacman"
                elif command -v zypper >/dev/null; then
                    package_manager="zypper"
                fi
            elif [[ "$HOME" == *"com.termux"* ]]; then
                package_manager="termux"
            fi
            ;;
        Darwin)
            if   command -v brew >/dev/null; then
                package_manager="brew"
            elif command -v port >/dev/null; then
                package_manager="port"
            fi
            ;;
        *BSD)
            if command -v pkg >/dev/null; then
                package_manager="pkg"
            fi
            ;;
    esac
}

#
# Detects the system.
#
function detect_system()
{
    detect_os
    detect_package_manager
}

#
# Installs a list of package names using the detected package manager.
#
function install_packages()
{
    case "$package_manager" in
        apt)    $sudo apt-get install -y "$@" || return $? ;;
        dnf|yum)$sudo $package_manager install -y "$@" || return $?     ;;
        port)   $sudo port install "$@" || return $?       ;;
        pkg)    $sudo pkg install -y "$@" || return $?     ;;
        brew)
            local brew_owner="$(/usr/bin/stat -f %Su "$(command -v brew)")"
            sudo -u "$brew_owner" brew install "$@" ||
            sudo -u "$brew_owner" brew upgrade "$@" || return $?
            ;;
        pacman)
            local missing_pkgs=($(pacman -T "$@"))

            if (( ${#missing_pkgs[@]} > 0 )); then
                $sudo pacman -Sy --noconfirm "${missing_pkgs[@]}" || return $?
            fi
            ;;
        zypper) $sudo zypper -n in -l $* || return $? ;;
        termux)    pkg install -y "$@" || return $? ;;
        "")    warn "Could not determine Package Manager. Proceeding anyway." ;;
    esac
}

if ! command -v masscan >/dev/null; then
    detect_system

    log "Installing masscan ..."
    install_packages masscan || warn "Could not install masscan. Proceeding anyways ..."
fi

# default to installing gems into vendor/bundle
if [[ ! -f .bundle/config ]]; then
    bundle config set --local path vendor/bundle >/dev/null || \
      fail "Failed to run 'bundle config'"
fi

log "Installing gems ..."
bundle install || fail "Failed to run 'bundle install'!"

log "Setting up the project ..."
bundle exec rake setup || "Failed to run 'rake setup'!"