premier commit (version 1.4-24)
[asterisk-config-auf.git] / contrib / ast-conf / cgi / autoconfig-username.cgi
1 #!/usr/bin/perl -w
2
3 ################################################################################
4 # CONFIGURATION
5 ################################################################################
6
7 # a deplacer dans un fichier de conf "ipphones.conf" dans le repertoire courant
8
9 my $dir = "/srv/www/ipphones";
10 my $firmware_re = '^ipphone5-(\d{3})-auf(\d{1,2}).bin';
11 my $base_conf = "base.cfg";
12 my $utilisateurs = "utilisateurs";
13
14 my $debug=0;
15
16 ################################################################################
17 use strict;
18 sub current_firmware();
19 sub configuration_version($);
20 sub version_file($);
21 sub version_extension($);
22 sub extension_utilisateur($);
23 sub texte_a_envoyer($);
24 sub fichier_a_envoyer($);
25 sub envoyer_texte();
26
27 my $req = $ENV{QUERY_STRING};
28
29 my $texte_retour = "";
30
31 my ($type,$file) = split(/=/,$req);
32
33 die "type : $type" unless($type =~ m/^(set|cfg)$/);
34 die "file : $file" unless($file =~ m/^[a-z][.-a-z]*/);
35
36 print "$type/$file\n" if($debug);
37
38 chdir($dir);
39
40 if($type eq "set")
41 {
42 my $firmware = current_firmware();
43 my $configuration = configuration_version($file);
44
45 texte_a_envoyer(<<EOT);
46 BIN $firmware
47 CFG $file.cfg:$configuration
48 END
49 EOT
50 }
51 elsif($type eq "cfg")
52 {
53     texte_a_envoyer("[SETTING]\n");
54
55     # balancer le fichier general, s'il existe
56     if(version_file("$base_conf"))
57     {
58         texte_a_envoyer("##\n## FICHIER : $base_conf\n##\n");
59         fichier_a_envoyer("$base_conf") 
60     }
61
62     # quelle extension pour cette personne ?
63     if(my $extension = extension_utilisateur($file))
64     {
65         texte_a_envoyer("phonenumber = $extension\n");
66     }
67     # balancer le fichier specifique, s'il existe
68     if(version_file("$file.cfg"))
69     {
70         texte_a_envoyer("##\n## FICHIER : $file.cfg\n##\n");
71         fichier_a_envoyer("$file.cfg") ;
72     }
73     texte_a_envoyer("[END]\n");
74 }
75
76 envoyer_texte();
77
78 exit 0;
79
80
81 ################################################################################
82 #                           FONCTIONS UTILITAIRES
83 ################################################################################
84
85 sub version_firmware($)
86 {
87     my ($nom_firmware) = @_;
88     my $retour = '00000';
89     if($nom_firmware =~ /$firmware_re/)
90     {
91         $retour = sprintf("%d%02d",$1,$2);
92     }   
93     return ($retour);
94 }
95
96 # trouver le firmware le plus recent
97 sub current_firmware()
98 {
99     my $retour="erreur";
100     open LS,"ls|" or die "ls: $!";
101     my @firmware = sort { version_firmware($a) cmp version_firmware($b);  } (grep {/$firmware_re/} <LS>);
102     close LS;
103     if(@firmware && $firmware[$#firmware] =~ /$firmware_re/)
104     {
105         my $nom_firmware = $firmware[$#firmware];
106         chomp $nom_firmware;
107         $retour = "$nom_firmware:".version_firmware($nom_firmware);
108     }
109     return  $retour;
110 }
111
112 # retourne le numero de serie d'un fichier de conf
113 # zero si le fichier n'existe pas
114 sub version_file($)
115 {
116     my ($file) = @_;
117     my $retour=0;
118
119     print "FILE:$file\n" if($debug);
120
121     if(open FILE,$file)
122     {
123         while(<FILE>)
124         {
125             $retour = $1 if(/#\s*SERIE\s*:\s*(\d+)/);
126         }
127         close FILE;
128     }
129     return $retour;
130 }
131
132 # retourne le numero de serie associe a une extension
133 # 0 si pas de numero de version
134 sub version_extension($)
135 {
136     my ($utilisateur) = @_;
137
138     my $version = 0;
139     if(open(FILE,"$utilisateurs"))
140     {
141         while(<FILE>)
142         {
143             $version = $1 if(/^$utilisateur\s+\d+\s+(\d+)/);
144         }
145         close FILE;
146     }
147     return $version;
148 }
149
150 # Calculer la version associee a un utilisateur
151 sub configuration_version($)
152 {
153     my $retour = 0;
154     my ($user) = @_;
155
156     $retour = version_file($base_conf) + version_file("$user.cfg");
157     $retour += version_extension($user);
158 }
159
160
161 # retourne l'extension associee a un utilisateurs, si le fichier $utilisateurs existe bien
162 # et zero si pas d'info disponible
163 sub extension_utilisateur($)
164 {
165     my ($utilisateur) = @_;
166     my $extension = 0;
167     if(open(FILE,"$utilisateurs"))
168     {
169         while(<FILE>)
170         {
171             $extension = $1 if(/^$utilisateur\s+(\d+)/);
172         }
173         close FILE;
174     }
175     return $extension;
176 }
177
178 ################################################################################
179 # CGI !!
180
181 # a ajouter au texte de reponse a la requete
182 sub texte_a_envoyer($)
183 {
184     $texte_retour .= $_[0];
185 }
186
187 sub fichier_a_envoyer($)
188 {
189     my ($fichier) = @_;
190     open FILE,$fichier or die "$fichier : $!";
191     map {texte_a_envoyer($_)} (grep {! /^(#.*|\s*)$/} <FILE>);
192     close FILE;
193 }
194
195 # reponse effective a la requete : balancer tout ce qui a ete accumule via a_envoyer()
196 sub envoyer_texte()
197 {
198     my $longueur = length($texte_retour);
199     print "Content-Length: $longueur\nContent-Type: text/plain\n\n";
200     print $texte_retour;
201 }