#===================================================================== # LedgerSMB Small Medium Business Accounting # http://www.ledgersmb.org/ # # Copyright (C) 2006 # This work contains copyrighted information from a number of sources all used # with permission. # # This file contains source code included with or based on SQL-Ledger which # is Copyright Dieter Simader and DWS Systems Inc. 2000-2005 and licensed # under the GNU General Public License version 2 or, at your option, any later # version. For a full list including contact information of contributors, # maintainers, and copyright holders, see the CONTRIBUTORS file. # # Original Copyright Notice from SQL-Ledger 2.6.17 (before the fork): # Copyright (c) 2000 # # Author: DWS Systems Inc. # Web: http://www.sql-ledger.org # # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #====================================================================== 1; use DBI; use LedgerSMB::User; use LedgerSMB::Form; use LedgerSMB::Locale; use LedgerSMB::Session; ## will need this later when session_destroy will be used #use LedgerSMB::Session; $form = new Form; # For 1.3, this logic should be in LedgerSMB.pm if ( $form->{path} ) { if ( $form->{path} ne 'bin/lynx' ) { $form->{path} = 'bin/mozilla'; } } else { $form->{terminal} = "lynx"; if ( $ENV{HTTP_USER_AGENT} !~ /lynx/i ) { $form->{terminal} = "mozilla"; } $form->{path} = "bin/$form->{terminal}"; } $locale = LedgerSMB::Locale->get_handle( ${LedgerSMB::Sysconfig::language} ) or $form->error( __FILE__ . ':' . __LINE__ . ": Locale not loaded: $!\n" ); $locale->encoding('UTF-8'); $form->{charset} = 'UTF-8'; #$form->{charset} = $locale->encoding; # customization if ( -f "bin/custom/$form->{script}" ) { eval { require "bin/custom/$form->{script}"; }; $form->error( __FILE__ . ':' . __LINE__ . ': ' . $@ ) if ($@); } # window title bar, user info $form->{titlebar} = "LedgerSMB " . $locale->text('Version') . " $form->{version}"; if ( $form->{action} ) { $form->{titlebar} .= " - $myconfig{name} - $myconfig{dbname}"; &{ $form->{action} }; } else { &login_screen; } 1; sub login_screen { $form->{stylesheet} = "ledger-smb.css"; $form->{favicon} = "favicon.ico"; $form->{endsession} = 1; if ( $form->{login} ) { $sf = q|function sf() { document.login.password.focus(); }|; } else { $sf = q|function sf() { document.login.login.focus(); }|; } my $headeradd = qq| <script language="JavaScript" type="text/javascript"> <!-- var agt = navigator.userAgent.toLowerCase(); var is_major = parseInt(navigator.appVersion); var is_nav = ((agt.indexOf('mozilla') != -1) && (agt.indexOf('spoofer') == -1) && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera') == -1) && (agt.indexOf('webtv') == -1)); var is_nav4lo = (is_nav && (is_major <= 4)); function jsp() { if (is_nav4lo){ document.login.js.value = "0"; } else { document.login.js.value = "1"; } } $sf // End --> </script>|; $form->header( 1, $headeradd ); print qq| <body class="login" onload="jsp(); sf();"> <br /><br /> <center> <table class="login" border="3" cellpadding="20"> <tr> <td class="login" align="center"> <a href="http://www.ledgersmb.org/" target="_top"><img src="ledger-smb.png" width="200" heith="100" border="0" alt="LedgerSMB Logo" /></a> <h1 class="login" align="center">| . $locale->text('Version') . qq| $form->{version}</h1> <p> <form method="post" action="login.pl" name="login"> <table width="100%"> <tr> <td align="center"> <table> <tr> <th align="right">| . $locale->text('Name') . qq|</th> <td><input class="login" name="login" size="30" value="$form->{login}" /></td> </tr> <tr> <th align="right">| . $locale->text('Password') . qq|</th> <td><input class="login" type="password" name="password" size="30" /></td> </tr> </table> <br /> </td> </tr> </table> <input type="hidden" name="path" value="$form->{path}" /> <input type="hidden" name="js" value="$form->{js}" /> <button type="submit" name="action" value="login">| . $locale->text('Login') . qq|</button> </form> </p> </td> </tr> </table> <p><a href="admin.pl" >| . $locale->text("Administrative login") . qq|</a></p> </center> </body> </html>|; } sub selectdataset { my ($login) = @_; if ( -f "css/ledger-smb.css" ) { $form->{stylesheet} = "ledger-smb.css"; } $form->header(1); print qq| <body class="login" onload="document.forms[0].password.focus()" /> <br /><br /> <center> <table class="login" border="3" cellpadding="20"> <tr> <td class="login" align="center"> <a href="http://www.ledgersmb.org/" target="_top"><img src="ledger-smb.png" width="100" heith="100" border="0" alt="LedgerSMB Logo" /></a> <h1 class="login" align="center">| . $locale->text('Version') . qq| $form->{version}</h1> <p> <form method="post" action="$form->{script}"> <input type="hidden" name="beenthere" value="1" /> <input type="hidden" name="js" value="$form->{js}" /> <input type="hidden" name="path" value="$form->{path}" /> <table width="100%"> <tr> <td align="center"> <table> <tr> <th align="right">| . $locale->text('Name') . qq|</th> <td>$form->{login}</td> </tr> <tr> <th align="right">| . $locale->text('Password') . qq|</th> <td><input class="login" type="password" name="password" size="30" value="$form->{password}" /></td> </tr> <tr> <th align="right">| . $locale->text('Company') . qq|</th> <td>|; $checked = "checked"; foreach $login ( sort { $login{$a} cmp $login{$b} } keys %{$login} ) { print qq| <br /><input class="login" type="radio" name="login" value="$login" $checked>$login{$login} |; $checked = ""; } print qq| </td> </tr> </table> <br /> <button type="submit" name="action" value="login">| . $locale->text('Login') . qq|</button> </td> </tr> </table> </form> </td> </tr> </table> </center> </body> </html>|; } sub login { $form->{stylesheet} = "ledger-smb.css"; $form->{favicon} = "favicon.ico"; $form->error( __FILE__ . ':' . __LINE__ . ': ' . $locale->text('You did not enter a name!') ) unless ( $form->{login} ); #this needs to be done via db #if (! $form->{beenthere}) { # open(FH, '<', "${LedgerSMB::Sysconfig::memberfile}") or $form->error(__FILE__.':'.__LINE__.": $memberfile : $!"); # @a = <FH>; # close(FH); # # foreach $item (@a) { # # if ($item =~ /^\[(.*?)\]/) { # $login = $1; # $found = 1; # } # # if ($item =~ /^company=/) { # if ($login =~ /$form->{login}\@/ && $found) { # ($null, $name) = split /=/, $item, 2; # $login{$login} = $name; # } # $found = 0; # } # } # # if (keys %login > 1) { # &selectdataset(\%login); # exit; # } #} if ( !${LedgerSMB::Sysconfig::GLOBALDBH} ) { $locale->text("No GlobalDBH Configured or Could not Connect"); } $user = LedgerSMB::User->new( $form->{login} ); # if we get an error back, bale out if ( ( $errno = $user->login( \%$form ) ) <= -1 ) { $errno *= -1; $err[1] = $locale->text('Access Denied!'); $err[2] = $locale->text('Incorrect Dataset version!'); $err[3] = $locale->text('Dataset is newer than version!'); if ( $errno == 4 ) { # upgrade dataset and log in again #locking needs to be done via db function #open FH, '>', "${LedgerSMB::Sysconfig::userspath}/nologin" or $form->error($!); for (qw(dbname dbhost dbport dbdriver dbuser dbpasswd)) { $form->{$_} = $user->{$_}; } $form->{dbupdate} = "db$user->{dbname}"; $form->{ $form->{dbupdate} } = 1; $form->header; print qq|<body>|; print $locale->text( 'Upgrading to Version [_1] ...', $form->{version} ); # required for Oracle $form->{dbdefault} = $sid; $user->dbupdate( \%$form ); # remove lock #unlink "${LedgerSMB::Sysconfig::userspath}/nologin"; print $locale->text('done'); print "<p><a href=\"menu.pl?login=$form->{login}&sessionid=$form->{sessionid}&path=$form->{path}&action=display&main=company_logo&js=$form->{js}>\">" . $locale->text('Continue') . "</a>"; print qq|</body>|; exit; } $form->error( __FILE__ . ':' . __LINE__ . ': ' . $err[$errno] ); } # made it this far, setup callback for the menu $form->{callback} = "menu.pl?action=display&password=$form->{password}"; for (qw(login path js)) { $form->{callback} .= "&$_=$form->{$_}" } # check for recurring transactions if ( $user->{acs} !~ /Recurring Transactions/ ) { if ( $user->check_recurring( \%$form ) ) { $form->{callback} .= "&main=recurring_transactions"; } else { $form->{callback} .= "&main=company_logo"; } } else { if ( $user->{role} eq 'user' ) { $form->{callback} .= "&main=company_logo"; } else { if ( $user->check_recurring( \%$form ) ) { $form->{callback} .= "&main=recurring_transactions"; } else { $form->{callback} .= "&main=company_logo"; } } } Session::session_create($form); $form->redirect; } sub logout { $form->{callback} = ""; $form->{endsession} = 1; Session::session_destroy($form); $form->redirect; }