Initial add of specialized Config modules. Some parts are not fully implemented.
[BackupPC.git] / lib / BackupPC / Config.pm
diff --git a/lib/BackupPC/Config.pm b/lib/BackupPC/Config.pm
new file mode 100644 (file)
index 0000000..26ccead
--- /dev/null
@@ -0,0 +1,358 @@
+package BackupPC::Config;
+
+use warnings;
+use Data::Dumper;
+
+our %ConfigDef;
+
+# this currently isn't used (or completed)
+sub CheckConfigInfo
+{
+    my($self) = @_;
+    my $errstr = '';
+    
+    my($attr, $val, $def, $ref);
+    
+    foreach $attr (sort keys %{ $self->{Conf} }) {
+        print AA "Checking $attr...";
+        $val = $self->{Conf}->{$attr};
+        $ref = ref $val;
+        $def = $ConfigDef{$attr};
+        
+        if (!defined $def) {
+            $errstr .= "Unknown attribute $attr; ";
+        } elsif ($def->{struct} eq 'SCALAR' && $ref) {
+            $errstr .= "$attr expected to be SCALAR but is $ref; ";
+        } elsif ($def->{struct} =~ /^ARRAY(OFHASH)$/ && $ref && $ref ne 'ARRAY') {
+            $errstr .= "$attr expected to be ARRAY but is $ref; ";
+        } elsif ($def->{struct} =~ /^HASH(OFARRAY)$/ && $ref && $ref ne 'HASH') {
+            $errstr .= "$attr expected to be HASH but is $ref; ";
+        # still working out this logic..
+        #} elsif (defined $val && !$ref) {
+        #    # if we got a scalar but were expecting a reference, fix it
+        #    
+        #    if($def->{struct} eq 'ARRAY') {
+        #        $val = [ $val ];
+        #    } elsif ($def->{struct} eq 'HASH') {
+        #        $val = { $val };
+        #    } elsif ($def->{struct} eq 'ARRAYOFHASH') {
+        #        $val = [ { $val } ];
+        #    } elsif ($def->{struct} eq 'HASHOFARRAY') {
+        #        $val = { [ $val ] };
+        #    }
+            
+        }
+    }
+    
+    return $errstr;
+}
+
+sub TopDir
+{
+    my($self) = @_;
+    return $self->{TopDir};
+}
+
+sub BinDir
+{
+    my($self) = @_;
+    return $self->{BinDir};
+}
+
+sub Version
+{
+    my($self) = @_;
+    return $self->{Version};
+}
+
+sub Conf
+{
+    my($self) = @_;
+    return %{$self->{Conf}};
+}
+
+sub ConfigDef
+{
+    my($self) = @_;
+    return \%ConfigDef;
+}
+
+sub Lang
+{
+    my($self) = @_;
+    return $self->{Lang};
+}
+
+sub adminJob
+{
+    return " admin ";
+}
+
+sub trashJob
+{
+    return " trashClean ";
+}
+
+sub timeStamp
+{
+    my($self, $t, $noPad) = @_;
+    my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
+              = localtime($t || time);
+    $year += 1900;
+    $mon++;
+    return "$year/$mon/$mday " . sprintf("%02d:%02d:%02d", $hour, $min, $sec)
+            . ($noPad ? "" : " ");
+}
+
+sub ConnectData {
+    # fallback routine in case no database used
+    return 1;
+
+}
+
+###########################
+
+
+%ConfigDef = (
+    ServerHost                   => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    ServerPort                   => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    ServerMesgSecret             => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    MyPath                       => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    UmaskMode                    => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    WakeupSchedule               => {struct => 'ARRAY',
+                                     type   => 'INT', },
+
+    MaxBackups                   => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    MaxUserBackups               => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    MaxPendingCmds               => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    MaxOldLogFiles               => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    DfPath                       => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    DfMaxUsagePct                => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    TrashCleanSleepSec           => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    DHCPAddressRanges            => {struct => 'ARRAYOFHASH',
+                                     type   => {ipAddrBase => 'STRING',
+                                                first      => 'INT',
+                                                last       => 'INT',}, },
+
+    BackupPCUser                 => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiDir                       => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    InstallDir                   => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    BackupPCUserVerify           => {struct => 'SCALAR',
+                                     type   => 'BOOLEAN', },
+
+    SmbShareName                 => {struct => 'ARRAY',
+                                     type   => 'STRING', },
+
+    SmbShareUserName             => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    SmbSharePasswd               => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    TarShareName                 => {struct => 'ARRAY',
+                                     type   => 'STRING', },
+
+    FullPeriod                   => {struct => 'SCALAR',
+                                     type   => 'FLOAT', },
+
+    IncrPeriod                   => {struct => 'SCALAR',
+                                     type   => 'FLOAT', },
+
+    FullKeepCnt                  => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    FullKeepCntMin               => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    FullAgeMax                   => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    IncrKeepCnt                  => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    IncrKeepCntMin               => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    IncrAgeMax                   => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    IncrFill                     => {struct => 'SCALAR',
+                                     type   => 'BOOLEAN', },
+
+    RestoreInfoKeepCnt           => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    BackupFilesOnly              => {struct => 'HASHOFARRAY',
+                                     type   => 'STRING', },
+
+    BackupFilesExclude           => {struct => 'HASHOFARRAY',
+                                     type   => 'STRING', },
+
+    BlackoutBadPingLimit         => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    BlackoutGoodCnt              => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    BlackoutHourBegin            => {struct => 'SCALAR',
+                                     type   => 'FLOAT', },
+
+    BlackoutHourEnd              => {struct => 'SCALAR',
+                                     type   => 'FLOAT', },
+
+    BlackoutWeekDays             => {struct => 'ARRAY',
+                                     type   => 'INT', },
+
+    XferMethod                   => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    SmbClientPath                => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    SmbClientArgs                => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    TarClientCmd                 => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    TarFullArgs                  => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    TarIncrArgs                  => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    TarClientRestoreCmd          => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    TarClientPath                => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    SshPath                      => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    NmbLookupPath                => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    FixedIPNetBiosNameCheck      => {struct => 'SCALAR',
+                                     type   => 'BOOLEAN', },
+
+    PingPath                     => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    PingArgs                     => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CompressLevel                => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    PingMaxMsec                  => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    SmbClientTimeout             => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    MaxOldPerPCLogFiles          => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    SendmailPath                 => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    EMailNotifyMinDays           => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    EMailFromUserName            => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    EMailAdminUserName           => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    EMailNoBackupEverMesg        => {struct => 'SCALAR',
+                                     type   => 'MEMO', },
+
+    EMailNotifyOldBackupDays     => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    EMailNoBackupRecentMesg      => {struct => 'SCALAR',
+                                     type   => 'MEMO', },
+
+    EMailNotifyOldOutlookDays    => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    EMailOutlookBackupMesg       => {struct => 'SCALAR',
+                                     type   => 'MEMO', },
+
+    CgiAdminUserGroup            => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiAdminUsers                => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    Language                     => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiUserHomePageCheck         => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiUserUrlCreate             => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiDateFormatMMDD            => {struct => 'SCALAR',
+                                     type   => 'BOOLEAN', },
+
+    CgiNavBarAdminAllHosts       => {struct => 'SCALAR',
+                                     type   => 'BOOLEAN', },
+
+    CgiHeaderFontType            => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiHeaderFontSize            => {struct => 'SCALAR',
+                                     type   => 'INT', },
+
+    CgiNavBarBgColor             => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiHeaderBgColor             => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiHeaders                   => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiImageDir                  => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+    CgiImageDirURL               => {struct => 'SCALAR',
+                                     type   => 'STRING', },
+
+);
+
+1;