summaryrefslogtreecommitdiff
path: root/bin/mozilla/login.pl
blob: 00ecf8294b17a2a917fbbeab55538fc249b2202f (plain)
  1. #=====================================================================
  2. # LedgerSMB
  3. # Small Medium Business Accounting software
  4. #
  5. # See COPYRIGHT file for copyright information
  6. #======================================================================
  7. #
  8. # This file has NOT undergone whitespace cleanup.
  9. #
  10. #======================================================================
  11. #
  12. # login frontend
  13. #
  14. #######################################################################
  15. use DBI;
  16. use LedgerSMB::User;
  17. use LedgerSMB::Form;
  18. use LedgerSMB::Session;
  19. $form = new Form;
  20. $locale = new Locale $language, "login";
  21. $form->{charset} = $locale->{charset};
  22. # customization
  23. if (-f "$form->{path}/custom_$form->{script}") {
  24. eval { require "$form->{path}/custom_$form->{script}"; };
  25. $form->error($@) if ($@);
  26. }
  27. # per login customization
  28. if (-f "$form->{path}/$form->{login}_$form->{script}") {
  29. eval { require "$form->{path}/$form->{login}_$form->{script}"; };
  30. $form->error($@) if ($@);
  31. }
  32. # window title bar, user info
  33. $form->{titlebar} = "LedgerSMB ".$locale->text('Version'). " $form->{version}";
  34. if ($form->{action}) {
  35. $form->{titlebar} .= " - $myconfig{name} - $myconfig{dbname}";
  36. &{ $locale->findsub($form->{action}) };
  37. } else {
  38. &login_screen;
  39. }
  40. 1;
  41. sub login_screen {
  42. $form->{stylesheet} = "sql-ledger.css";
  43. $form->{favicon} = "favicon.ico";
  44. $form->{endsession} = 1;
  45. $form->header(1);
  46. if ($form->{login}) {
  47. $sf = qq|function sf() { document.login.password.focus(); }|;
  48. } else {
  49. $sf = qq|function sf() { document.login.login.focus(); }|;
  50. }
  51. print 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. $sf
  67. // End -->
  68. </script>
  69. |;
  70. print qq|
  71. <body class=login onload="jsp(); sf()">
  72. <pre>
  73. </pre>
  74. <center>
  75. <table class=login border=3 cellpadding=20>
  76. <tr>
  77. <td class=login align=center><a href="http://sourceforge.net/projects/ledger-smb/" target=_top><img src="ledger-smb.png" width="200" heith="100" border="0" /></a>
  78. <h1 class=login align=center>|.$locale->text('Version').qq| $form->{version}
  79. </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. <input type=hidden name=path value=$form->{path}>
  95. <input type=hidden name=js value=$form->{js}>
  96. </table>
  97. <br>
  98. <input type=submit name=action value="|.$locale->text('Login').qq|">
  99. </td>
  100. </tr>
  101. </table>
  102. </form>
  103. </td>
  104. </tr>
  105. </table>
  106. </body>
  107. </html>
  108. |;
  109. }
  110. sub selectdataset {
  111. my ($login) = @_;
  112. if (-f "css/sql-ledger.css") {
  113. $form->{stylesheet} = "sql-ledger.css";
  114. }
  115. $form->header(1);
  116. print qq|
  117. <body class=login onload="document.forms[0].password.focus()" />
  118. <pre>
  119. </pre>
  120. <center>
  121. <table class=login border=3 cellpadding=20>
  122. <tr>
  123. <td class=login align=center><a href="http://sourceforge.net/projects/ledger-smb/" target=_top><img src="ledger-smb.png" width="100" heith="100" border="0" /></a>
  124. <h1 class=login align=center>|.$locale->text('Version').qq| $form->{version}
  125. </h1>
  126. <p>
  127. <form method=post action=$form->{script}>
  128. <input type=hidden name=beenthere value=1>
  129. <table width=100%>
  130. <tr>
  131. <td align=center>
  132. <table>
  133. <tr>
  134. <th align=right>|.$locale->text('Name').qq|</th>
  135. <td>$form->{login}</td>
  136. </tr>
  137. <tr>
  138. <th align=right>|.$locale->text('Password').qq|</th>
  139. <td><input class=login type=password name=password size=30 value=$form->{password}></td>
  140. </tr>
  141. <input type=hidden name=js value=$form->{js}>
  142. <input type=hidden name=path value=$form->{path}>
  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|
  149. <br><input class=login type=radio name=login value=$login $checked>$login{$login}
  150. |;
  151. $checked = "";
  152. }
  153. print qq|
  154. </td>
  155. </tr>
  156. </table>
  157. <br>
  158. <input type=submit name=action value="|.$locale->text('Login').qq|">
  159. </td>
  160. </tr>
  161. </table>
  162. </form>
  163. </td>
  164. </tr>
  165. </table>
  166. </body>
  167. </html>
  168. |;
  169. }
  170. sub login {
  171. $form->{stylesheet} = "sql-ledger.css";
  172. $form->{favicon} = "favicon.ico";
  173. $form->error($locale->text('You did not enter a name!')) unless ($form->{login});
  174. if (! $form->{beenthere}) {
  175. open(FH, "$memberfile") or $form->error("$memberfile : $!");
  176. @a = <FH>;
  177. close(FH);
  178. foreach $item (@a) {
  179. if ($item =~ /^\[(.*?)\]/) {
  180. $login = $1;
  181. $found = 1;
  182. }
  183. if ($item =~ /^company=/) {
  184. if ($login =~ /$form->{login}\@/ && $found) {
  185. ($null, $name) = split /=/, $item, 2;
  186. $login{$login} = $name;
  187. }
  188. $found = 0;
  189. }
  190. }
  191. if (keys %login > 1) {
  192. &selectdataset(\%login);
  193. exit;
  194. }
  195. }
  196. $user = new User $memberfile, $form->{login};
  197. # if we get an error back, bale out
  198. if (($errno = $user->login(\%$form, $userspath)) <= -1) {
  199. $errno *= -1;
  200. $err[1] = $locale->text('Access Denied!');
  201. $err[2] = $locale->text('Incorrect Dataset version!');
  202. $err[3] = $locale->text('Dataset is newer than version!');
  203. if ($errno == 4) {
  204. # upgrade dataset and log in again
  205. open FH, ">$userspath/nologin" or $form->error($!);
  206. for (qw(dbname dbhost dbport dbdriver dbuser dbpasswd)) { $form->{$_} = $user->{$_} }
  207. $form->{dbpasswd} = unpack 'u', $form->{dbpasswd};
  208. $form->{dbupdate} = "db$user->{dbname}";
  209. $form->{$form->{dbupdate}} = 1;
  210. $form->header;
  211. print $locale->text('Upgrading to Version')." $form->{version} ... ";
  212. # required for Oracle
  213. $form->{dbdefault} = $sid;
  214. $user->dbupdate(\%$form);
  215. # remove lock file
  216. unlink "$userspath/nologin";
  217. print $locale->text('done');
  218. 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>";
  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. }