def post(self, residence, prenom, nom, mail, phone, go_redirect=True): member_uid = Translations.to_uid(prenom, nom) if phone == '': phone = ' ' #end if residence_dn = Residences.get_dn_by_name(self.user, residence) # On modifie silencieusement le nom de la machine si il existe déjà def try_name(name, number): actual_name = name if number > 0: actual_name = name + str(number) #end if member = Member.get_by_uid(self.user, residence_dn, actual_name) if member is not None: return try_name(name, number + 1) else: return actual_name #end if #endif def year_directory_exists(year): search = self.user.ldap_bind.search( ldap_config.username_base_dn + residence_dn, "(ou=" + str(year) + ")") if len(search) == 0: BrieLogging.get().info("Year " + str(year) + " directory does not exist. Creating.") directory_attrs = { "objectClass": ["top", "organizationalUnit"], "ou": str(year).encode("utf-8") } directory_dn = "ou=" + str( year) + "," + ldap_config.username_base_dn + residence_dn self.user.ldap_bind.add_entry(directory_dn, directory_attrs) member_uid = try_name(member_uid, 0) member = Member.entry_attr(member_uid, prenom, nom, mail, phone, -1) year = CotisationComputes.registration_current_year() member_dn = "uid=" + member_uid + ",ou=" + str( year) + "," + ldap_config.username_base_dn + residence_dn year_directory_exists(year) self.user.ldap_bind.add_entry(member_dn, member) #preview = member, room #index_result["preview"] = preview if go_redirect: redirect("/edit/member/" + residence + "/" + member_uid) else: return member_uid
def post(self, residence, prenom, nom, mail, phone, go_redirect=True): member_uid = Translations.to_uid(prenom, nom) if phone == "": phone = " " # end if residence_dn = Residences.get_dn_by_name(self.user, residence) # On modifie silencieusement le nom de la machine si il existe déjà def try_name(name, number): actual_name = name if number > 0: actual_name = name + str(number) # end if member = Member.get_by_uid(self.user, residence_dn, actual_name) if member is not None: return try_name(name, number + 1) else: return actual_name # end if # endif def year_directory_exists(year): search = self.user.ldap_bind.search(ldap_config.username_base_dn + residence_dn, "(ou=" + str(year) + ")") if len(search) == 0: BrieLogging.get().info("Year " + str(year) + " directory does not exist. Creating.") directory_attrs = {"objectClass": ["top", "organizationalUnit"], "ou": str(year).encode("utf-8")} directory_dn = "ou=" + str(year) + "," + ldap_config.username_base_dn + residence_dn self.user.ldap_bind.add_entry(directory_dn, directory_attrs) member_uid = try_name(member_uid, 0) member = Member.entry_attr(member_uid, prenom, nom, mail, phone, -1) year = CotisationComputes.registration_current_year() member_dn = "uid=" + member_uid + ",ou=" + str(year) + "," + ldap_config.username_base_dn + residence_dn year_directory_exists(year) self.user.ldap_bind.add_entry(member_dn, member) # preview = member, room # index_result["preview"] = preview if go_redirect: redirect("/edit/member/" + residence + "/" + member_uid) else: return member_uid
def post(self, residence, member_uid, name, mac, go_redirect=True, plugin_action=None): residence_dn = Residences.get_dn_by_name(self.user, residence) member_base_dn = ldap_config.username_base_dn + residence_dn member = Member.get_by_uid(self.user, residence_dn, member_uid) mac = mac.strip() name = name.strip().replace(" ", "-").replace("_", "-") name = Translations.formatName(name) # name = Translations.strip_accents(name) # Vérification que l'adresse mac soit correcte mac_match = re.match("^([0-9A-Fa-f]{2}[:-]?){5}([0-9A-Fa-f]{2})$", mac) if mac_match is None: # TODO : changer l'exception en une page d'erreur raise Exception("mac non valide") # endif # Remplacement de l'adresse mac non séparée mac_match = re.match( "^([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$", mac ) if mac_match is not None: mac = ( mac_match.group(1) + ":" + mac_match.group(2) + ":" + mac_match.group(3) + ":" + mac_match.group(4) + ":" + mac_match.group(5) + ":" + mac_match.group(6) ) # endif # Remplacement de l'adresse mac séparée par des tirets mac_match = re.match( "^([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})$", mac, ) if mac_match is not None: mac = ( mac_match.group(1) + ":" + mac_match.group(2) + ":" + mac_match.group(3) + ":" + mac_match.group(4) + ":" + mac_match.group(5) + ":" + mac_match.group(6) ) # endif # Passage au format lowercase mac = mac.lower() # Vérification que le membre existe if member is None: # TODO : membre inexistant pass # endif # Vérification que l'adresse mac de la machine n'existe pas déjà # Note : on cherche sur toute la résidence (residence_dn) machine = Machine.get_dhcp_by_mac(self.user, member_base_dn, mac) if machine is not None: # TODO : gérer l'exception raise Exception("mac address already exist") # endif # Nettoyage des erreurs communes # On modifie silencieusement le nom de la machine si il existe déjà def try_name(name, number): actual_name = name if number > 0: actual_name = name + "-" + str(number) # end if machine = Machine.get_dns_by_name(self.user, member_base_dn, actual_name) if machine is not None: return try_name(name, number + 1) else: return actual_name # end if # endif # On retire les underscore interdits name = re.sub("_", "-", name) name = try_name(name, 0) # Génération de l'id de la machine et recherche d'une ip libre ip = IpReservation.get_first_free(self.user, residence_dn) if ip is None: raise Exception("le pool d'adresse IP est vide. aucune adresse IP disponible pour ajouter une machine") # end if # Indique que l'ip est prise taken_attribute = IpReservation.taken_attr(str(datetime.today())) self.user.ldap_bind.add_attr(ip.dn, taken_attribute) machine_folder = Machine.folder_attr() machine_folder_dn = ldap_config.machine_base_dn + member.dn try: self.user.ldap_bind.add_entry(machine_folder_dn, machine_folder) except ldap.ALREADY_EXISTS: pass # OKAY # end try # Attributs ldap de l'objet machine (regroupant dns et dhcp) machine_top = Machine.entry_attr(name) # Attributs ldap des objets dhcp et dns, fils de l'objet machine machine_dhcp = Machine.dhcp_attr(name, mac) machine_dns = Machine.dns_attr(name, ip.cn.first()) # Construction du dn et ajout de l'objet machine # en fils du membre (membre.dn) machine_dn = "cn=" + name + "," + ldap_config.machine_base_dn + member.dn self.user.ldap_bind.add_entry(machine_dn, machine_top) # Construction du dn et ajout de l'objet dhcp # en fils de la machine (machine_dn) dhcp_dn = "cn=dhcp," + machine_dn self.user.ldap_bind.add_entry(dhcp_dn, machine_dhcp) # Construction du dn et ajout de l'objet dns dns_dn = "cn=dns," + machine_dn self.user.ldap_bind.add_entry(dns_dn, machine_dns) # Ajout de l'entrée dans les logs BrieLogging.get().info( "ajout machine " + mac + " pour l'utilisateur " + member.dn + " par l'admin " + self.user.attrs.dn ) plugin_vars = {"machine_dn": machine_dn, "name": name, "ip": ip, "mac": mac} plugin_action(self.user, residence, plugin_vars) if go_redirect: redirect("/edit/member/" + residence + "/" + member_uid)
def post(self, residence, member_uid, name, mac, go_redirect=True, plugin_action=None): residence_dn = Residences.get_dn_by_name(self.user, residence) member_base_dn = ldap_config.username_base_dn + residence_dn member = Member.get_by_uid(self.user, residence_dn, member_uid) mac = mac.strip() name = name.strip().replace(" ", "-").replace("_", "-") name = Translations.formatName(name) #name = Translations.strip_accents(name) #Vérification que l'adresse mac soit correcte mac_match = re.match('^([0-9A-Fa-f]{2}[:-]?){5}([0-9A-Fa-f]{2})$', mac) if mac_match is None: #TODO : changer l'exception en une page d'erreur raise Exception("mac non valide") #endif #Remplacement de l'adresse mac non séparée mac_match = re.match( '^([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$', mac) if mac_match is not None: mac = mac_match.group(1) + ":" + mac_match.group( 2) + ":" + mac_match.group(3) + ":" + mac_match.group( 4) + ":" + mac_match.group(5) + ":" + mac_match.group(6) #endif #Remplacement de l'adresse mac séparée par des tirets mac_match = re.match( '^([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})-([0-9A-Fa-f]{2})$', mac) if mac_match is not None: mac = mac_match.group(1) + ":" + mac_match.group( 2) + ":" + mac_match.group(3) + ":" + mac_match.group( 4) + ":" + mac_match.group(5) + ":" + mac_match.group(6) #endif #Passage au format lowercase mac = mac.lower() # Vérification que le membre existe if member is None: #TODO : membre inexistant pass #endif # Vérification que l'adresse mac de la machine n'existe pas déjà # Note : on cherche sur toute la résidence (residence_dn) machine = Machine.get_dhcp_by_mac(self.user, member_base_dn, mac) if machine is not None: #TODO : gérer l'exception raise Exception("mac address already exist") #endif # Nettoyage des erreurs communes # On modifie silencieusement le nom de la machine si il existe déjà def try_name(name, number): actual_name = name if number > 0: actual_name = name + "-" + str(number) #end if machine = Machine.get_dns_by_name(self.user, member_base_dn, actual_name) if machine is not None: return try_name(name, number + 1) else: return actual_name #end if #endif #On retire les underscore interdits name = re.sub('_', '-', name) name = try_name(name, 0) # Génération de l'id de la machine et recherche d'une ip libre ip = IpReservation.get_first_free(self.user, residence_dn) if ip is None: raise Exception( "le pool d'adresse IP est vide. aucune adresse IP disponible pour ajouter une machine" ) #end if # Indique que l'ip est prise taken_attribute = IpReservation.taken_attr(str(datetime.today())) self.user.ldap_bind.add_attr(ip.dn, taken_attribute) machine_folder = Machine.folder_attr() machine_folder_dn = ldap_config.machine_base_dn + member.dn try: self.user.ldap_bind.add_entry(machine_folder_dn, machine_folder) except ldap.ALREADY_EXISTS: pass # OKAY #end try # Attributs ldap de l'objet machine (regroupant dns et dhcp) machine_top = Machine.entry_attr(name) # Attributs ldap des objets dhcp et dns, fils de l'objet machine machine_dhcp = Machine.dhcp_attr(name, mac) machine_dns = Machine.dns_attr(name, ip.cn.first()) # Construction du dn et ajout de l'objet machine # en fils du membre (membre.dn) machine_dn = "cn=" + name + "," + ldap_config.machine_base_dn + member.dn self.user.ldap_bind.add_entry(machine_dn, machine_top) # Construction du dn et ajout de l'objet dhcp # en fils de la machine (machine_dn) dhcp_dn = "cn=dhcp," + machine_dn self.user.ldap_bind.add_entry(dhcp_dn, machine_dhcp) # Construction du dn et ajout de l'objet dns dns_dn = "cn=dns," + machine_dn self.user.ldap_bind.add_entry(dns_dn, machine_dns) # Ajout de l'entrée dans les logs BrieLogging.get().info("ajout machine " + mac + " pour l'utilisateur " + member.dn + " par l'admin " + self.user.attrs.dn) plugin_vars = { "machine_dn": machine_dn, "name": name, "ip": ip, "mac": mac } plugin_action(self.user, residence, plugin_vars) if go_redirect: redirect("/edit/member/" + residence + "/" + member_uid)