53 lines
No EOL
1.5 KiB
Python
53 lines
No EOL
1.5 KiB
Python
from core.controllers.PolicyController import PolicyController
|
|
import pprint
|
|
|
|
NAME = 'policy'
|
|
|
|
|
|
def register(subparsers):
|
|
parser = subparsers.add_parser(NAME)
|
|
subs = parser.add_subparsers(title='subcommands', dest='subcommand')
|
|
|
|
base = _base_parser()
|
|
|
|
subs.add_parser('preview', parents=[base])
|
|
subs.add_parser('instate', parents=[base])
|
|
subs.add_parser('inspect', parents=[base])
|
|
subs.add_parser('revoke', parents=[base])
|
|
|
|
return parser
|
|
|
|
|
|
def handle(arguments, main_parser):
|
|
if arguments.subcommand is None:
|
|
main_parser.parse_args(['policy', '--help'])
|
|
return
|
|
|
|
policy = PolicyController.get(arguments.policy)
|
|
|
|
if policy is None:
|
|
main_parser.error('the following argument should be a valid reference: --policy/-p')
|
|
|
|
if arguments.subcommand == 'preview':
|
|
print(PolicyController.preview(policy))
|
|
|
|
elif arguments.subcommand == 'instate':
|
|
PolicyController.instate(policy)
|
|
|
|
elif arguments.subcommand == 'inspect':
|
|
if PolicyController.is_instated(policy):
|
|
pprint.pp({'status': 'Instated'})
|
|
elif PolicyController.is_suggestible(policy):
|
|
pprint.pp({'status': 'Suggested'})
|
|
else:
|
|
pprint.pp({'status': 'Uninstated'})
|
|
|
|
elif arguments.subcommand == 'revoke':
|
|
PolicyController.revoke(policy)
|
|
|
|
|
|
def _base_parser():
|
|
import argparse
|
|
p = argparse.ArgumentParser(add_help=False)
|
|
p.add_argument('--policy', '-p', choices=['capability', 'privilege'], required=True)
|
|
return p |