view check.py @ 2:f3c64a15ee7e draft default tip

planemo upload for repository https://github.com/galaxyecology/tools-ecology/tree/master/tools/ocean commit a7e53c429cf93485aba692b928defe6ee01633d6
author ecology
date Tue, 22 Oct 2024 15:55:06 +0000
parents
children
line wrap: on
line source

import os
import subprocess
import sys


def validate_command(command):
    # Example validation: Ensure the command does not contain
    # potentially dangerous substrings
    forbidden_substrings = ["rm",
                            "rm -rf",
                            "sudo",
                            "dd if=",
                            "curl",
                            "wget",
                            ";",
                            "&&"]
    for substring in forbidden_substrings:
        if substring in command:
            message = f"Error: Command has forbidden substring '{substring}'"
            return False, message

    # Check if the command starts with 'copernicusmarine'
    if not command.startswith("copernicusmarine"):
        return False, "Error: Command must start with 'copernicusmarine'"

    # Remove 'copernicusmarine' from the start
    command = command[len("copernicusmarine"):].strip()

    # Check for specific commands and their arguments
    if command.startswith("subset"):
        # Check for required arguments for 'subset' command
        if not ("--dataset-id" in command or "--dataset-url" in command):
            message = (
                "Error: 'subset' command must have '--dataset-id' or "
                "'--dataset-url'"
            )
            return False, message
    elif command.startswith("get"):
        # Check for required arguments for 'get' command
        if not ("--dataset-id" in command or "--dataset-url" in command):
            message = (
                "Error: 'get' command must have '--dataset-id' or "
                "'--dataset-url'"
            )
            return False, message
    elif command.startswith("login") or command.startswith("describe"):
        message = "This tool only accepts 'subset' and 'get' commands."
        return False, message
    else:
        return False, "Error: Command must be 'subset' or 'get'"

    return True, None


def main():
    # Check if a filename argument is provided
    if len(sys.argv) != 2:
        print("Usage: python check.py <config_file>")
        sys.exit(1)

    # Get the filename from the command line argument
    config_file = sys.argv[1]

    # Check if the file exists
    if not os.path.isfile(config_file):
        print(f"Error: File '{config_file}' does not exist.")
        sys.exit(1)

    # Read the content of the file
    with open(config_file, "r") as file:
        command = file.read().strip()

    # Validate the command
    is_valid, error_message = validate_command(command)
    if not is_valid:
        print(error_message)
        sys.exit(1)

    # Execute the command
    try:
        subprocess.run(command, shell=True, check=True)
    except subprocess.CalledProcessError as e:
        print(f"Error: Command failed with exit code {e.returncode}")
        sys.exit(1)


if __name__ == "__main__":
    main()