]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Support SSL for some, all, or no pages
authorEvan Prodromou <evan@controlyourself.ca>
Thu, 26 Mar 2009 19:03:59 +0000 (15:03 -0400)
committerEvan Prodromou <evan@controlyourself.ca>
Mon, 30 Mar 2009 21:12:02 +0000 (17:12 -0400)
Support SSL URLs either for all pages; no pages; or for sensitive
pages accepting passwords, like login, registration, API, and others.

README
config.php.sample
lib/common.php
lib/util.php

diff --git a/README b/README
index 73cb95367cd4b07e6a333f7209b986dce25cf5e6..70815c1412f2be127de83e19337309de45906d83 100644 (file)
--- a/README
+++ b/README
@@ -925,6 +925,16 @@ dupelimit: Time in which it's not OK for the same person to post the
            same notice; default = 60 seconds.
 logo: URL of an image file to use as the logo for the site. Overrides
       the logo in the theme, if any.
+ssl: Whether to use SSL and https:// URLs for some or all pages.
+     Possible values are 'always' (use it for all pages), 'never'
+     (don't use it for any pages), or 'sometimes' (use it for
+     sensitive pages that include passwords like login and registration,
+     but not for regular pages). Default to 'never'.
+sslserver: use an alternate server name for SSL URLs, like
+           'secure.example.org'. You should be careful to set cookie
+           parameters correctly so that both the SSL server and the
+           "normal" server can access the session cookie and
+           preferably other cookies as well.
 
 db
 --
index 529e86f15f5bdc9ce83c3f084dea66263dab0b8b..d62a54fe74a14ade40f6e11023030816683ce835 100644 (file)
@@ -174,3 +174,13 @@ $config['sphinx']['port'] = 3312;
 #http://taguri.org/ Examples:
 #$config['integration']['taguri'] = 'example.net,2008';
 #$config['integration']['taguri'] = 'admin@example.net,2009-03-09'
+
+#Don't use SSL
+#$config['site']['ssl'] = 'never';
+#Use SSL only for sensitive pages (like login, password change)
+#$config['site']['ssl'] = 'sometimes';
+#Use SSL for all pages
+#$config['site']['ssl'] = 'always';
+
+#Use a different hostname for SSL-encrypted pages
+#$config['site']['sslserver'] = 'secure.example.org';
index caad705a42276d8cfbd5fa6ae0b8fbb74e8aace4..c2037c3ad6b0e29c189e404a732c079a3689f542 100644 (file)
@@ -87,6 +87,8 @@ $config =
               'closed' => false,
               'inviteonly' => false,
               'private' => false,
+              'ssl' => 'never',
+              'sslserver' => null,
               'dupelimit' => 60), # default for same person saying the same thing
         'syslog' =>
         array('appname' => 'laconica', # for syslog
index ef73adc36415bc19b93be7ef6d6133c628ee2625..fdcae0aca0e457fd230a9e5dd7adfd8c33394b51 100644 (file)
@@ -721,25 +721,46 @@ function common_relative_profile($sender, $nickname, $dt=null)
 
 function common_local_url($action, $args=null, $params=null, $fragment=null)
 {
+    static $sensitive = array('login', 'register', 'passwordsettings',
+                              'twittersettings', 'finishopenidlogin',
+                              'api');
+
     $r = Router::get();
     $path = $r->build($action, $args, $params, $fragment);
 
+    $ssl = in_array($action, $sensitive);
+
     if (common_config('site','fancy')) {
-        $url = common_path(mb_substr($path, 1));
+        $url = common_path(mb_substr($path, 1), $ssl);
     } else {
         if (mb_strpos($path, '/index.php') === 0) {
-            $url = common_path(mb_substr($path, 1));
+            $url = common_path(mb_substr($path, 1), $ssl);
         } else {
-            $url = common_path('index.php'.$path);
+            $url = common_path('index.php'.$path, $ssl);
         }
     }
     return $url;
 }
 
-function common_path($relative)
+function common_path($relative, $ssl=false)
 {
     $pathpart = (common_config('site', 'path')) ? common_config('site', 'path')."/" : '';
-    return "http://".common_config('site', 'server').'/'.$pathpart.$relative;
+
+    if (($ssl && (common_config('site', 'ssl') === 'sometimes'))
+        || common_config('site', 'ssl') === 'always') {
+        $proto = 'https';
+        if (is_string(common_config('site', 'sslserver')) &&
+            mb_strlen(common_config('site', 'sslserver')) > 0) {
+            $serverpart = common_config('site', 'sslserver');
+        } else {
+            $serverpart = common_config('site', 'server');
+        }
+    } else {
+        $proto = 'http';
+        $serverpart = common_config('site', 'server');
+    }
+
+    return $proto.'://'.$serverpart.'/'.$pathpart.$relative;
 }
 
 function common_date_string($dt)