#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # """ Configuration helper for Plinth firewall inteface """ import argparse import subprocess def parse_arguments(): """Return parsed command line arguments as dictionary""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') # Get status subparsers.add_parser('get-status', help='Get whether firewalld is running') # Get service status get_enabled_services = subparsers.add_parser( 'get-enabled-services', help='Get list of enabled services') get_enabled_services.add_argument( '--zone', help='Zone from which the list is to be retrieved', required=True) # Add a service add_service = subparsers.add_parser('add-service', help='Add a service') add_service.add_argument('service', help='Name of the service to add') add_service.add_argument('--zone', help='Zone to which service is to be added', required=True) # Remove a service status remove_service = subparsers.add_parser('remove-service', help='Remove a service') remove_service.add_argument('service', help='Name of the service to remove') remove_service.add_argument( '--zone', help='Zone from which service is to be removed', required=True) return parser.parse_args() def subcommand_get_status(_): """Print status of the firewalld service""" subprocess.call(['firewall-cmd', '--state']) def subcommand_get_enabled_services(arguments): """Print the status of variours services""" subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--list-services']) def subcommand_add_service(arguments): """Permit a service in the firewall""" subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--add-service', arguments.service]) subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--permanent', '--add-service', arguments.service]) def subcommand_remove_service(arguments): """Block a service in the firewall""" subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--remove-service', arguments.service]) subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--permanent', '--remove-service', arguments.service]) def main(): """Parse arguments and perform all duties""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == "__main__": main()