X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=sql-ledger%2Fbin%2Fmozilla%2Fadmin.pl;fp=sql-ledger%2Fbin%2Fmozilla%2Fadmin.pl;h=8a4daba786bbfe27a4ebe3daf2267e1230337c72;hp=39247b541f2554d6db30993d193e5aa7280fc389;hb=32306b5f8ffe4ce594409aa6e89626740b225a39;hpb=52072fcd26f2faf57923f598c358e7f47c4e2643 diff --git a/sql-ledger/bin/mozilla/admin.pl b/sql-ledger/bin/mozilla/admin.pl index 39247b541..8a4daba78 100644 --- a/sql-ledger/bin/mozilla/admin.pl +++ b/sql-ledger/bin/mozilla/admin.pl @@ -39,6 +39,11 @@ $locale = new Locale $language, "admin"; eval { require DBI; }; $form->error($locale->text('DBI not installed!')) if ($@); +$form->{stylesheet} = "sql-ledger.css"; +$form->{favicon} = "favicon.ico"; +$form->{timeout} = 600; + +require "$form->{path}/pw.pl"; # customization if (-f "$form->{path}/custom_$form->{script}") { @@ -47,22 +52,11 @@ if (-f "$form->{path}/custom_$form->{script}") { } -if (-f "css/sql-ledger.css") { - $form->{stylesheet} = "sql-ledger.css"; -} - - if ($form->{action}) { $subroutine = $locale->findsub($form->{action}); - - if ($subroutine eq 'login') { - if ($form->{rpw}) { - $form->{rpw} = crypt $form->{rpw}, "ro"; - } - } - - &check_password; + + &check_password unless $form->{action} eq 'logout'; &$subroutine; @@ -80,7 +74,7 @@ if ($form->{action}) { password= |; - close(FH); + close FH; } &adminlogin; @@ -94,32 +88,39 @@ password= sub adminlogin { $form->{title} = qq|SQL-Ledger $form->{version} |.$locale->text('Administration'); - - $form->header; - print qq| - + $form->{login} = "root login"; + $form->header(1); + + print qq| + +

|.$locale->text('Version').qq| $form->{version}

|.$locale->text('Administration').qq|

-
+ - + -{path}> +{sessionid}>
|.$locale->text('Password').qq|
-
SQL-Ledger |.$locale->text('website').qq| @@ -133,8 +134,6 @@ sub adminlogin { } - - sub login { &list_users; @@ -142,6 +141,13 @@ sub login { } +sub logout { + + $form->{callback} = "$form->{script}?path=$form->{path}&endsession=1"; + $form->redirect($locale->text('You are logged out')); + +} + sub add_user { @@ -154,7 +160,9 @@ sub add_user { if (-f "css/sql-ledger.css") { $myconfig->{stylesheet} = "sql-ledger.css"; } - $myconfig->{vclimit} = 200; + $myconfig->{vclimit} = 1000; + $myconfig->{menuwidth} = 155; + $myconfig->{timeout} = 3600; &form_header; &form_footer; @@ -183,10 +191,10 @@ sub form_footer { print qq| - - + + {path}> -{rpw}> +{sessionid}> $delete @@ -202,10 +210,17 @@ $delete sub list_users { - $form->error("$memberfile : ".$locale->text('locked!')) if (-f "${memberfile}.LCK"); - open(FH, "$memberfile") or $form->error("$memberfile : $!"); - + + $nologin = qq| +|; + + if (-e "$userspath/nologin") { + $nologin = qq| +|; + } + + while () { chop; @@ -223,6 +238,7 @@ sub list_users { close(FH); # type=submit $locale->text('Pg Database Administration') +# type=submit $locale->text('PgPP Database Administration') # type=submit $locale->text('Oracle Database Administration') foreach $item (User->dbdrivers) { @@ -242,6 +258,7 @@ sub list_users { $form->{title} = "SQL-Ledger ".$locale->text('Accounting')." ".$locale->text('Administration'); + $form->{login} = "root login"; $form->header; print qq| @@ -267,7 +284,7 @@ sub list_users { |; foreach $key (sort keys %member) { - $href = "$script?action=edit&login=$key&path=$form->{path}&root=$form->{root}&rpw=$form->{rpw}"; + $href = "$script?action=edit&login=$key&path=$form->{path}&sessionid=$form->{sessionid}"; $href =~ s/ /%20/g; $member{$key}{templates} =~ s/^$templates\///; @@ -303,13 +320,15 @@ print qq| {path}> -{rpw}> - +{sessionid}>
$dbdrivers +$nologin + + @@ -317,35 +336,6 @@ $dbdrivers
|.$locale->text('To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.').qq| -

- -

- - - - - - - - -
SQL-Ledger |.$locale->text('Accounting')." ".$locale->text('Login').qq|
- - - - - - - - - - - -{path}> -
|.$locale->text('Name').qq| 
|.$locale->text('Password').qq|
-
- -
- |; @@ -354,7 +344,6 @@ $dbdrivers - sub form_header { # if there is a login, get user @@ -376,17 +365,18 @@ sub form_header { $dateformat .= ($item eq $myconfig->{dateformat}) ? "
|; } @@ -712,6 +744,8 @@ sub save { # no spaces allowed in login name ($form->{login}) = split / /, $form->{login}; + + $form->isblank("login", $locale->text('Login name missing!')); # check for duplicates if (!$form->{edit}) { @@ -722,11 +756,6 @@ sub save { } } - # does stylesheet exist - if ($form->{userstylesheet}) { - $form->error($locale->text('Stylesheet').": css/$form->{userstylesheet} ".$locale->text('does not exist')) unless (-f "css/$form->{userstylesheet}"); - } - # no spaces allowed in directories ($form->{newtemplates}) = split / /, $form->{newtemplates}; @@ -736,7 +765,6 @@ sub save { $form->{templates} = ($form->{usetemplates}) ? $form->{usetemplates} : $form->{login}; } - # is there a basedir if (! -d "$templates") { $form->error($locale->text('Directory').": $templates ".$locale->text('does not exist')); @@ -760,38 +788,33 @@ sub save { } delete $form->{$item}; } - + # check which database was filled in + + $form->{dbhost} = $form->{"$form->{dbdriver}_dbhost"}; + $form->{dbport} = $form->{"$form->{dbdriver}_dbport"}; + $form->{dbpasswd} = $form->{"$form->{dbdriver}_dbpasswd"}; + $form->{dbuser} = $form->{"$form->{dbdriver}_dbuser"}; + $form->{dbname} = $form->{"$form->{dbdriver}_dbname"}; + if ($form->{dbdriver} eq 'Oracle') { $form->{sid} = $form->{Oracle_sid}, ; - $form->{dbhost} = $form->{Oracle_dbhost}, ; - $form->{dbport} = $form->{Oracle_dbport}; - $form->{dbpasswd} = $form->{Oracle_dbpasswd}; - $form->{dbuser} = $form->{Oracle_dbuser}; - $form->{dbname} = $form->{Oracle_dbuser}; $form->isblank("dbhost", $locale->text('Hostname missing!')); $form->isblank("dbport", $locale->text('Port missing!')); $form->isblank("dbuser", $locale->text('Dataset missing!')); } - if ($form->{dbdriver} eq 'Pg') { - $form->{dbhost} = $form->{Pg_dbhost}; - $form->{dbport} = $form->{Pg_dbport}; - $form->{dbpasswd} = $form->{Pg_dbpasswd}; - $form->{dbuser} = $form->{Pg_dbuser}; - $form->{dbname} = $form->{Pg_dbname}; - + if ($form->{dbdriver} =~ /Pg/) { $form->isblank("dbname", $locale->text('Dataset missing!')); $form->isblank("dbuser", $locale->text('Database User missing!')); } - # set admin - $form->{admin} = "" unless $form->{admin}; - foreach $item (keys %{$form}) { $myconfig->{$item} = $form->{$item}; } + $myconfig->{password} = $form->{new_password} if $form->{new_password} ne $form->{old_password}; + delete $myconfig->{stylesheet}; if ($form->{userstylesheet}) { $myconfig->{stylesheet} = $form->{userstylesheet}; @@ -808,8 +831,8 @@ sub save { umask(007); # copy templates to the directory - opendir TEMPLATEDIR, "$templates/." or $form-error("$templates : $!"); - @templates = grep /$form->{mastertemplates}.*?\.(html|tex)$/, readdir TEMPLATEDIR; + opendir TEMPLATEDIR, "$templates/." or $form->error("$templates : $!"); + @templates = grep /$form->{mastertemplates}.*?\.(html|tex|txt)$/, readdir TEMPLATEDIR; closedir TEMPLATEDIR; foreach $file (@templates) { @@ -838,11 +861,14 @@ sub delete { $form->{templates} = ($form->{templates}) ? "$templates/$form->{templates}" : "$templates/$form->{login}"; - $form->error("$memberfile : ".$locale->text('locked!')) if (-f ${memberfile}.LCK); + $form->error("$memberfile ".$locale->text('locked!')) if (-f ${memberfile}.LCK); open(FH, ">${memberfile}.LCK") or $form->error("${memberfile}.LCK : $!"); close(FH); - open(CONF, "+<$memberfile") or $form->error("$memberfile : $!"); + if (! open(CONF, "+<$memberfile")) { + unlink "${memberfile}.LCK"; + $form->error("$memberfile : $!"); + } @config = ; @@ -851,6 +877,8 @@ sub delete { while ($line = shift @config) { + chop $line; + if ($line =~ /^\[/) { last if ($line =~ /\[$form->{login}\]/); $login = &login_name($line); @@ -860,25 +888,31 @@ sub delete { $user{$login} = &get_value($line); } - print CONF $line; + print CONF "$line\n"; } # remove everything up to next login or EOF # and save template variable while ($line = shift @config) { - if ($line =~ /^templates=/) { - $templatedir = &get_value($line); - } + + chop $line; + + ($key, $value) = split /=/, $line, 2; + $myconfig{$key} = $value; + last if ($line =~ /^\[/); } # this one is either the next login or EOF - print CONF $line; + print CONF "$line\n"; $login = &login_name($line); while ($line = shift @config) { + + chop $line; + if ($line =~ /^\[/) { $login = &login_name($line); } @@ -887,7 +921,7 @@ sub delete { $user{$login} = &get_value($line); } - print CONF $line; + print CONF "$line\n"; } close(CONF); @@ -895,9 +929,11 @@ sub delete { # scan %user for $templatedir foreach $login (keys %user) { - last if ($found = ($templatedir eq $user{$login})); + last if ($found = ($myconfig{templates} eq $user{$login})); } + map { $form->{$_} = $myconfig{$_} } keys %myconfig; + # if found keep directory otherwise delete if (!$found) { # delete it if there is a template directory @@ -905,13 +941,16 @@ sub delete { if (-d "$dir") { unlink <$dir/*.html>; unlink <$dir/*.tex>; + unlink <$dir/*.txt>; rmdir "$dir"; } } # delete config file for user unlink "$userspath/$form->{login}.conf"; - + + User::delete_login("", \%$form); + $form->redirect($locale->text('User deleted!')); } @@ -930,10 +969,10 @@ sub login_name { sub get_value { my $line = shift; - my ($null, $value) = split(/=/, $line, 2); + my ($null, $value) = split /=/, $line, 2; # remove comments - $value =~ s/\s#.*//g; + $value =~ s/^\s*#.*//g; # remove any trailing whitespace $value =~ s/^\s*(.*?)\s*$/$1/; @@ -946,22 +985,42 @@ sub get_value { sub change_admin_password { $form->{title} = qq|SQL-Ledger |.$locale->text('Accounting')." ".$locale->text('Administration')." / ".$locale->text('Change Admin Password'); - + + $form->{login} = "root login"; $form->header; print qq| - -

|.$locale->text('Change Admin Password').qq|

-
{script}> -|.$locale->text('Password').qq| + + + + + + + + + - +
|.$locale->text('Change Password').qq|
+ + + + + + + + + +
|.$locale->text('Password').qq|
|.$locale->text('Confirm').qq|
+
+ +
+
{path}> -{rpw}> +{sessionid}>

@@ -977,12 +1036,14 @@ sub change_admin_password { sub change_password { - $root->{password} = $form->{password}; + $form->error($locale->text('Passwords do not match!')) if $form->{new_password} ne $form->{confirm_password}; + + $root->{password} = $form->{new_password}; $root->{'root login'} = 1; $root->save_member($memberfile); - $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&root=$form->{root}&rpw=$root->{password}"; + $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"; $form->redirect($locale->text('Password changed!')); @@ -991,11 +1052,26 @@ sub change_password { sub check_password { - $root = new User "$memberfile", $form->{root}; + $root = new User "$memberfile", "root login"; if ($root->{password}) { - if ($root->{password} ne $form->{rpw}) { - $form->error($locale->text('Incorrect Password!')); + + if ($form->{password}) { + $form->{callback} .= "&password=$form->{password}" if $form->{callback}; + $form->{sessionid} = time; + if ($root->{password} ne crypt $form->{password}, 'ro') { + &getpassword; + exit; + } + } else { + if ($ENV{HTTP_USER_AGENT}) { + $ENV{HTTP_COOKIE} =~ s/;\s*/;/g; + %cookie = split /[=;]/, $ENV{HTTP_COOKIE}; + if ((! $cookie{"SQL-Ledger-root login"}) || $cookie{"SQL-Ledger-root login"} ne $form->{sessionid}) { + &getpassword(1); + exit; + } + } } } @@ -1010,6 +1086,14 @@ sub pg_database_administration { } +sub pgpp_database_administration { + + $form->{dbdriver} = 'PgPP'; + &dbselect_source; + +} + + sub oracle_database_administration { $form->{dbdriver} = 'Oracle'; @@ -1035,6 +1119,8 @@ sub dbdriver_defaults { } ); + $driverdefaults{PgPP} = $driverdefaults{Pg}; + map { $form->{$_} = $driverdefaults{$form->{dbdriver}}{$_} } keys %{ $driverdefaults{Pg} }; } @@ -1045,73 +1131,61 @@ sub dbselect_source { &dbdriver_defaults; $msg{Pg} = $locale->text('Leave host and port field empty unless you want to make a remote connection.'); + $msg{PgPP} = $msg{Pg}; $msg{Oracle} = $locale->text('You must enter a host and port for local and remote connections!'); $form->{title} = "SQL-Ledger ".$locale->text('Accounting')." / ".$locale->text('Database Administration'); - + $form->{login} = "root login"; $form->header; print qq| -

$form->{title}

{script}> - + +
- - - - - - - -{dbdriver}> - - -
|.$locale->text('Database').qq|
- - - - - - - - - - - - - - - - - - - - + - - - - -
|.$locale->text('Host').qq|{dbhost}>|.$locale->text('Port').qq|{dbport}>
|.$locale->text('User').qq|{dbuser}>|.$locale->text('Password').qq|
+ + + + + {dbdriver}> + + + +
|.$locale->text('Database').qq|
+ + + + + + + + + + + + + + + + + + + +
|.$locale->text('Host').qq|{dbhost}>|.$locale->text('Port').qq|{dbport}>
|.$locale->text('User').qq|{dbuser}>|.$locale->text('Password').qq|
$form->{connectstring}{dbdefault}>
+
-
$form->{connectstring}{dbdefault}>
- -
- - - + {path}> -{rpw}> +{sessionid}> -

@@ -1120,7 +1194,8 @@ sub dbselect_source { -

|.$locale->text('This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!') @@ -1149,6 +1224,7 @@ sub update_dataset { $form->{title} = "SQL-Ledger ".$locale->text('Accounting')." ".$locale->text('Database Administration')." / ".$locale->text('Update Dataset'); + $form->{login} = "root login"; $form->header; print qq| @@ -1161,8 +1237,8 @@ sub update_dataset { foreach $key (sort keys %needsupdate) { - if ($needsupdate{$key} lt $form->{dbversion}) { - $upd .= qq|
$key\n|; + if ($needsupdate{$key} ne $form->{dbversion}) { + $upd .= qq| $key\n|; $form->{dbupdate} .= "db$key "; } } @@ -1173,7 +1249,7 @@ sub update_dataset { if ($form->{dbupdate}) { print qq| - +
{script}> {dbdriver}> @@ -1191,19 +1267,23 @@ sub update_dataset { $upd - - + + + @@ -1237,41 +1317,53 @@ sub dbupdate { sub create_dataset { - foreach $item (sort User->dbsources(\%$form)) { - $dbsources .= "[$item] "; - } + @dbsources = sort User->dbsources(\%$form); - opendir SQLDIR, "sql/." or $form-error($!); + opendir SQLDIR, "sql/." or $form->error($!); foreach $item (sort grep /-chart\.sql/, readdir SQLDIR) { next if ($item eq 'Default-chart.sql'); $item =~ s/-chart\.sql//; - push @charts, qq|  $item|; + push @charts, qq|$item|; } closedir SQLDIR; # add Default at beginning - @charts = (qq| Default|, @charts); + unshift @charts, qq|Default|; - $selectencoding = qq|
+
- + - {path}> -{rpw}> +{sessionid}> +
+ +
+
@@ -1291,8 +1383,13 @@ sub create_dataset { - + @@ -1301,7 +1398,7 @@ sub create_dataset { - + @@ -1311,14 +1408,36 @@ sub create_dataset { - - + + + + + +
 
|.$locale->text('Existing Datasets').qq|$dbsources +|; + map { print "[ $_ ] " } @dbsources; + + print qq| +
|.$locale->text('Multibyte Encoding').qq|
|.$locale->text('Create Chart of Accounts').qq|@charts|.$locale->text('Create Chart of Accounts').qq| + +|; + while (@charts) { + print qq| + +|; + + map { print "\n" } (0 .. 2); + + print qq| + +|; + + splice @charts, 0, 3; + } + + print qq| +
$charts[$_]
+
+
+
- -


-
{dbdriver}> {dbuser}> {dbhost}> @@ -1326,22 +1445,19 @@ sub create_dataset { {dbpasswd}> {dbdefault}> - + - {path}> -{rpw}> +{sessionid}> +
- - - |; @@ -1357,6 +1473,7 @@ sub dbcreate { $form->{title} = "SQL-Ledger ".$locale->text('Accounting')." ".$locale->text('Database Administration')." / ".$locale->text('Create Dataset'); + $form->{login} = "root login"; $form->header; print qq| @@ -1372,9 +1489,8 @@ sub dbcreate { .qq| - - +{sessionid}> @@ -1393,7 +1509,7 @@ sub delete_dataset { if (@dbsources = User->dbsources_unused(\%$form, $memberfile)) { foreach $item (sort @dbsources) { - $dbsources .= qq| $item\n
|; + $dbsources .= qq| $item |; } } else { $form->error($locale->text('Nothing to delete!')); @@ -1401,18 +1517,17 @@ sub delete_dataset { $form->{title} = "SQL-Ledger ".$locale->text('Accounting')." ".$locale->text('Database Administration')." / ".$locale->text('Delete Dataset'); + $form->{login} = "root login"; $form->header; print qq| - -

$form->{title}

{script}> - +
@@ -1424,9 +1539,7 @@ sub delete_dataset { @@ -1449,11 +1564,6 @@ sub delete_dataset { -

|.$locale->text('Select a Dataset to delete and press "Continue"') - -.qq| - - |; @@ -1471,6 +1581,7 @@ sub dbdelete { $form->{title} = "SQL-Ledger ".$locale->text('Accounting')." ".$locale->text('Database Administration')." / ".$locale->text('Delete Dataset'); + $form->{login} = "root login"; $form->header; print qq| @@ -1486,9 +1597,8 @@ $form->{db} |.$locale->text('successfully deleted!') .qq| - - +{sessionid}> @@ -1502,3 +1612,27 @@ $form->{db} |.$locale->text('successfully deleted!') } + +sub unlock_system { + + unlink "$userspath/nologin"; + + $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"; + + $form->redirect($locale->text('Lockfile removed!')); + +} + + +sub lock_system { + + open(FH, ">$userspath/nologin") or $form->error($locale->text('Cannot create Lock!')); + close(FH); + + $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"; + + $form->redirect($locale->text('Lockfile created!')); + +} + +

|.$locale->text('The following Datasets are not in use and can be deleted').qq|
- -
-
+

{dbdriver}> {dbuser}> {dbhost}> @@ -1434,14 +1547,16 @@ sub delete_dataset { {dbpasswd}> {dbdefault}> - + - - +{sessionid}> +


+ +