summaryrefslogtreecommitdiffstats
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/objects/modes.py43
1 files changed, 39 insertions, 4 deletions
diff --git a/cli/objects/modes.py b/cli/objects/modes.py
index 6171c84..ccb32f5 100644
--- a/cli/objects/modes.py
+++ b/cli/objects/modes.py
@@ -18,16 +18,51 @@ class OgModes():
@staticmethod
def set_modes(rest, args):
parser = argparse.ArgumentParser()
- parser.add_argument('--scope-name',
+ parser.add_argument('--scope-id',
nargs=1,
required=True,
- help='Name of the scope (room or computer)')
+ help='ID of the scope')
+ parser.add_argument('--scope-type',
+ nargs=1,
+ required=True,
+ help='Type of the scope')
parser.add_argument('--mode',
nargs=1,
required=True,
help='Mode for the scope')
parsed_args = parser.parse_args(args)
- payload = {'scope_name': parsed_args.scope_name[0],
- 'mode': parsed_args.mode[0]}
+ def scope_lookup(scope_id, scope_type, d):
+ if scope_id == d.get('id') and \
+ scope_type == d.get('type'):
+ return d
+ for scope in d['scope']:
+ lookup = scope_lookup(scope_id,
+ scope_type,
+ scope)
+ if lookup is not None:
+ return lookup
+ return None
+
+ def ips_in_scope(scope):
+ if 'ip' in scope:
+ return [scope['ip']]
+ ips = []
+ for child in scope['scope']:
+ ips += ips_in_scope(child)
+ return ips
+
+ r = rest.get('/scopes')
+ scopes = r.json()
+ found_scope = scope_lookup(int(parsed_args.scope_id[0]),
+ parsed_args.scope_type[0],
+ scopes)
+
+ if found_scope is None:
+ print("Scope not found")
+ return None
+
+ ips = ips_in_scope(found_scope)
+
+ payload = {'clients': ips, 'mode': parsed_args.mode[0]}
r = rest.post('/mode', payload=payload)