import sql-ledger 2.4.4
[freeside.git] / sql-ledger / sql-ledger / bin / mozilla / login.pl
1 ######################################################################
2 # SQL-Ledger Accounting
3 # Copyright (c) 2000
4 #
5 #  Author: Dieter Simader
6 #   Email: dsimader@sql-ledger.org
7 #     Web: http://www.sql-ledger.org
8 #
9 #
10 # This program is free software; you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation; either version 2 of the License, or
13 # (at your option) any later version.
14 #
15 # This program is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with this program; if not, write to the Free Software
21 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 ######################################################################
23 #
24 # login frontend
25 #
26 #######################################################################
27
28
29 use DBI;
30 use SL::User;
31 use SL::Form;
32
33
34 $form = new Form;
35
36 $locale = new Locale $language, "login";
37
38 # customization
39 if (-f "$form->{path}/custom_$form->{script}") {
40   eval { require "$form->{path}/custom_$form->{script}"; };
41   $form->error($@) if ($@);
42 }
43
44 # per login customization
45 if (-f "$form->{path}/$form->{login}_$form->{script}") {
46   eval { require "$form->{path}/$form->{login}_$form->{script}"; };
47   $form->error($@) if ($@);
48 }
49
50 # window title bar, user info
51 $form->{titlebar} = "SQL-Ledger ".$locale->text('Version'). " $form->{version}";
52
53 if ($form->{action}) {
54   $form->{titlebar} .= " - $myconfig{name} - $myconfig{dbname}";
55   &{ $locale->findsub($form->{action}) };
56 } else {
57   &login_screen;
58 }
59
60
61 1;
62
63
64 sub login_screen {
65
66   $form->{stylesheet} = "sql-ledger.css";
67   $form->{favicon} = "sql-ledger.ico";
68
69   $form->{endsession} = 1;
70   $form->header(1);
71
72   if ($form->{login}) {
73    $sf = qq|function sf() { document.login.password.focus(); }|;
74   } else {
75    $sf = qq|function sf() { document.login.login.focus(); }|;
76   }
77
78   if ($form->{jsc} && -d 'bin/js') {
79   print qq|
80 <script language="JavaScript" type="text/javascript">
81 <!--
82 var agt = navigator.userAgent.toLowerCase();
83 var is_major = parseInt(navigator.appVersion);
84 var is_nav = ((agt.indexOf('mozilla') != -1) && (agt.indexOf('spoofer') == -1)
85            && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera') == -1)
86            && (agt.indexOf('webtv') == -1));
87 var is_nav4lo = (is_nav && (is_major <= 4));
88
89 function jsp() {
90   if (is_nav4lo)
91     document.login.path.value = "bin/mozilla"
92   else
93     document.login.path.value = "bin/js"
94 }
95 $sf
96 // End -->
97 </script>
98 |;
99   }
100
101   print qq|
102
103 <body class=login onload="jsp(); sf()">
104
105 <pre>
106
107 </pre>
108
109 <center>
110 <table class=login border=3 cellpadding=20>
111   <tr>
112     <td class=login align=center><a href="http://www.sql-ledger.org" target=_top><img src=sql-ledger.gif border=0></a>
113 <h1 class=login align=center>|.$locale->text('Version').qq| $form->{version}
114 </h1>
115
116 <p>
117
118 <form method=post action=$form->{script} name=login>
119
120       <table width=100%>
121         <tr>
122           <td align=center>
123             <table>
124               <tr>
125                 <th align=right>|.$locale->text('Name').qq|</th>
126                 <td><input class=login name=login size=30 value=$form->{login}></td>
127               </tr> 
128               <tr>
129                 <th align=right>|.$locale->text('Password').qq|</th>
130                 <td><input class=login type=password name=password size=30></td>
131               </tr>
132               <input type=hidden name=path value=$form->{path}>
133             </table>
134
135             <br>
136             <input type=submit name=action value="|.$locale->text('Login').qq|">
137           </td>
138         </tr>
139       </table>
140
141 </form>
142
143     </td>
144   </tr>
145 </table>
146   
147 </body>
148 </html>
149 |;
150
151 }
152
153
154 sub selectdataset {
155   my ($login) = @_;
156   
157   if (-f "css/sql-ledger.css") {
158     $form->{stylesheet} = "sql-ledger.css";
159   }
160
161   $form->header;
162
163   print qq|
164 <body class=login>
165
166 <pre>
167
168 </pre>
169
170 <center>
171 <table class=login border=3 cellpadding=20>
172   <tr>
173     <td class=login align=center><a href="http://www.sql-ledger.org" target=_top><img src=sql-ledger.gif border=0></a>
174 <h1 class=login align=center>|.$locale->text('Version').qq| $form->{version}
175 </h1>
176
177 <p>
178
179 <form method=post action=$form->{script}>
180
181 <input type=hidden name=beenthere value=1>
182
183       <table width=100%>
184         <tr>
185           <td align=center>
186             <table>
187               <tr>
188                 <th align=right>|.$locale->text('Name').qq|</th>
189                 <td>$form->{login}</td>
190               </tr> 
191               <tr>
192                 <th align=right>|.$locale->text('Password').qq|</th>
193                 <td><input class=login type=password name=password size=30 value=$form->{password}></td>
194               </tr>
195               <input type=hidden name=path value=$form->{path}>
196               <tr>
197                 <th align=right>|.$locale->text('Company').qq|</th>
198                 <td>|;
199                 
200                 $checked = "checked";
201                 foreach $login (sort { $login{$a} cmp $login{$b} } keys %{ $login }) {
202                   print qq|
203                   <br><input class=login type=radio name=login value=$login $checked>$login{$login}
204                   |;
205                   $checked = "";
206                 }
207
208                 print qq|
209                   </td>
210               </tr>
211             </table>
212             <br>
213             <input type=submit name=action value="|.$locale->text('Login').qq|">
214           </td>
215         </tr>
216       </table>
217
218 </form>
219
220     </td>
221   </tr>
222 </table>
223   
224 </body>
225 </html>
226 |;
227
228
229 }
230
231
232 sub login {
233
234   $form->{stylesheet} = "sql-ledger.css";
235   $form->{favicon} = "sql-ledger.ico";
236   
237   $form->error($locale->text('You did not enter a name!')) unless ($form->{login});
238
239   if (! $form->{beenthere}) {
240     open(FH, "$memberfile") or $form->error("$memberfile : $!");
241     @a = <FH>;
242     close(FH);
243
244     @login = grep { s/\[(.*)\]/$1/ } @a;
245     @company = grep { s/company=(.*)/$1/ } @a;
246     shift @login;
247
248     for ($i = 0; $i <= $#login; $i++) {
249       chop $login[$i];
250       if (($form->{login} eq $login[$i]) || ($login[$i] =~ /$form->{login}@/)) {
251         chop $company[$i];
252         $login{$login[$i]} = $company[$i];
253       }
254     }
255
256     if (keys %login > 1) {
257       &selectdataset(\%login);
258       exit;
259     }
260   }
261
262
263   $user = new User $memberfile, $form->{login};
264
265   # if we get an error back, bale out
266   if (($errno = $user->login(\%$form, $userspath)) <= -1) {
267
268     $errno *= -1;
269     $err[1] = $locale->text('Incorrect Password!');
270     $err[2] = $locale->text('Incorrect Dataset version!');
271     $err[3] = qq|$form->{login} |.$locale->text('is not a member!');
272     $err[4] = $locale->text('Dataset is newer than version!');
273     
274     if ($errno == 5) {
275       # upgrade dataset and log in again
276       open FH, ">$userspath/nologin" or $form->error($!);
277
278       map { $form->{$_} = $user->{$_} } qw(dbname dbhost dbport dbdriver dbuser dbpasswd);
279
280       $form->{dbpasswd} = unpack 'u', $form->{dbpasswd};
281       
282       $form->{dbupdate} = "db$user->{dbname}";
283       $form->{$form->{dbupdate}} = 1;
284
285       $form->header;
286       print $locale->text('Upgrading to Version')." $form->{version} ... ";
287
288       # required for Oracle
289       $form->{dbdefault} = $sid;
290
291       $user->dbupdate(\%$form);
292
293       # remove lock file
294       unlink "$userspath/nologin";
295
296       print $locale->text('done');
297
298       print "<p><a href=menu.pl?login=$form->{login}&sessionid=$form->{sessionid}&path=$form->{path}&action=display>".$locale->text('Continue')."</a>";
299
300       exit;
301     }
302     
303     $form->error($err[$errno]);
304   }
305
306
307   # made it this far, execute the menu
308   $form->{callback} = "menu.pl?login=$form->{login}&path=$form->{path}&action=display";
309
310   $form->redirect;
311   
312 }
313
314
315
316 sub logout {
317
318   $jsc = $form->{path} =~ /js/;
319   $form->{callback} = "$form->{script}?path=$form->{path}&login=$form->{login}&jsc=$jsc";
320   
321   $form->redirect;
322
323 }
324
325