failmap/admin

View on GitHub
websecmap/scanners/management/commands/scan.py

Summary

Maintainability
C
1 day
Test Coverage
import logging

from websecmap.app.management.commands._private import ScannerTaskCommand
from websecmap.scanners.scanner import (
    dns_clean_wildcards,
    dnssec,
    dummy,
    ftp,
    internet_nl_v2_mail,
    internet_nl_v2_web,
    onboard,
    plain_http,
    screenshot,
    security_headers,
    tls_qualys,
)

log = logging.getLogger(__name__)

scanners = {
    "onboard": onboard,
    "dummy": dummy,
    "dnssec": dnssec,
    "headers": security_headers,
    "plain": plain_http,
    "tlsq": tls_qualys,
    "ftp": ftp,
    "mail": internet_nl_v2_mail,
    "screenshot": screenshot,
    "internet_nl_web_v2": internet_nl_v2_web,
    "clean_wildcards": dns_clean_wildcards,
}


class Command(ScannerTaskCommand):
    """Can perform a host of scans. Run like: failmap scan [scanner_name] and then options."""

    help = __doc__

    def add_arguments(self, parser):
        parser.add_argument("scanner", nargs=1, help="The scanner you want to use.", choices=scanners)
        super().add_arguments(parser)

    def handle(self, *args, **options):

        try:
            if options["scanner"][0] not in scanners:
                print("Scanner does not exist. Please specify a scanner: %s " % scanners.keys())
                return

            self.scanner_module = scanners[options["scanner"][0]]
            return super().handle(self, *args, **options)

        except KeyboardInterrupt:
            log.info("Received keyboard interrupt. Stopped.")