summaryrefslogtreecommitdiff
path: root/bin/lynx/login.pl
blob: 421b5c7ed13bd8b888aa404bffdc4d3274aedf32 (plain)
  1. #=====================================================================
  2. # LedgerSMB
  3. # Small Medium Business Accounting software
  4. #
  5. # See COPYRIGHT file for copyright information
  6. #======================================================================
  7. #
  8. # This file has undergone whitespace cleanup.
  9. #
  10. #======================================================================
  11. #
  12. # login frontend
  13. #
  14. #######################################################################
  15. use DBI;
  16. use LedgerSMB::User;
  17. use LedgerSMB::Form;
  18. ## will need this later when session_destroy will be used
  19. #use LedgerSMB::Session;
  20. $form = new Form;
  21. $locale = new Locale $language, "login";
  22. $form->{charset} = $locale->{charset};
  23. # customization
  24. if (-f "$form->{path}/custom_$form->{script}") {
  25. eval { require "$form->{path}/custom_$form->{script}"; };
  26. $form->error($@) if ($@);
  27. }
  28. # per login customization
  29. if (-f "$form->{path}/$form->{login}_$form->{script}") {
  30. eval { require "$form->{path}/$form->{login}_$form->{script}"; };
  31. $form->error($@) if ($@);
  32. }
  33. # window title bar, user info
  34. $form->{titlebar} = "LedgerSMB ".$locale->text('Version'). " $form->{version}";
  35. if ($form->{action}) {
  36. $form->{titlebar} .= " - $myconfig{name} - $myconfig{dbname}";
  37. &{ $locale->findsub($form->{action}) };
  38. } else {
  39. &login_screen;
  40. }
  41. 1;
  42. sub login_screen {
  43. $form->{stylesheet} = "ledger-smb.css";
  44. $form->{favicon} = "favicon.ico";
  45. $form->{endsession} = 1;
  46. if ($form->{login}) {
  47. $sf = q|function sf() { document.login.password.focus(); }|;
  48. } else {
  49. $sf = q|function sf() { document.login.login.focus(); }|;
  50. }
  51. my $headeradd = qq|
  52. <script language="JavaScript" type="text/javascript">
  53. <!--
  54. var agt = navigator.userAgent.toLowerCase();
  55. var is_major = parseInt(navigator.appVersion);
  56. var is_nav = ((agt.indexOf('mozilla') != -1) && (agt.indexOf('spoofer') == -1)
  57. && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera') == -1)
  58. && (agt.indexOf('webtv') == -1));
  59. var is_nav4lo = (is_nav && (is_major <= 4));
  60. function jsp() {
  61. if (is_nav4lo){
  62. document.login.js.value = "0";
  63. } else {
  64. document.login.js.value = "1";
  65. }
  66. }
  67. $sf
  68. // End -->
  69. </script>|;
  70. $form->header(1, $headeradd)
  71. print qq|
  72. <body class="login" onload="jsp(); sf();">
  73. <br /><br />
  74. <center>
  75. <table class="login" border="3" cellpadding="20">
  76. <tr>
  77. <td class="login" align="center">
  78. <a href="http://sourceforge.net/projects/ledger-smb/" target="_top"><img src="ledger-smb.png" width="200" heith="100" border="0" alt="LedgerSMB Logo" /></a>
  79. <h1 class="login" align="center">|.$locale->text('Version').qq| $form->{version}</h1>
  80. <p>
  81. <form method="post" action="$form->{script}" name="login">
  82. <table width="100%">
  83. <tr>
  84. <td align="center">
  85. <table>
  86. <tr>
  87. <th align="right">|.$locale->text('Name').qq|</th>
  88. <td><input class="login" name="login" size="30" value="$form->{login}" /></td>
  89. </tr>
  90. <tr>
  91. <th align="right">|.$locale->text('Password').qq|</th>
  92. <td><input class="login" type="password" name="password" size="30" /></td>
  93. </tr>
  94. </table>
  95. <br />
  96. </td>
  97. </tr>
  98. </table>
  99. <input type="hidden" name="path" value="$form->{path}" />
  100. <input type="hidden" name="js" value="$form->{js}" />
  101. <input type="submit" name="action" value="|.$locale->text('Login').qq|" />
  102. </form>
  103. </p>
  104. </td>
  105. </tr>
  106. </table>
  107. </center>
  108. </body>
  109. </html>|;
  110. }
  111. sub selectdataset {
  112. my ($login) = @_;
  113. if (-f "css/ledger-smb.css") {
  114. $form->{stylesheet} = "ledger-smb.css";
  115. }
  116. $form->header(1);
  117. print qq|
  118. <body class="login" onload="document.forms[0].password.focus()" />
  119. <br /><br />
  120. <center>
  121. <table class="login" border="3" cellpadding="20">
  122. <tr>
  123. <td class="login" align="center">
  124. <a href="http://sourceforge.net/projects/ledger-smb/" target="_top"><img src="ledger-smb.png" width="100" heith="100" border="0" alt="LedgerSMB Logo" /></a>
  125. <h1 class="login" align="center">|.$locale->text('Version').qq| $form->{version}</h1>
  126. <p>
  127. <form method="post" action="$form->{script}">
  128. <input type="hidden" name="beenthere" value="1" />
  129. <input type="hidden" name="js" value="$form->{js}" />
  130. <input type="hidden" name="path" value="$form->{path}" />
  131. <table width="100%">
  132. <tr>
  133. <td align="center">
  134. <table>
  135. <tr>
  136. <th align="right">|.$locale->text('Name').qq|</th>
  137. <td>$form->{login}</td>
  138. </tr>
  139. <tr>
  140. <th align="right">|.$locale->text('Password').qq|</th>
  141. <td><input class="login" type="password" name="password" size="30" value="$form->{password}" /></td>
  142. </tr>
  143. <tr>
  144. <th align="right">|.$locale->text('Company').qq|</th>
  145. <td>|;
  146. $checked = "checked";
  147. foreach $login (sort { $login{$a} cmp $login{$b} } keys %{ $login }) {
  148. print qq| <br /><input class="login" type="radio" name="login" value="$login" $checked>$login{$login} |;
  149. $checked = "";
  150. }
  151. print qq|
  152. </td>
  153. </tr>
  154. </table>
  155. <br />
  156. <input type="submit" name="action" value="|.$locale->text('Login').qq|">
  157. </td>
  158. </tr>
  159. </table>
  160. </form>
  161. </td>
  162. </tr>
  163. </table>
  164. </center>
  165. </body>
  166. </html>|;
  167. }
  168. sub login {
  169. $form->{stylesheet} = "ledger-smb.css";
  170. $form->{favicon} = "favicon.ico";
  171. $form->error($locale->text('You did not enter a name!')) unless ($form->{login});
  172. if (! $form->{beenthere}) {
  173. open(FH, "$memberfile") or $form->error("$memberfile : $!");
  174. @a = <FH>;
  175. close(FH);
  176. foreach $item (@a) {
  177. if ($item =~ /^\[(.*?)\]/) {
  178. $login = $1;
  179. $found = 1;
  180. }
  181. if ($item =~ /^company=/) {
  182. if ($login =~ /$form->{login}\@/ && $found) {
  183. ($null, $name) = split /=/, $item, 2;
  184. $login{$login} = $name;
  185. }
  186. $found = 0;
  187. }
  188. }
  189. if (keys %login > 1) {
  190. &selectdataset(\%login);
  191. exit;
  192. }
  193. }
  194. $user = new User $memberfile, $form->{login};
  195. # if we get an error back, bale out
  196. if (($errno = $user->login(\%$form, $userspath)) <= -1) {
  197. $errno *= -1;
  198. $err[1] = $locale->text('Access Denied!');
  199. $err[2] = $locale->text('Incorrect Dataset version!');
  200. $err[3] = $locale->text('Dataset is newer than version!');
  201. if ($errno == 4) {
  202. # upgrade dataset and log in again
  203. open FH, ">$userspath/nologin" or $form->error($!);
  204. for (qw(dbname dbhost dbport dbdriver dbuser dbpasswd)) { $form->{$_} = $user->{$_} }
  205. $form->{dbpasswd} = unpack 'u', $form->{dbpasswd};
  206. $form->{dbupdate} = "db$user->{dbname}";
  207. $form->{$form->{dbupdate}} = 1;
  208. $form->header;
  209. print qq|<body>|;
  210. print $locale->text('Upgrading to Version')." $form->{version} ... ";
  211. # required for Oracle
  212. $form->{dbdefault} = $sid;
  213. $user->dbupdate(\%$form);
  214. # remove lock file
  215. unlink "$userspath/nologin";
  216. print $locale->text('done');
  217. 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>";
  218. print qq|</body>|;
  219. exit;
  220. }
  221. $form->error($err[$errno]);
  222. }
  223. # made it this far, setup callback for the menu
  224. $form->{callback} = "menu.pl?action=display&password=$form->{password}";
  225. for (qw(login path js)) { $form->{callback} .= "&$_=$form->{$_}" }
  226. # check for recurring transactions
  227. if ($user->{acs} !~ /Recurring Transactions/) {
  228. if ($user->check_recurring(\%$form)) {
  229. $form->{callback} .= "&main=recurring_transactions";
  230. } else {
  231. $form->{callback} .= "&main=company_logo";
  232. }
  233. } else {
  234. if ($user->{role} eq 'user') {
  235. $form->{callback} .= "&main=company_logo";
  236. } else {
  237. if ($user->check_recurring(\%$form)) {
  238. $form->{callback} .= "&main=recurring_transactions";
  239. } else {
  240. $form->{callback} .= "&main=company_logo";
  241. }
  242. }
  243. }
  244. $form->redirect;
  245. }
  246. sub logout {
  247. $form->{callback} = "$form->{script}?path=$form->{path}&login=$form->{login}";
  248. $form->{endsession} = 1;
  249. #delete the cookie in the browser manually (can't use session_destroy here unfortunately)
  250. print qq|Set-Cookie: LedgerSMB=; path=/;\n|;
  251. $form->redirect;
  252. }