[..] Création De Compte FTP par Scripte

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
turistceto
Niveau 3
Niveau 3
Messages : 32
Enregistré le : jeu. 22 nov. 2012 18:12
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#21

Message par turistceto »

Ok Sylvanie,

J'attend de tes bonnes nouvelles.

Car meme avec le script modifier ça ne marche pas :(

je pense que le problème vient du generation du fichier xml.

quand je lance le script il me genere le fichier XML de la façon suivante (la fin du fichier generere est maquant)
► Afficher le texte

tandis qu'il doit se presenter de la façon suivante
► Afficher le texte
J'attend de tes bonnes nouvelles et Merci encore
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#22

Message par sylvanie »

Ok,
il y avait de base une erreur sur le hash du password
► Afficher le texte

Pour la ligne manquante, à mon avis c'est encore la syntaxe du fichier ini, car j'ai oublier dans mon exemple de sauter une ligne entre 2 utilisateurs, et ça saute du coups la recopie des conf de vitesse.

Un exemple de bon fichier ini est :

Code : Tout sélectionner

Login=toto3
Pass=passwordtoto3
Dir="C:\totodir"
Attr=++++++++

Login=toto4
Pass=passwordtoto4
Dir="C:\totodir"
Attr=++++++++


 
avec un dernier retours chariot après la dernière ligne
J'ai installé Filezilla server chez moi, et les users toto3 et toto4 sont bien pris en compte (en faisant un stop/start du serveur en mode admin pour que ce soit pris en compte)

J'ai également mis des vérifications sur la vérification sanitaire du fichier ini pour sortir en erreur au lieu d'avoir une configuration incomplète

Je te laisse refaire la manip avec ce script et surtout ce fichier de configuration.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
turistceto
Niveau 3
Niveau 3
Messages : 32
Enregistré le : jeu. 22 nov. 2012 18:12
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#23

Message par turistceto »

Bonjour Sylvanie,

C'est super ça marche MERCI BEAUCOUP.

2 dernier peitete chose sans abusé de ta bonne volonté

est il possible d'ajouter quelque ligne a ce scripte a fin de crée les repertoir apptibué au user comme dans le fichier user.ini avec les bon droit

ex:
pour toto
crée un rep: c:\toto
est les droit +++++++

puis coté utilisateur qui vont executer le script

Merci encore
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#24

Message par sylvanie »

Bonjour
Je n'ai pas beaucoup de temps aujourd'hui, mais voici une modif pour créer le répertoire de l'utilisateur sur la machine où le script tourne :
► Afficher le texte
Pour les droits par contre, normalement c'est Filezilla qui gère les accès via les commande FTP; mais il reste effectivement les droits Windows à voir éventuellement. Je me souviens vaguement de certains posts sur la gestion des droits de fichiers/répertoires via Autoit mais là je sèche un peu. Si quelqu'un a la main plus rodée que moi sur ce point et souhaite finaliser, il n'y a pas de soucis bien au contraire ^^
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
turistceto
Niveau 3
Niveau 3
Messages : 32
Enregistré le : jeu. 22 nov. 2012 18:12
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#25

Message par turistceto »

OK

j'ai reussi a fair un micmac avec mon ancien scripte le seul problème c'est au niveau des droit sur le rep (pas vraiment niveau droit mais le rep ou le user doit etre attacher

est il possible de traduir dans le fichier ini la ligne attribe qui est ++++++++ part un decimal 239 par exemple

car le scripte coté utilisateur que j'utilise envoi un fichier .ini de ce type
toto
password123
c:\toto
239 <== celui ci correspond au droit filezilla
si on pouvait remplacer les ++++++++ par ce decimale 239 je pense que mon problème sera résolu.

Mais en tous les cas Merci mille fois pour ton aide précieuse
turistceto
Niveau 3
Niveau 3
Messages : 32
Enregistré le : jeu. 22 nov. 2012 18:12
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#26

Message par turistceto »

Je viens de résoudre le probleme pour modifier le fichier niveau attribution des droits au repertoir a ce niveau c'est OK

Mais,

je viens de faire un test de connaxion avec un utilisateur généré est le mot de passe est refusé

le compte apparait bient avec le rep au quel il doit etre attacher puis les bon droit sur le rep de l'utilisateur

Parcontre quand je rentre le mot de passe qui est dans le fichier ini ça ne marche pas "Accès Refusé"

Le mot de passe est generé par -1 dans le fichier filezilla.xml est ce normal ?

Peux tu m'éclairer STP

Merci
turistceto
Niveau 3
Niveau 3
Messages : 32
Enregistré le : jeu. 22 nov. 2012 18:12
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#27

Message par turistceto »

j'ai trouver ces ligne pendant l'execution du script Autoit

Est ce normale ?

Code : Tout sélectionner

DGB = 123456
<User Name="zzzz">
<Option Name="Pass">-1</Option>
<Option Name="Group"/>
<Option Name="Bypass server userlimit">0</Option>
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#28

Message par sylvanie »

C'est étrange, car d'après ces logs de debug, votre mot de passe "123456" n'est pas correctement haché, est ce que les autres appels à _Crypt_HashData se sont bien passés pour les autres utilisateurs, on on a "-1" à chaque fois ?

car j'ai recréé les même input et j'ai :

Code : Tout sélectionner

DGB = 123456
<User Name="zzzz">
<Option Name="Pass">e10adc3949ba59abbe56e057f20f883e</Option>
<Option Name="Group"/>
<Option Name="Bypass server userlimit">0</Option>
<Option Name="User Limit">0</Option>
 
Vous avez quelle version d'Autoit et quelle version de Windows
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
turistceto
Niveau 3
Niveau 3
Messages : 32
Enregistré le : jeu. 22 nov. 2012 18:12
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#29

Message par turistceto »

Bonjour,

Je tourne sous Windows 2003 std

et comme version de autoit j'ai la Version 1.79
turistceto
Niveau 3
Niveau 3
Messages : 32
Enregistré le : jeu. 22 nov. 2012 18:12
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#30

Message par turistceto »

Bonjour a tous,

Le problème est reglé

ça venait de crypt.au3 que j'avais telecharger sur le net.

Merci a vous tous de tout l'aide que vous m'avez apporté

Un grand Merci
Parlendir
Niveau 1
Niveau 1
Messages : 1
Enregistré le : mer. 30 août 2017 10:24
Status : Hors ligne

Re: [..] Création De Compte FTP par Scripte

#31

Message par Parlendir »

Bonjour,

Pour mon premier post sur ce forum, je vais déterrer un vieux sujet.

Je cherchais à ajouter/supprimer des utilisateurs de FileZilla serveur à l'unité ou par lot.

Ne trouvant pas d'outil et ne sachant pas utiliser l'API disponible pour ce faire, j'ai écrit un script sous AutoIt, et je me suis dit que cela pouvait valoir la peine de partager le code source.

Pour faire fonctionner ce script :
- dans ce script, le fichier Filezilla_serveur.xml doit être sur le bureau, mais cela est facile à modifier (ligne 82)
- l'hypothèse de départ est que les utilisateurs sont organisés en groupe : chaque groupe donne l'ensemble des droits et limites, donc les utilisateurs sont créés sans droit particuliers, ceux ci étant hérités de leur groupe. Il faut donc que les groupes soient bien constitués en premier lieu.
- la liste des comptes à créer / supprimer est à fournir sous forme d'un fichier txt, avec valeurs séparées par ";" comportant une ligne d'entête et comportant pour chaque compte le nom, le mdp et le groupe. Le fichier de données ne doit pas contenir de dernière ligne vide.
- Le script affiche une MsgBox pour expliquer ce qui a été fait en fin de traitement : le nombre de comptes à traiter, combien ont été traités et où dans le fichier Filezilla_serveur.xml se trouve le premier compte ajouté.
- Pour la création de comptes, le script vérifie tout d'abord si le compte n'existe pas déjà.

Je suis débutant sous autoit, donc il y a sûrement des mauvaises pratiques dans le script (les déclarations de variables sont parfois un peu chaotiques), mais le xml généré est fonctionnel.

Voilà le script. N'hésitez pas à me présenter vos observations.

Nb : l'hypothèse de base est que les droits des utilisateurs soient hérités de leur groupe, il faut donc avoir préalablement configurer les groupes requis.

Mots clefs : Filezilla, add user, delete user, script, autoit

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\3_Icone\if_Filezilla1_95986.ico
#AutoIt3Wrapper_Outfile=..\2_Programme\FileZilla_serveur_adm_v5.Exe
#AutoIt3Wrapper_Compression=3
#AutoIt3Wrapper_Res_Comment=Ce programme permet d'ajouter/supprimer des comptes sur le serveur FTP Filezilla à l'unité ou par lot.
#AutoIt3Wrapper_Res_Description=Ce programme permet d'ajouter/supprimer des comptes sur le serveur FTP Filezilla à l'unité ou par lot.
#AutoIt3Wrapper_Res_Fileversion=1.0.0.5
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=p
#AutoIt3Wrapper_Res_ProductVersion=1.1.0
#AutoIt3Wrapper_Res_LegalCopyright=Parlendir
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=1036
#AutoIt3Wrapper_Res_Field=Contact|Parlendir
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#Region ~ ~ Description du programme ~ ~
#CS
~ ~ ~ ~ ~ ~      FileZilla Serveur - Ajout et Suppression		~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ des comptes dans le fichier 'Filezilla serveur.XML' ~ ~ ~ ~ ~ ~

Ce programme est destiné à automatiser l'ajout et la suppression de comptes sur le
serveur FTP FileZilla.

La gestion des utilisateurs peut être réalisée soit via un API mimant les fonctions
de l'interface d'administration soit par édition du fichier XML enregistrant tous
les paramètres du serveur, y compris les groupes et les comptes utilisateur.

Ce second axe est utilisé par ce programme.

Le fichier de configuration se nomme 'FileZilla Server.xml' et se situe à la racine du
répertoire d'installation de FileZilla Server.

Au sein de ce fichier XML, le Noeud définissant les comptes utilisateur est tel que :

| <Users>
|        <User Name="NOM_DU_COMPTE">
|            <Option Name="Pass">MOT_DE_PASSE_STOCKE_CRYPTE</Option>
|            <Option Name="Salt"></Option>
|            <Option Name="Group">GROUPE_AUQUEL_APPARTIENT_LE_COMPTE</Option>
|            <Option Name="Bypass server userlimit">2</Option>
|            <Option Name="User Limit">0</Option>
|            <Option Name="IP Limit">0</Option>
|            <Option Name="Enabled">2</Option>
|            <Option Name="Comments" />
|            <Option Name="ForceSsl">2</Option>
|            <IpFilter>
|                <Disallowed />
|                <Allowed />
|            </IpFilter>
|            <Permissions />
|            <SpeedLimits DlType="0" DlLimit="10" ServerDlLimitBypass="2" UlType="0" UlLimit="10" ServerUlLimitBypass="2">
|                <Download />
|                <Upload />
|            </SpeedLimits>
|        </User>
| </Users>

Pour l'ajout ou la suppression de comptes, ce programme :
- cherche le début du noeud <Users>
- vérifie si le compte existe
	- si oui :	- la création n'est pas réalisée pour éviter la redondance
				- la suppression peut être réalisée, par suppression des 20 lignes composant un Noeud <User>
	- si non :	- la création est réalisée par adjonction au début du Noeud <Users> des 20 lignes formant un Noeud <User>
				- la suppression n'est pas réalisée

La première version du Logiciel permettait de ne traîter qu'un compte à la fois.

A compter de la deuxième version (v2), le traitement par lot est ajouté : il consiste à fournir un fichier structuré (csv) avec les
comptes à ajouter ou à supprimer. Ce fichier est alors traité ligne à ligne pour faire boucler les fonctions basiques (ajout/suppression).

Le fichier 'FileZilla Server.xml' est à placer sur le bureau : une copie en est réalisée avant d'apporter les modifications.
Ce comportement peut être facilement modifié par la modification du script.



Historique des versions :
	- 31/08/17 : rédaction et tests du programme sur un serveur ftp fermé.
	- 18/10/17 : 	- création d'une info bulle pour décrire le fichier attendu pour la création / suppression par lot
					- sélecteur de fichier réglé sur les "Texte (*.csv)"
					- validation du logiciel sur le ftp en production.
	- 05/03/18 :	- ajout d'un label pour suivre la progression du travail en cours
					- verrouillage de l'interface après lancement du traitement pour éviter un double clic
					- reste un bug : le compteur de suppression de compte, dans le traitement à l'unité, affiche toujours 0.
#CE
#EndRegion ~ ~ Description du programme ~ ~

#Region ~ ~ Includes ~ ~
#include <GUIConstants.au3>
#include <File.au3>
#include <md5.au3>
#include <Array.au3>
#include <String.au3>
#include <MsgBoxConstants.au3>
#include <date.au3>
#EndRegion

#Region ~ ~ Déclarations variables globales ~ ~
	Global $ServerXML = @DesktopDir & "\FileZilla Server.xml"
	Global $FichierDonnees         = ""
	Global $occurences_dejaCree    = 0
	Global $occurences_creation    = 0
    Global $occurences_non_suppr   = 0
	Global $occurences_suppression = 0
	Global $nbr_lignes_donnees     = 0
#EndRegion ~ ~ Déclarations variables globales ~ ~

#Region ~ ~ Interface ~ ~
; Création de l'interface de saisie des comptes
$msg = 	GUICreate ("Gestion users FTP",220,220)
		GUISetState(@SW_SHOW)

$Tab1 = GUICtrlCreateTab(0, 0, 220, 230)
	; Onglet "Gérer un compte"
		$TabSheet1 = GUICtrlCreateTabItem("Gérer UN compte")
			; Label et zone de saisie pour le Nom du compte
				GUICtrlCreateLabel("Nom du compte :",10,30)
				$ftpuserloginGUI = GUICtrlCreateInput ("", 10, 45, 200, 20)
			; Label et zone de saisie pour le mot de passe
				GUICtrlCreateLabel("Mot de passe du compte :",10, 80)
				$ftpuserpassGUI = GUICtrlCreateInput ("", 10, 95, 200, 20)
			; Label et zone de saisie pour le groupe auquel appartient le compte
				GUICtrlCreateLabel("Groupe pour ce compte :",10, 130)
				$ftpusergroupGUI = GUICtrlCreateInput ("", 10, 145, 200, 20)
			; Boutons pour lancer un type d'opération : créer ou supprimer un / des compte(s)
				$Bouton_CREER1		= GUICtrlCreateButton("Créer", 10, 195, 100, 20)
				$Bouton_SUPPRIMER1	= GUICtrlCreateButton("Supprimer", 110, 195, 100, 20)
	; Onglet "Gérer par lot"
		$TabSheet2 = GUICtrlCreateTabItem("Gérer DES comptes")
			; Bouton pour choisir un dossier
				$Bouton_Fichier = GUICtrlCreateButton("Choisir le fichier de données", 10, 65, 200, 25, 0)
				GUICtrlSetTip(-1, "Le fichier doit être sous format .csv, séparateur "";"")." & @CRLF & _
						"La ligne d'entête doit être présente." & @CRLF & _
						"Les champs doivent être dans l'ordre : nom utilisateur; mdp; groupe.", "", 0, 1)
			; Label pour le fichier choisi
				$GUI_FichierDonnees = GUICtrlCreateLabel($FichierDonnees, 10, 130, 200, 20, BitOR($SS_RIGHT, $WS_BORDER, $SS_CENTERIMAGE))
			; Boutons pour lancer un type d'opération : créer ou supprimer un / des compte(s)
				$Bouton_CREERX		= GUICtrlCreateButton("Créer", 10, 195, 100, 20)
				$Bouton_SUPPRIMERX	= GUICtrlCreateButton("Supprimer", 110, 195, 100, 20)
			; Libellé pour visualiser les opérations en cours
				$LabelWip = GUICtrlCreateLabel("WiP : ", 10, 170, 200, 20, $SS_CENTER)
					GUICtrlSetState(-1, $GUI_HIDE)

	; Onglet à créer vide pour le bon affichage des onglets
		GUICtrlCreateTabItem("")
	; Présenter le premier onglet, $TabSheet1, à l'ouverture de l'interface
		GUICtrlSetState($TabSheet1, $GUI_SHOW)
#EndRegion ~ ~ Interface ~ ~

#Region ~ ~ Boucle principale ~ ~
	; Permettre la fin du programme avec la touche Echap
		HotKeySet("{ESC}", "_endscript")

	;Boucle d'affichage de la fenêtre de saisie d'informations
		While 1
			$msg = GUIGetMsg()
		Switch $msg
			CASE $gui_event_close 	; Fermeture du programme
				Exit
			CASE $Bouton_Fichier 	; Choisir un fichier de données
				; Ouvre une boîte de dialogue pour sélectionner un fichier.
;~ 											 FileOpenDialog( "title", "init dir", "filter" [, options = 0 [, "default name" [, hwnd]]] )
					Global $FichierDonnees = FileOpenDialog("Sélectionnez le fichier de données", @DesktopDir & "\", "Texte (*.csv)", 1)
				; Label commentant la sélection opérée par l'utilisateur
					If @error Then
						$FichierDonnees = '' ; La variable est remise à vide
						; Mise à jour du label présentant le nom du fichier sélectionné
						GUICtrlSetData($GUI_FichierDonnees, $FichierDonnees)
					Else
						; Mise à jour du label présentant le nom du fichier sélectionné
						GUICtrlSetData($GUI_FichierDonnees, $FichierDonnees)
					EndIf
			CASE $Bouton_CREER1 	; Créer un compte utilisateur
				_InterfaceClose()
				_SauvegardeXML()
				_ServeurXML_nbr_ligne($ServerXML)
				_DebutNoeudUsers()
				$ftpuserlogin	= GUICtrlRead($ftpuserloginGUI)
				$ftpuserpass	= GUICtrlRead($ftpuserpassGUI)
				$ftpusergroup	= GUICtrlRead($ftpusergroupGUI)
				_testuser($ftpuserlogin,$ftpuserpass,$ftpusergroup)
				MsgBox(64, "Résultat", $occurences_creation & " compte nouvellement créé avec succès.")
				$occurences_creation = 0
				_InterfaceOpen()
;~ 				Exit
			CASE $Bouton_SUPPRIMER1 ; Supprimer un compte utilisateur
				_InterfaceClose()
				$occurences_suppression = 0
				_SauvegardeXML()
				_ServeurXML_nbr_ligne($ServerXML)
				$ftpuserlogin	= GUICtrlRead($ftpuserloginGUI)
				_SupprUser($ftpuserlogin)
				MsgBox(64, "Résultat", $occurences_creation & " compte supprimé avec succès.")
				$occurences_suppression = 0
				_InterfaceOpen()
;~ 				Exit
			CASE $Bouton_CREERX 	; Créer un lot de comptes utilisateur
				_InterfaceClose()
				_SauvegardeXML()
				_ServeurXML_nbr_ligne($ServerXML)
				_DebutNoeudUsers()
				_MiseAZeroVariable()
				_CreationUserBoucle()
				_InterfaceOpen()
;~ 				Exit
			CASE $Bouton_SUPPRIMERX ; Supprimer un lot de comptes utilisateur
				_InterfaceClose()
				_SauvegardeXML()
				_ServeurXML_nbr_ligne($ServerXML)
				_DebutNoeudUsers()
				_MiseAZeroVariable()
				_SupprUserBoucle()
				_InterfaceOpen()
;~ 				Exit
		EndSwitch
		WEnd
#EndRegion ~ ~ Boucle principale ~ ~

#Region ~ ~ Fonctions ~ ~
Func _SauvegardeXML() 											; Sauvegarder le fichier XML avant toute modification
	; Variables pour nommer le fichier avec la date du jour, l'heure du scan, et le nom du fichier
	$NomDate = StringRegExpReplace(_NowDate(), "/", "-") ; va remplacer le '/' dans la date par un '-' pour ne pas avoir de pb pour créer le fichier
	$NomHeure = StringRegExpReplace(_NowTime(4), ":", "h") ; va remplacer le ':' dans l'heure par un 'h'
	FileCopy($ServerXML, @DesktopDir & "\FileZilla_Serveur_sauv_" & $NomDate & "_" & $NomHeure & ".xml", 0)
EndFunc

Func _ServeurXML_nbr_ligne($ServerXML) 							; Déterminer le nombre de lignes présentes dans le fichier 'Filezilla serveur.xml'
	Global $nbr_lignes_xml = _FileCountLines($ServerXML)
EndFunc

Func _DebutNoeudUsers()											; Trouver le début du Noeud Users
    For $i = 1 to $nbr_lignes_xml
		If FileReadLine($ServerXML, $i) = "    <Users>" Then
			Global	$DebutNoeudUsers = $i + 1
			ExitLoop
		EndIf
	Next
EndFunc

Func _CreationUserBoucle()										; Faire boucler la fonction _CreationUser
	If $FichierDonnees =  "" Then MsgBox(64, "Erreur", "Aucun Fichier n'a été sélectionné.")
	If $FichierDonnees <> "" Then
		Global $occurences_dejaCree = 0
		Global $occurences_creation = 0
		Global $nbr_lignes_donnees = _FileCountLines($FichierDonnees)	; compter le nombre de lignes dans le fichier de données. La première est un entête
		$FichierDonneesOuvert = FileOpen($FichierDonnees, 0)	; ouverture du fichier de données en mode lecture seule

		; Boucle pour lancer la fonction _CreationUser
		For $i = 2 To $nbr_lignes_donnees step 1
			$ligne = FileReadLine($FichierDonneesOuvert, $i) ; lire la ligne $i du fichier de données

			; Extraire les valeurs contenues dans cette ligne
			$aLigne			= _StringExplode($ligne, ";", 0)
			$ftpuserlogin	= $aLigne[0]
			$ftpuserpass	= $aLigne[1]
			$ftpusergroup	= $aLigne[2]

			; Lancer la fonction _testuser pour éviter d'inscrire un utilisateur existant déjà
			_testuser($ftpuserlogin,$ftpuserpass,$ftpusergroup)

			; Mise à jour du Label compteur d'étapes
				GUICtrlSetData($LabelWip, "WiP : " & $occurences_creation + $occurences_suppression + $occurences_dejaCree + $occurences_non_suppr & " / " & $nbr_lignes_donnees - 1 )

		Next

		; rajouter un compteur pour dire combien de comptes ont été créés
		MsgBox(64, "Résultats", "Compte(s) à créer :" & @TAB & @TAB & $nbr_lignes_donnees - 1 & @CRLF & _
								"Compte(s) créé(s) :" & @TAB & @TAB & $occurences_creation & @CRLF & _
								"Compte(s) déjà créé(s) :" & @TAB & $occurences_dejaCree & @CRLF & _
								"Ligne de création :" & @TAB & @TAB & $DebutNoeudUsers)
	EndIf
EndFunc

Func _testuser($ftpuserlogin,$ftpuserpass,$ftpusergroup) 		; Tester l'existence d'un compte
	; Variable pour savoir si le compte testé a été trouvé dans le fichier XML
		$existe = 0
	; Lancement du test : valeur recherchée
		$verif = "        <User Name=""" & $ftpuserlogin &""">"
	; Boucle pour vérifier toutes les lignes ou jusqu'à trouver une occurrence correspondante
		For $i = $DebutNoeudUsers to $nbr_lignes_xml
			If FileReadLine($ServerXML, $i) = $verif Then
;~ 				MsgBox(64, "Debug - Compte déjà créé", "Cet utilisateur ( " & $ftpuserlogin & " ) existe déjà dans " & @CRLF & $ServerXML & @CRLF & "creation = " & $occurences_creation)
				$occurences_dejaCree += 1
				$existe = 1
				Exitloop ; quand la valeur est trouvée, il n'est plus nécessaire de chercher dans le reste du fichier XML
			EndIf
		Next
	; Si le test retourne que le compte n'existe pas déjà (donc $existe est resté à 0), on peut le créer
		If $existe = 0 Then
			$occurences_creation += 1 ; incrémenter la variable de suivi des comptes créés
			_CreationUser($ftpuserlogin,$ftpuserpass,$ftpusergroup)
		EndIf
EndFunc

Func _CreationUser($ftpuserlogin,$ftpuserpass,$ftpusergroup)	; Création d'un compte unique par insertion d'un noeud XML
			_FileWriteToLine($ServerXML, $DebutNoeudUsers, "        <User Name=""" & $ftpuserlogin & """>"	& @CRLF & _
					"            <Option Name=""Pass"">" & md5($ftpuserpass) & "</Option>" 					& @CRLF & _
					"            <Option Name=""Salt""></Option>" 											& @CRLF & _
					"            <Option Name=""Group"">" & $ftpusergroup & "</Option>" 					& @CRLF & _
					"            <Option Name=""Bypass server userlimit"">2</Option>"						& @CRLF & _
					"            <Option Name=""User Limit"">0</Option>" 									& @CRLF & _
					"            <Option Name=""IP Limit"">0</Option>" 										& @CRLF & _
					"            <Option Name=""Enabled"">2</Option>" 										& @CRLF & _
					"            <Option Name=""Comments"" />" 												& @CRLF & _
					"            <Option Name=""ForceSsl"">2</Option>" 										& @CRLF & _
					"            <IpFilter>" 																& @CRLF & _
					"                <Disallowed />" 														& @CRLF & _
					"                <Allowed />" 															& @CRLF & _
					"            </IpFilter>" 																& @CRLF & _
					"            <Permissions />"															& @CRLF & _
					"            <SpeedLimits DlType=""0"" DlLimit=""10"" ServerDlLimitBypass=""2"" UlType=""0"" UlLimit=""10"" ServerUlLimitBypass=""2"">" & @CRLF & _
					"                <Download />" 															& @CRLF & _
					"                <Upload />" 															& @CRLF & _
					"            </SpeedLimits>" 															& @CRLF & _
					"        </User>" 																		, False)
			FileFlush($ServerXML) ; ne sert qu'à être sûr que les nouvelles données sont bien accessibles lors du prochain passage de _testuser
EndFunc

Func _SupprUserBoucle() 										; Faire boucler la fonction _SupprUser
	If $FichierDonnees =  "" Then MsgBox(64, "Erreur", "Aucun Fichier n'a été sélectionné.")
	If $FichierDonnees <> "" Then
		Global $occurences_non_suppr   = 0
		Global $occurences_suppression = 0
		$nbr_lignes_donnees = _FileCountLines($FichierDonnees)	; compter le nombre de lignes dans le fichier de données. La première est un entête
		$FichierDonneesOuvert = FileOpen($FichierDonnees, 0)	; ouverture du fichier de données en mode lecture seule

		; Boucle pour lancer la fonction _CreationUser
		For $i = 2 To $nbr_lignes_donnees step 1
			$ligne = FileReadLine($FichierDonneesOuvert, $i)	; lire la ligne $i du fichier de données

			; extraire les valeurs contenues dans cette ligne
			$aLigne			= _StringExplode($ligne, ";", 0)
			$ftpuserlogin	= $aLigne[0]

			; Lancer la fonction _SupprUser pour supprimer l'utilisateur
			_SupprUser($ftpuserlogin)

			; Mise à jour du Label compteur d'étapes
				GUICtrlSetData($LabelWip, "WiP : " & $occurences_creation + $occurences_suppression + $occurences_dejaCree + $occurences_non_suppr & " / " & $nbr_lignes_donnees - 1)

		Next

		; rajouter un compteur pour dire combien de comptes ont été supprimés
		MsgBox(64, "Résultats", "Comptes à supprimer : " & @Tab & $nbr_lignes_donnees - 1 & @CRLF & _
								"Comptes supprimés : " & @Tab & $occurences_suppression & @CRLF & _
								"Comptes non trouvé(s) : " & @Tab & $nbr_lignes_donnees - 1 - $occurences_suppression)
	EndIf
EndFunc

Func _SupprUser($ftpuserlogin) 									; Suppression d'un compte unique
; Vérifier si le compte existe déjà
	$verif = "        <User Name=""" & $ftpuserlogin &""">"

	For $i = 1 to $nbr_lignes_xml step 1
		If FileReadLine($ServerXML, $i) = $verif Then
				For $j = 1 to 20 			; Alors : supprimer le compte en supprimant les 20 lignes
					_FileWriteToLine($ServerXML, $i, "", True)
				Next
			$occurences_suppression += 1
			ExitLoop
		EndIf
	Next
EndFunc

Func _InterfaceOpen()
	; Activation de tous les boutons
			GUICtrlSetState($Bouton_CREERX,     $GUI_ENABLE)
			GUICtrlSetState($Bouton_SUPPRIMERX, $GUI_ENABLE)
			GUICtrlSetState($Bouton_SUPPRIMERX, $GUI_ENABLE)
			GUICtrlSetState($Bouton_CREER1,     $GUI_ENABLE)
			GUICtrlSetState($Bouton_SUPPRIMER1, $GUI_ENABLE)
			GUICtrlSetState($Bouton_Fichier,    $GUI_ENABLE)
			GUICtrlSetState($LabelWip,			$GUI_HIDE)

EndFunc

Func _InterfaceClose()
	; Désactivation de tous les boutons
			GUICtrlSetState($Bouton_CREERX,     $GUI_DISABLE)
			GUICtrlSetState($Bouton_SUPPRIMERX, $GUI_DISABLE)
			GUICtrlSetState($Bouton_SUPPRIMERX, $GUI_DISABLE)
			GUICtrlSetState($Bouton_CREER1,     $GUI_DISABLE)
			GUICtrlSetState($Bouton_SUPPRIMER1, $GUI_DISABLE)
			GUICtrlSetState($Bouton_Fichier,   	$GUI_DISABLE)
			GUICtrlSetState($LabelWip,			$GUI_SHOW)

EndFunc

Func _MiseAZeroVariable()
	$occurences_creation    = 0
	$occurences_suppression = 0
	$occurences_dejaCree    = 0
	$occurences_non_suppr   = 0

	; Mise à jour du Label compteur d'étapes
		GUICtrlSetData($LabelWip, "WiP : " & $occurences_creation + $occurences_suppression + $occurences_dejaCree + $occurences_non_suppr & " / " & $nbr_lignes_donnees - 1)

EndFunc

Func _endscript() 												; Fonction pour fermer le programme
	Exit
EndFunc   ;==>endscript

#EndRegion ~ ~ Fonctions ~ ~

Répondre