def group_add(): title = "Add group" base = request.args.get('base') if not base: base = "OU=People,%s" % g.ldap['dn'] form = GroupEdit(request.form) field_mapping = [('sAMAccountName', form.name), ('description', form.description), (None, form.group_type), ('groupType', form.group_flags)] form.visible_fields = [field[1] for field in field_mapping] form.group_flags.choices = [ (key, value[0]) for key, value in LDAP_AD_GROUPTYPE_VALUES.items() if value[1] ] if form.validate_on_submit(): try: # Default attributes attributes = {'objectClass': "group"} for attribute, field in field_mapping: if attribute == "groupType": group_type = int(form.group_type.data) + \ int(form.group_flags.data) attributes[attribute] = str( struct.unpack("i", struct.pack("I", int(group_type)))[0]) elif attribute and field.data: attributes[attribute] = field.data ldap_create_entry("cn=%s,%s" % (form.name.data, base), attributes) flash("Group successfully created.", "success") return redirect( url_for('group_overview', groupname=form.name.data)) except ldap.LDAPError as e: error = e.message['info'].split(":", 2)[-1].strip() error = str(error[0].upper() + error[1:]) flash(error, "error") elif form.errors: flash("Some fields failed validation.", "error") if not form.is_submitted(): form.group_type.data = 2147483648 form.group_flags.data = 2 return render_template("forms/basicform.html", form=form, title=title, action="Add group", parent=url_for('group_add'))
def group_add(): title = "Add group" base = request.args.get('base') if not base: base = "OU=People,%s" % g.ldap['dn'] form = GroupEdit(request.form) field_mapping = [('sAMAccountName', form.name), ('description', form.description), (None, form.group_type), ('groupType', form.group_flags)] form.visible_fields = [field[1] for field in field_mapping] form.group_flags.choices = [(key, value[0]) for key, value in LDAP_AD_GROUPTYPE_VALUES.items() if value[1]] if form.validate_on_submit(): try: # Default attributes attributes = {'objectClass': "group"} for attribute, field in field_mapping: if attribute == "groupType": group_type = int(form.group_type.data) + \ int(form.group_flags.data) attributes[attribute] = str( struct.unpack("i", struct.pack("I", int(group_type)))[0]) elif attribute and field.data: attributes[attribute] = field.data ldap_create_entry("cn=%s,%s" % (form.name.data, base), attributes) flash("Group successfully created.", "success") return redirect(url_for('group_overview', groupname=form.name.data)) except ldap.LDAPError as e: error = e.message['info'].split(":", 2)[-1].strip() error = str(error[0].upper() + error[1:]) flash(error, "error") elif form.errors: flash("Some fields failed validation.", "error") if not form.is_submitted(): form.group_type.data = 2147483648 form.group_flags.data = 2 return render_template("forms/basicform.html", form=form, title=title, action="Add group", parent=url_for('group_add'))
def group_add(): title = "Add group" form = GroupEdit(request.form) field_mapping = [('sAMAccountName', form.name), ('description', form.description), ('mail', form.mail), (None, form.group_type), ('groupType', form.group_flags)] form.visible_fields = [field[1] for field in field_mapping] form.group_flags.choices = [ (key, value[0]) for key, value in LDAP_AD_GROUPTYPE_VALUES.items() if value[1] ] if form.validate_on_submit(): try: base = request.args.get("b'base") base = base.rstrip("'") # Default attributes attributes = {'objectClass': b"group"} for attribute, field in field_mapping: if attribute == "groupType": group_type = int(form.group_type.data) + int( form.group_flags.data) attributes[attribute] = str( struct.unpack("i", struct.pack( "I", int(group_type)))[0]).encode('utf-8') elif attribute and field.data: attributes[attribute] = field.data.encode('utf-8') print(attributes) print("cn=%s,%s" % (form.name.data, base)) ldap_create_entry("cn=%s,%s" % (form.name.data, base), attributes) flash(u"Group created successfully.", "success") return redirect( url_for('group_overview', groupname=form.name.data)) except ldap.LDAPError as e: e = dict(e.args[0]) flash(e['info'], "error") elif form.errors: flash(u"Data validation failed.", "error") if not form.is_submitted(): form.group_type.data = 2147483648 form.group_flags.data = 2 return render_template("forms/basicform.html", form=form, title=title, action="Add group", parent=url_for('tree_base'))
def group_edit(groupname): title = "Edit group" if not ldap_group_exists(groupname): abort(404) group = ldap_get_group(groupname) # We can't edit system groups if group['groupType'] & 1: abort(401) form = GroupEdit(request.form) field_mapping = [('sAMAccountName', form.name), ('description', form.description), (None, form.group_type), ('groupType', form.group_flags)] form.visible_fields = [field[1] for field in field_mapping] form.group_flags.choices = [(key, value[0]) for key, value in LDAP_AD_GROUPTYPE_VALUES.items() if value[1]] if form.validate_on_submit(): try: for attribute, field in field_mapping: value = field.data if value != group.get(attribute): if attribute == 'sAMAccountName': # Rename the account ldap_update_attribute(group['distinguishedName'], "sAMAccountName", value) # Finish by renaming the whole record ldap_update_attribute(group['distinguishedName'], "cn", value) group = ldap_get_group(value) elif attribute == "groupType": group_type = int(form.group_type.data) + \ int(form.group_flags.data) ldap_update_attribute( group['distinguishedName'], attribute, str( struct.unpack( "i", struct.pack( "I", int(group_type)))[0])) elif attribute: ldap_update_attribute(group['distinguishedName'], attribute, value) flash("Group successfully updated.", "success") return redirect(url_for('group_overview', groupname=form.name.data)) except ldap.LDAPError as e: error = e.message['info'].split(":", 2)[-1].strip() error = str(error[0].upper() + error[1:]) flash(error, "error") elif form.errors: flash("Some fields failed validation.", "error") if not form.is_submitted(): form.name.data = group.get('sAMAccountName') form.description.data = group.get('description') form.group_type.data = group['groupType'] & 2147483648 form.group_flags.data = 0 for key, flag in LDAP_AD_GROUPTYPE_VALUES.items(): if flag[1] and group['groupType'] & key: form.group_flags.data += key return render_template("forms/basicform.html", form=form, title=title, action="Save changes", parent=url_for('group_overview', groupname=groupname))
def group_edit(groupname): title = "Edit group" if not ldap_group_exists(groupname): abort(404) group = ldap_get_group(groupname) # We can't edit system groups if group['groupType'] & 1: abort(401) form = GroupEdit(request.form) field_mapping = [('sAMAccountName', form.name), ('description', form.description), (None, form.group_type), ('groupType', form.group_flags)] form.visible_fields = [field[1] for field in field_mapping] form.group_flags.choices = [ (key, value[0]) for key, value in LDAP_AD_GROUPTYPE_VALUES.items() if value[1] ] if form.validate_on_submit(): try: for attribute, field in field_mapping: value = field.data if value != group.get(attribute): if attribute == 'sAMAccountName': # Rename the account ldap_update_attribute(group['distinguishedName'], "sAMAccountName", value) # Finish by renaming the whole record ldap_update_attribute(group['distinguishedName'], "cn", value) group = ldap_get_group(value) elif attribute == "groupType": group_type = int(form.group_type.data) + \ int(form.group_flags.data) ldap_update_attribute( group['distinguishedName'], attribute, str( struct.unpack( "i", struct.pack("I", int(group_type)))[0])) elif attribute: ldap_update_attribute(group['distinguishedName'], attribute, value) flash("Group successfully updated.", "success") return redirect( url_for('group_overview', groupname=form.name.data)) except ldap.LDAPError as e: error = e.message['info'].split(":", 2)[-1].strip() error = str(error[0].upper() + error[1:]) flash(error, "error") elif form.errors: flash("Some fields failed validation.", "error") if not form.is_submitted(): form.name.data = group.get('sAMAccountName') form.description.data = group.get('description') form.group_type.data = group['groupType'] & 2147483648 form.group_flags.data = 0 for key, flag in LDAP_AD_GROUPTYPE_VALUES.items(): if flag[1] and group['groupType'] & key: form.group_flags.data += key return render_template("forms/basicform.html", form=form, title=title, action="Save changes", parent=url_for('group_overview', groupname=groupname))