premier commit (version 1.4-24)
[asterisk-config-auf.git] / contrib / ast-conf / asterisk / ast-conf
1 #!/usr/bin/perl -w
2 # -*-cperl-*-
3 # $Id$
4 ################################################################################
5
6 # fichier pour recuperer le prefixe local (pour peupler le champ
7 # callerid)
8 my $conf_asterisk="/etc/asterisk/auf/extensions-globals.local";
9
10 # fichier ou on stocke les infos pour le cgi d'autoconf
11 my $autoconf_old="/srv/www/ipphones/utilisateurs";
12
13 ################################################################################
14
15 use strict;
16 use Switch;
17
18 sub table_iax($$$$$);
19 sub table_sip($$$$$);
20 sub table_ext($$);
21 sub table_voicemail($$$$);
22 sub table_autoconf($$);
23 sub usage();
24
25 my %anciennes_extensions=();
26
27 # type de table a generer
28 my $table=(@ARGV ? $ARGV[0] : "undef");
29 my $tables_connues="(iax|sip|ext|autoconf|voicemail)";
30
31 usage() unless ($table =~ /^$tables_connues$/);
32
33 my $PREFIXE=0;
34
35 # lire la conf'
36 open CONF,"$conf_asterisk" or die "$conf_asterisk : $!";
37 while(<CONF>)
38   {
39     $PREFIXE = $1 if(/^AUFPREFIXLOCAL\s*=\s*(\d+)/);
40   }
41 close CONF;
42
43 die "il manque la variable AUFPREFIXLOCAL dans $conf_asterisk" unless ($PREFIXE);
44
45 print ";\n;\n; ATTENTION. LA CREATION DE CE FICHIER EST AUTOMATIQUE. MODIFIER LE FICHIER 'utilisateurs'\n; PUIS LANCER UN 'make'\n;\n;\n"
46   unless ($table eq "autoconf");
47
48 while(<STDIN>)
49 {
50   chomp;
51
52   # passer les lignes vides
53   next if(/^\s*$/);
54
55   my ($ext,$ip,$username,$fullname,$pass,$passmail)=split(/,/);
56
57   die "pas de mot de passe ?" unless(defined($pass));
58
59   $ip = "dynamic" unless($ip);
60
61   switch ($table) {
62     case "iax" {   table_iax($ext,$username,$fullname,$pass,$ip);} 
63     case "sip" {   table_sip($ext,$username,$fullname,$pass,$ip);} 
64     case "ext" {   table_ext($ext,$username);} 
65     case "autoconf" {   table_autoconf($ext,$username);} 
66     case "voicemail" {   table_voicemail($ext,$username,$fullname,$passmail);}
67       else 
68         { 
69         }
70   }
71 }
72
73 # a changer pour la table "iax" : fixer l'ip quand elle est connue
74 sub table_iax($$$$$)
75 {
76         my ($ext,$username,$fullname,$pass,$ip) = @_;
77
78         my $HOST= ($ip ne "dynamic" ? "defaultip=$ip":"");
79
80         print <<EOT ;
81 [$username]
82 type=friend
83 callerid="$fullname" <$PREFIXE$ext>
84 mailbox=$ext\@AUF
85 user=$username
86 secret=$pass
87 context=AUF
88 host=dynamic
89 disallow=all
90 allow=ulaw
91 $HOST
92
93 EOT
94
95 }
96
97
98 # a changer pour la table "iax" : fixer l'ip quand elle est connue
99 sub table_sip($$$$$)
100 {
101         my ($ext,$username,$fullname,$pass,$ip) = @_;
102
103         print <<EOT ;
104 [$username]
105 type=friend
106 callerid="$fullname" <$PREFIXE$ext>
107 mailbox=$ext\@default
108 username=$username
109 secret=$pass
110 context=AUF
111 host=dynamic
112 disallow=all
113 allow=ulaw
114
115 EOT
116
117 }
118
119 sub table_ext($$)
120 {
121         my ($ext,$username) = @_;
122         print <<EOT ;
123 exten => $ext,1,Macro(AUFDial,$username)
124 EOT
125
126 }
127
128 sub table_voicemail($$$$)
129 {
130         my ($ext,$username,$fullname,$passmail) = @_;
131         print <<EOT ;
132 $ext=>-$passmail,$fullname,$username\@auf.org
133 EOT
134
135 }
136
137 sub table_autoconf($$)
138 {
139         my ($ext,$username) = @_;
140         my ($old_ext,$version) = ancienne_extension($username);
141
142         # on utlisate l'extension "globale" pour configurer les telephones
143         $ext = "$PREFIXE$ext";
144
145         $version ++ if($ext != $old_ext);
146         print "$username $ext $version\n";
147 }
148
149 sub usage()
150   {
151     print STDERR "usage : $0 $tables_connues <utilisateurs\n"; 
152     exit 1;
153   }
154
155 # retourne le numero de version de cette extension
156 sub ancienne_extension($)
157 {
158   my ($utilisateur) = @_;
159   my ($ext,$version) = (0,0);
160
161   unless(%anciennes_extensions)
162     {
163       if(open FILE,"$autoconf_old")
164         {
165           while(<FILE>)
166             {
167               my ($user,$ext,$version)=("undef","0","0");
168               my @ligne = split(/\s+/);
169
170               $user = $ligne[0] if (@ligne > 0);
171               $ext = $ligne[1] if (@ligne > 1);
172               $version = $ligne[2] if (@ligne > 2);
173               $anciennes_extensions{$user}="$ext,$version";
174             }
175           close FILE;
176         }
177       $anciennes_extensions{"init"}="fait";
178     }
179   ($ext,$version) = split(/,/,$anciennes_extensions{$utilisateur}) if (defined($anciennes_extensions{$utilisateur}));
180   return ($ext,$version);
181 }