def role_to_group(url_type=None): etcd_conn = Etcd() button_list = [{'name': _('New'), 'href': '/role_to_group/change'}, {'name': _('List'), 'href': '/role_to_group'}] header = [(_('Services'), 'service_key'), (_('Group Name'), 'group'), (_('Enabled'), 'enabled')] if url_type == 'change': form = forms.RoleForm() service_list = [(None, _('Select'))] for x in etcd_conn.search('/services'): service_list.append((str(x[1].key.decode("utf-8")), str(x[0].get('name')))) form.service.choices = service_list if form.validate_on_submit(): try: status = 'false' if form.enabled.data: status = 'true' key = '/role_to_group/' + form.group_name.data.replace('.', '/') + "/" + str(form.role_id.data) etcd_conn.put(key, json.dumps( {"enabled": status, "group": form.role.data, "service_key": form.service.data})) except Exception as error: print(error) flash(_('Role to Group') + ' ' + _('Added') + ' / ' + _('Updated'), 'success') return flask.redirect('/role_to_group/refresh?key={}'.format(key)) elif flask.request.args.get('key'): parse_key = flask.request.args.get('key').split('/') form_data = etcd_conn.get_list(flask.request.args.get('key')) form.enabled.data = False if form_data.get('enabled') == 'true': form.enabled.data = True form.service.data = form_data.get('service_key') form.group_name.data = parse_key[2] + '.' + parse_key[3] form.role.data = form_data.get('group') form.role_id.data = parse_key[4] form.service.render_kw = {'readonly': True} form.group_name.render_kw = {'readonly': True} form.role.render_kw = {'readonly': True} return flask.render_template('role.html', main_header=_('Role to Group'), form=form, button_list=button_list) elif url_type == 'delete': parse_key = flask.request.args.get('key').split('/') for x in etcd_conn.get_prefix('/users/', sort_order="ascend", sort_target="key"): parse_user_key = str(x[1].key.decode("utf-8")).split('/') # print(parse_user_key) if parse_user_key[3] == parse_key[2] and parse_user_key[4] == parse_key[3]: etcd_conn.delete(x[1].key.decode("utf-8")) etcd_conn.delete(flask.request.args.get('key')) flash(_('Role to Group') + ' ' + _('Deleted'), 'error') return flask.redirect('/role_to_group') elif url_type == 'refresh': key = flask.request.args.get('key') parse_key = key.split('/') role_to_group = etcd_conn.get_list(key) status = role_to_group.get('enabled') service = etcd_conn.get_list(role_to_group.get('service_key')) import requests r = requests.post(service.get('user_service_url'), json={service.get('user_service_param'): parse_key[4]}, auth=(service.get('username'), service.get('password'))) for row in r.json(): id = row.get(service.get('user_service_key')) key = '/users/{}/{}/{}'.format(str(id), parse_key[2], parse_key[3]) try: user = etcd_conn.get_list(key) if user.get('enabled') != status: etcd_conn.put(key, json.dumps({"enabled": status})) except: etcd_conn.put(key, json.dumps({"enabled": status})) flash(_('Role to Group') + ' ' + _('Refreshed'), 'success') return flask.redirect('/role_to_group') group_list = etcd_conn.search('/role_to_group/') page = pagination(len(group_list)) links = [{'name': _('Delete'), 'type': 'danger', 'link': '/role_to_group/delete'}, {'name': _('Update'), 'type': 'info', 'link': '/role_to_group/change'}, {'name': _('Refresh'), 'type': 'success', 'link': '/role_to_group/refresh'}] return flask.render_template('list.html', main_header=_('Role to Group'), button_list=button_list, list=get_calculated_page(group_list, page), headers=header, links=links, pagination=page)