Add display of version numbers next to plugin listings
[squirrelmail.git] / config / conf.pl
index 54e0ea5db1c9d0e8893d4ddd0a5f723ef7d56ad0..0f3c4c3fa6cb42e7f28cae9b4f6f420a397870a7 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/env perl
 # conf.pl
 #
-# Copyright (c) 1999-2006 The SquirrelMail Project Team
+# Copyright (c) 1999-2007 The SquirrelMail Project Team
 # Licensed under the GNU GPL. For full terms see COPYING.
 #
 # A simple configure script to configure SquirrelMail
@@ -471,6 +471,7 @@ $smtp_sitewide_pass = ''               if ( !$smtp_sitewide_pass );
 $icon_theme_def = ''                   if ( !$icon_theme_def );
 $disable_plugins = 'false'             if ( !$disable_plugins );
 $disable_plugins_user = ''             if ( !$disable_plugins_user );
+$only_secure_cookies = 'true'          if ( !$only_secure_cookies );
 
 if ( $ARGV[0] eq '--install-plugin' ) {
     print "Activating plugin " . $ARGV[1] . "\n";
@@ -503,6 +504,22 @@ if ( $ARGV[0] eq '--install-plugin' ) {
     exit(0);
 }
 
+
+
+####################################################################################
+
+# used in multiple places, define once
+$list_supported_imap_servers = 
+    "    bincimap    = Binc IMAP server\n" .
+    "    courier     = Courier IMAP server\n" .
+    "    cyrus       = Cyrus IMAP server\n" .
+    "    dovecot     = Dovecot Secure IMAP server\n" .
+    "    exchange    = Microsoft Exchange IMAP server\n" .
+    "    hmailserver = hMailServer\n" .
+    "    macosx      = Mac OS X Mailserver\n" .
+    "    mercury32   = Mercury/32\n" .
+    "    uw          = University of Washington's IMAP server\n";
+
 #####################################################################################
 if ( $config_use_color == 1 ) {
     $WHT = "\x1B[37;1m";
@@ -641,24 +658,25 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) {
         print "R   Return to Main Menu\n";
     } elsif ( $menu == 4 ) {
         print $WHT. "General Options\n" . $NRM;
-        print "1.  Data Directory              : $WHT$data_dir$NRM\n";
-        print "2.  Attachment Directory        : $WHT$attachment_dir$NRM\n";
-        print "3.  Directory Hash Level        : $WHT$dir_hash_level$NRM\n";
-        print "4.  Default Left Size           : $WHT$default_left_size$NRM\n";
-        print "5.  Usernames in Lowercase      : $WHT$force_username_lowercase$NRM\n";
-        print "6.  Allow use of priority       : $WHT$default_use_priority$NRM\n";
-        print "7.  Hide SM attributions        : $WHT$hide_sm_attributions$NRM\n";
-        print "8.  Allow use of receipts       : $WHT$default_use_mdn$NRM\n";
-        print "9.  Allow editing of identity   : $WHT$edit_identity$NRM\n";
-        print "    Allow editing of name       : $WHT$edit_name$NRM\n";
-        print "    Remove username from header : $WHT$hide_auth_header$NRM\n";
-        print "10. Disable server thread sort  : $WHT$disable_thread_sort$NRM\n";
-        print "11. Disable server-side sorting : $WHT$disable_server_sort$NRM\n";
-        print "12. Allow server charset search : $WHT$allow_charset_search$NRM\n";
-        print "13. Allow advanced search       : $WHT$allow_advanced_search$NRM\n";
-        print "14. PHP session name            : $WHT$session_name$NRM\n";
-        print "15. Time zone configuration     : $WHT$time_zone_type$NRM\n";
-        print "16. Location base               : $WHT$config_location_base$NRM\n";
+        print "1.  Data Directory               : $WHT$data_dir$NRM\n";
+        print "2.  Attachment Directory         : $WHT$attachment_dir$NRM\n";
+        print "3.  Directory Hash Level         : $WHT$dir_hash_level$NRM\n";
+        print "4.  Default Left Size            : $WHT$default_left_size$NRM\n";
+        print "5.  Usernames in Lowercase       : $WHT$force_username_lowercase$NRM\n";
+        print "6.  Allow use of priority        : $WHT$default_use_priority$NRM\n";
+        print "7.  Hide SM attributions         : $WHT$hide_sm_attributions$NRM\n";
+        print "8.  Allow use of receipts        : $WHT$default_use_mdn$NRM\n";
+        print "9.  Allow editing of identity    : $WHT$edit_identity$NRM\n";
+        print "    Allow editing of name        : $WHT$edit_name$NRM\n";
+        print "    Remove username from header  : $WHT$hide_auth_header$NRM\n";
+        print "10. Disable server thread sort   : $WHT$disable_thread_sort$NRM\n";
+        print "11. Disable server-side sorting  : $WHT$disable_server_sort$NRM\n";
+        print "12. Allow server charset search  : $WHT$allow_charset_search$NRM\n";
+        print "13. Allow advanced search        : $WHT$allow_advanced_search$NRM\n";
+        print "14. PHP session name             : $WHT$session_name$NRM\n";
+        print "15. Time zone configuration      : $WHT$time_zone_type$NRM\n";
+        print "16. Location base                : $WHT$config_location_base$NRM\n";
+        print "17. Only secure cookies if poss. : $WHT$only_secure_cookies$NRM\n";
         print "\n";
         print "R   Return to Main Menu\n";
     } elsif ( $menu == 5 ) {
@@ -705,7 +723,7 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) {
         $num = 0;
         for ( $count = 0 ; $count <= $#plugins ; $count++ ) {
             $num = $count + 1;
-            print "    $num. $plugins[$count]\n";
+            print "    $num. $plugins[$count]" . get_plugin_version($plugins[$count]) . "\n";
         }
         print "\n  Available Plugins:\n";
         opendir( DIR, "../plugins" );
@@ -729,7 +747,7 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) {
 
         for ( $i = 0 ; $i <= $#unused_plugins ; $i++ ) {
             $num = $num + 1;
-            print "    $num. $unused_plugins[$i]\n";
+            print "    $num. $unused_plugins[$i]" . get_plugin_version($unused_plugins[$i]) . "\n";
         }
         closedir DIR;
 
@@ -904,6 +922,7 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) {
             elsif ( $command == 14 ) { $session_name             = command317(); }
             elsif ( $command == 15 ) { $time_zone_type           = command318(); }
             elsif ( $command == 16 ) { $config_location_base     = command_config_location_base(); }
+            elsif ( $command == 17 ) { $only_secure_cookies = command319(); }
         } elsif ( $menu == 5 ) {
             if ( $command == 1 )     { $use_icons      = commandB3(); }
 #            elsif ( $command == 3 )  { $icon_theme_def = commandB7(); }
@@ -1271,14 +1290,7 @@ sub command19 {
     print "these servers.  If you would like to use them, please select your\n";
     print "IMAP server.  If you do not wish to use these work-arounds, you can\n";
     print "set this to \"other\", and none will be used.\n";
-    print "    courier     = Courier IMAP server\n";
-    print "    cyrus       = Cyrus IMAP server\n";
-    print "    dovecot     = Dovecot Secure IMAP server\n";
-    print "    exchange    = Microsoft Exchange IMAP server\n";
-    print "    hmailserver = hMailServer\n";
-    print "    macosx      = Mac OS X Mailserver\n";
-    print "    mercury32   = Mercury Mail Transport System\n";
-    print "    uw          = University of Washington's IMAP server\n";
+    print $list_supported_imap_servers;
     print "\n";
     print "    other       = Not one of the above servers\n";
     print "\n";
@@ -2614,6 +2626,32 @@ sub command_config_location_base {
     return $config_location_base;
 }
 
+# only_secure_cookies (since 1.5.2)
+sub command319 {
+    print "This option allows you to specify that if a user session is initiated\n";
+    print "under a secure (HTTPS, SSL-encrypted) connection, the cookies given to\n";
+    print "the browser will ONLY be transmitted via a secure connection henceforth.\n\n";
+    print "Generally this is a Good Thing, and should NOT be disabled.  However,\n";
+    print "if you intend to use the Secure Login or Show SSL Link plugins to\n";
+    print "encrypt the user login, but not the rest of the SquirrelMail session,\n";
+    print "this can be turned off.  Think twice before doing so.\n";
+    print "\n";
+
+    if ( lc($only_secure_cookies) eq 'true' ) {
+        $default_value = "y";
+    } else {
+        $default_value = "n";
+    }
+    print "Transmit cookies only on secure connection when available? (y/n) [$WHT$default_value$NRM]: $WHT";
+    $only_secure_cookies = <STDIN>;
+    if ( ( $only_secure_cookies =~ /^y\n/i ) || ( ( $only_secure_cookies =~ /^\n/ ) && ( $default_value eq "y" ) ) ) {
+        $only_secure_cookies = 'true';
+    } else {
+        $only_secure_cookies = 'false';
+    }
+    return $only_secure_cookies;
+}
+
 
 sub command_userThemes {
     print "\nDefine the user themes that you wish to use.  If you have added\n";
@@ -4605,17 +4643,19 @@ sub save_data {
         print CF "\$no_list_for_subscribe = $no_list_for_subscribe;\n";
 
         # string
-        print CF "\$smtp_auth_mech = '$smtp_auth_mech';\n";
-        print CF "\$smtp_sitewide_user = '". quote_single($smtp_sitewide_user) ."';\n";
-        print CF "\$smtp_sitewide_pass = '". quote_single($smtp_sitewide_pass) ."';\n";
+        print CF "\$smtp_auth_mech        = '$smtp_auth_mech';\n";
+        print CF "\$smtp_sitewide_user    = '". quote_single($smtp_sitewide_user) ."';\n";
+        print CF "\$smtp_sitewide_pass    = '". quote_single($smtp_sitewide_pass) ."';\n";
         # string
-        print CF "\$imap_auth_mech = '$imap_auth_mech';\n";
+        print CF "\$imap_auth_mech        = '$imap_auth_mech';\n";
         # boolean
-        print CF "\$use_imap_tls = $use_imap_tls;\n";
+        print CF "\$use_imap_tls          = $use_imap_tls;\n";
         # boolean
-        print CF "\$use_smtp_tls = $use_smtp_tls;\n";
+        print CF "\$use_smtp_tls          = $use_smtp_tls;\n";
         # string
-        print CF "\$session_name = '$session_name';\n";
+        print CF "\$session_name          = '$session_name';\n";
+        # boolean
+        print CF "\$only_secure_cookies   = $only_secure_cookies;\n";
 
         print CF "\n";
 
@@ -4667,15 +4707,7 @@ sub set_defaults {
     $continue = 0;
     while ( $continue != 1 ) {
         print "Please select your IMAP server:\n";
-        print "    bincimap    = Binc IMAP server\n";
-        print "    courier     = Courier IMAP server\n";
-        print "    cyrus       = Cyrus IMAP server\n";
-        print "    dovecot     = Dovecot Secure IMAP server\n";
-        print "    exchange    = Microsoft Exchange IMAP server\n";
-        print "    hmailserver = hMailServer\n";
-        print "    macosx      = Mac OS X Mailserver\n";
-        print "    mercury32   = Mercury/32\n";
-        print "    uw          = University of Washington's IMAP server\n";
+        print $list_supported_imap_servers;
         print "\n";
         print "    quit        = Do not change anything\n";
         print "\n";
@@ -5072,6 +5104,68 @@ sub quote_single($) {
     return $string;
 }
 
+# determine a plugin's version number
+#
+# parses the setup.php file, looking for the
+# version string in the <plugin>_info() or the
+# <plugin>_version functions.
+#
+sub get_plugin_version() {
+
+    my $plugin_name = shift(@_);
+
+    $setup_file = '../plugins/' . $plugin_name . '/setup.php';
+    if ( -e "$setup_file" ) {
+        # Make sure that file is readable
+        if (! -r "$setup_file") {
+            print "\n";
+            print "WARNING:\n";
+            print "The file \"$setup_file\" was found, but you don't\n";
+            print "have rights to read it.  The plugin \"";
+            print $plugin_name . "\" may not work correctly until you fix this.\n";
+            print "\nPress enter to continue";
+            $ctu = <STDIN>;
+            print "\n";
+            next;
+        }
+
+        $version = ' ';
+# FIXME: grep the file instead of reading it into memory?
+        $whole_file = '';
+        open( FILE, "$setup_file" );
+        while ( $line = <FILE> ) {
+            $whole_file .= $line;
+        }
+        close(FILE);
+
+        # ideally, there is a version in the <plugin>_info function...
+        #
+        if ($whole_file =~ /('version'\s*=>\s*['"](.*?)['"])/) {
+            $version .= $2;
+
+        # this assumes there is only one function that returns 
+        # a static string in the setup file
+        #
+        } elsif ($whole_file =~ /(return\s*['"](.*?)['"])/) {
+            $version .= $2;
+        }
+
+        return $version;
+
+        } else {
+            print "\n";
+            print "WARNING:\n";
+            print "The file \"$setup_file\" was not found.\n";
+            print "The plugin \"" . $plugin_name;
+            print "\" may not work correctly until you fix this.\n";
+            print "\nPress enter to continue";
+            $ctu = <STDIN>;
+            print "\n";
+            next;
+        }
+
+}
+
 # parses the setup.php files for all activated plugins and
 # builds static plugin hooks array so we don't have to load
 # ALL plugins are runtime and build the hook array on every