diff options
-rw-r--r-- | classes/article.php | 2 | ||||
-rwxr-xr-x | classes/feeds.php | 12 | ||||
-rw-r--r-- | classes/pluginhost.php | 1 | ||||
-rwxr-xr-x | classes/pref/feeds.php | 20 | ||||
-rw-r--r-- | classes/ttrssmailer.php | 5 | ||||
-rw-r--r-- | config.php-dist | 5 | ||||
-rw-r--r-- | css/tt-rss.css | 6 | ||||
-rw-r--r-- | include/crypt.php | 15 | ||||
-rwxr-xr-x | include/functions.php | 9 | ||||
-rw-r--r-- | include/rssfuncs.php | 4 | ||||
-rw-r--r-- | index.php | 11 | ||||
-rwxr-xr-x | install/index.php | 8 | ||||
-rw-r--r-- | js/tt-rss.js | 8 | ||||
-rw-r--r-- | plugins/mail/init.php | 3 | ||||
-rw-r--r-- | plugins/toggle_sidebar/application_side_list.png | bin | 0 -> 510 bytes | |||
-rw-r--r-- | plugins/toggle_sidebar/init.php | 34 | ||||
-rwxr-xr-x | update.php | 34 |
17 files changed, 108 insertions, 69 deletions
diff --git a/classes/article.php b/classes/article.php index 9a7c68707..46e9bb797 100644 --- a/classes/article.php +++ b/classes/article.php @@ -209,7 +209,7 @@ class Article extends Handler_Protected { print "<table width='100%'><tr><td>"; print "<textarea dojoType=\"dijit.form.SimpleTextarea\" rows='4' - style='font-size : 12px; width : 98%' id=\"tags_str\" + style='height : 100px; font-size : 12px; width : 98%' id=\"tags_str\" name='tags_str'>$tags_str</textarea> <div class=\"autocomplete\" id=\"tags_choices\" style=\"display:none\"></div>"; diff --git a/classes/feeds.php b/classes/feeds.php index afbeb249b..8f101e5cb 100755 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -86,17 +86,23 @@ class Feeds extends Handler_Protected { $reply .= "<span class=\"main\">"; $reply .= "<span id='selected_prompt'></span>"; - $reply .= "<span class=\"sel_links\"> + /*$reply .= "<span class=\"sel_links\"> <a href=\"#\" onclick=\"$sel_all_link\">".__('All')."</a>, <a href=\"#\" onclick=\"$sel_unread_link\">".__('Unread')."</a>, <a href=\"#\" onclick=\"$sel_inv_link\">".__('Invert')."</a>, <a href=\"#\" onclick=\"$sel_none_link\">".__('None')."</a></li>"; - $reply .= "</span> "; + $reply .= "</span> "; */ $reply .= "<select dojoType=\"dijit.form.Select\" onchange=\"headlineActionsChange(this)\">"; - $reply .= "<option value=\"false\">".__('More...')."</option>"; + + $reply .= "<option value=\"0\" disabled='1'>".__('Select...')."</option>"; + + $reply .= "<option value=\"$sel_all_link\">".__('All')."</option>"; + $reply .= "<option value=\"$sel_unread_link\">".__('Unread')."</option>"; + $reply .= "<option value=\"$sel_inv_link\">".__('Invert')."</option>"; + $reply .= "<option value=\"$sel_none_link\">".__('None')."</option>"; $reply .= "<option value=\"0\" disabled=\"1\">".__('Selection toggle:')."</option>"; diff --git a/classes/pluginhost.php b/classes/pluginhost.php index 675e0af17..82565257a 100644 --- a/classes/pluginhost.php +++ b/classes/pluginhost.php @@ -50,6 +50,7 @@ class PluginHost { const HOOK_RENDER_ENCLOSURE = 29; const HOOK_ARTICLE_FILTER_ACTION = 30; const HOOK_ARTICLE_EXPORT_FEED = 31; + const HOOK_MAIN_TOOLBAR_BUTTON = 32; const KIND_ALL = 1; const KIND_SYSTEM = 2; diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index 2803d68ec..6795236d5 100755 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -646,7 +646,7 @@ class Pref_Feeds extends Handler_Protected { $auth_pass = $this->dbh->fetch_result($result, 0, "auth_pass"); - if ($auth_pass_encrypted) { + if ($auth_pass_encrypted && function_exists("mcrypt_decrypt")) { require_once "crypt.php"; $auth_pass = decrypt_string($auth_pass); } @@ -983,14 +983,7 @@ class Pref_Feeds extends Handler_Protected { $feed_language = $this->dbh->escape_string(trim($_POST["feed_language"])); - if (strlen(FEED_CRYPT_KEY) > 0) { - require_once "crypt.php"; - $auth_pass = substr(encrypt_string($auth_pass), 0, 250); - $auth_pass_encrypted = 'true'; - } else { - $auth_pass_encrypted = 'false'; - } - + $auth_pass_encrypted = 'false'; $auth_pass = $this->dbh->escape_string($auth_pass); if (get_pref('ENABLE_FEED_CATS')) { @@ -1889,14 +1882,7 @@ class Pref_Feeds extends Handler_Protected { "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed' AND owner_uid = ".$_SESSION["uid"]); - if (strlen(FEED_CRYPT_KEY) > 0) { - require_once "crypt.php"; - $pass = substr(encrypt_string($pass), 0, 250); - $auth_pass_encrypted = 'true'; - } else { - $auth_pass_encrypted = 'false'; - } - + $auth_pass_encrypted = 'false'; $pass = $this->dbh->escape_string($pass); if ($this->dbh->num_rows($result) == 0) { diff --git a/classes/ttrssmailer.php b/classes/ttrssmailer.php index 64e8a59a7..4029bbbdb 100644 --- a/classes/ttrssmailer.php +++ b/classes/ttrssmailer.php @@ -7,6 +7,7 @@ *
*/
require_once 'lib/phpmailer/class.phpmailer.php';
+require_once 'lib/phpmailer/class.smtp.php';
require_once "config.php";
class ttrssMailer extends PHPMailer {
@@ -41,8 +42,8 @@ class ttrssMailer extends PHPMailer { $this->Username = SMTP_LOGIN;
$this->Password = SMTP_PASSWORD;
}
- if(SMTP_SECURE) - $this->SMTPSecure = SMTP_SECURE; + if(SMTP_SECURE)
+ $this->SMTPSecure = SMTP_SECURE;
}
/* @brief a simple mail function to send email using the defaults
* This will send an HTML email using the configured defaults
diff --git a/config.php-dist b/config.php-dist index 2eaaab617..c86af943b 100644 --- a/config.php-dist +++ b/config.php-dist @@ -25,6 +25,11 @@ // including PUSH, bookmarklets and browser integration will not work properly. define('FEED_CRYPT_KEY', ''); + // WARNING: mcrypt is deprecated in php 7.1. This directive exists for backwards + // compatibility with existing installs, new passwords are NOT going to be encrypted. + // Use update.php --decrypt-feeds to decrypt existing passwords in the database while + // mcrypt is still available. + // Key used for encryption of passwords for password-protected feeds // in the database. A string of 24 random characters. If left blank, encryption // is not used. Requires mcrypt functions. diff --git a/css/tt-rss.css b/css/tt-rss.css index e1dc64369..5003816b2 100644 --- a/css/tt-rss.css +++ b/css/tt-rss.css @@ -419,6 +419,12 @@ div.prefHelp { margin-right : 4px; } +@media (max-width: 992px) { + #main-toolbar #selected_prompt { + display : none; + } +} + span.contentPreview { color : #999; font-weight : normal; diff --git a/include/crypt.php b/include/crypt.php index f06483ef1..217ad3b0f 100644 --- a/include/crypt.php +++ b/include/crypt.php @@ -18,19 +18,4 @@ return false; } - - function encrypt_string($str) { - $key = hash('SHA256', FEED_CRYPT_KEY, true); - - $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, - MCRYPT_MODE_CBC), MCRYPT_RAND); - - $encstr = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, - MCRYPT_MODE_CBC, $iv); - - $iv_base64 = base64_encode($iv); - $encstr_base64 = base64_encode($encstr); - - return "$iv_base64:$encstr_base64"; - } ?> diff --git a/include/functions.php b/include/functions.php index f10c3a00b..ce7627d5a 100755 --- a/include/functions.php +++ b/include/functions.php @@ -1749,14 +1749,7 @@ "SELECT id FROM ttrss_feeds WHERE feed_url = '$url' AND owner_uid = ".$_SESSION["uid"]); - if (strlen(FEED_CRYPT_KEY) > 0) { - require_once "crypt.php"; - $auth_pass = substr(encrypt_string($auth_pass), 0, 250); - $auth_pass_encrypted = 'true'; - } else { - $auth_pass_encrypted = 'false'; - } - + $auth_pass_encrypted = 'false'; $auth_pass = db_escape_string($auth_pass); if (db_num_rows($result) == 0) { diff --git a/include/rssfuncs.php b/include/rssfuncs.php index e667df41f..6c342971f 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -254,7 +254,7 @@ $auth_login = db_fetch_result($result, 0, "auth_login"); $auth_pass = db_fetch_result($result, 0, "auth_pass"); - if ($auth_pass_encrypted) { + if ($auth_pass_encrypted && function_exists("mcrypt_decrypt")) { require_once "crypt.php"; $auth_pass = decrypt_string($auth_pass); } @@ -347,7 +347,7 @@ $auth_login = db_fetch_result($result, 0, "auth_login"); $auth_pass = db_fetch_result($result, 0, "auth_pass"); - if ($auth_pass_encrypted) { + if ($auth_pass_encrypted && function_exists("mcrypt_decrypt")) { require_once "crypt.php"; $auth_pass = decrypt_string($auth_pass); } @@ -171,17 +171,18 @@ <div id="toolbar" dojoType="dijit.layout.ContentPane" region="top"> <div id="main-toolbar" dojoType="dijit.Toolbar"> + <?php + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_MAIN_TOOLBAR_BUTTON) as $p) { + echo $p->hook_main_toolbar_button(); + } + ?> + <form id="headlines-toolbar" action="" onsubmit='return false'> </form> <form id="main_toolbar_form" action="" onsubmit='return false'> - <button dojoType="dijit.form.Button" id="collapse_feeds_btn" - onclick="collapse_feedlist()" - title="<?php echo __('Collapse feedlist') ?>" style="display : none"> - <<</button> - <select name="view_mode" title="<?php echo __('Show articles') ?>" onchange="viewModeChanged()" dojoType="dijit.form.Select"> diff --git a/install/index.php b/install/index.php index d9e370ea5..7da311ffb 100755 --- a/install/index.php +++ b/install/index.php @@ -128,12 +128,6 @@ $finished = false; - if (function_exists("mcrypt_decrypt")) { - $crypt_key = make_password(24); - } else { - $crypt_key = ""; - } - foreach ($data as $line) { if (preg_match("/define\('DB_TYPE'/", $line)) { $rv .= "\tdefine('DB_TYPE', '$DB_TYPE');\n"; @@ -149,8 +143,6 @@ $rv .= "\tdefine('DB_PORT', '$DB_PORT');\n"; } else if (preg_match("/define\('SELF_URL_PATH'/", $line)) { $rv .= "\tdefine('SELF_URL_PATH', '$SELF_URL_PATH');\n"; - } else if (preg_match("/define\('FEED_CRYPT_KEY'/", $line)) { - $rv .= "\tdefine('FEED_CRYPT_KEY', '$crypt_key');\n"; } else if (!$finished) { $rv .= "$line\n"; } diff --git a/js/tt-rss.js b/js/tt-rss.js index 1b84025d1..068ad0849 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -822,13 +822,7 @@ function parse_runtime_info(data) { function collapse_feedlist() { try { - if (!Element.visible('feeds-holder')) { - Element.show('feeds-holder'); - $("collapse_feeds_btn").innerHTML = "<<"; - } else { - Element.hide('feeds-holder'); - $("collapse_feeds_btn").innerHTML = ">>"; - } + Element.toggle("feeds-holder"); dijit.byId("main").resize(); diff --git a/plugins/mail/init.php b/plugins/mail/init.php index eba4a5ce9..acd89de47 100644 --- a/plugins/mail/init.php +++ b/plugins/mail/init.php @@ -162,7 +162,8 @@ class Mail extends Plugin { print "</td></tr>"; - print "<tr><td colspan='2'><textarea dojoType=\"dijit.form.SimpleTextarea\" style='font-size : 12px; width : 98%' rows=\"20\" + print "<tr><td colspan='2'><textarea dojoType=\"dijit.form.SimpleTextarea\" + style='height : 200px; font-size : 12px; width : 98%' rows=\"20\" name='content'>$content</textarea>"; print "</td></tr></table>"; diff --git a/plugins/toggle_sidebar/application_side_list.png b/plugins/toggle_sidebar/application_side_list.png Binary files differnew file mode 100644 index 000000000..248eaf1ac --- /dev/null +++ b/plugins/toggle_sidebar/application_side_list.png diff --git a/plugins/toggle_sidebar/init.php b/plugins/toggle_sidebar/init.php new file mode 100644 index 000000000..b2b0821a5 --- /dev/null +++ b/plugins/toggle_sidebar/init.php @@ -0,0 +1,34 @@ +<?php +class Toggle_Sidebar extends Plugin { + + private $host; + + function about() { + return array(1.0, + "Adds a main toolbar button to toggle sidebar", + "fox"); + } + + function init($host) { + $this->host = $host; + + $host->add_hook($host::HOOK_MAIN_TOOLBAR_BUTTON, $this); + } + + function hook_main_toolbar_button() { + ?> + + <button dojoType="dijit.form.Button" onclick="collapse_feedlist()"> + <img src="plugins/toggle_sidebar/application_side_list.png" + title="<?php echo __('Collapse feedlist') ?>"> + </button> + + <?php + } + + function api_version() { + return 2; + } + +} +?> diff --git a/update.php b/update.php index f17436185..821d25bce 100755 --- a/update.php +++ b/update.php @@ -38,6 +38,7 @@ "debug-feed:", "force-refetch", "force-rehash", + "decrypt-feeds", "help"); foreach (PluginHost::getInstance()->get_commands() as $command => $data) { @@ -91,6 +92,7 @@ print " --debug-feed N - perform debug update of feed N\n"; print " --force-refetch - debug update: force refetch feed data\n"; print " --force-rehash - debug update: force rehash articles\n"; + print " --decrypt-feeds - decrypt feed passwords\n"; print " --help - show this help\n"; print "Plugin options:\n"; @@ -402,8 +404,40 @@ update_rss_feed($feed); } + if (isset($options["decrypt-feeds"])) { + $result = db_query("SELECT id, auth_pass FROM ttrss_feeds WHERE auth_pass_encrypted = true"); + + if (!function_exists("mcrypt_decrypt")) { + _debug("mcrypt functions not available."); + return; + } + + require_once "crypt.php"; + + $total = 0; + + db_query("BEGIN"); + + while ($line = db_fetch_assoc($result)) { + _debug("processing feed id " . $line["id"]); + + $auth_pass = db_escape_string(decrypt_string($line["auth_pass"])); + + db_query("UPDATE ttrss_feeds SET auth_pass_encrypted = false, auth_pass = '$auth_pass' + WHERE id = " . $line["id"]); + + ++$total; + } + + db_query("COMMIT"); + + _debug("$total feeds processed."); + } + PluginHost::getInstance()->run_commands($options); if (file_exists(LOCK_DIRECTORY . "/$lock_filename")) + if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') + fclose($lock_handle); unlink(LOCK_DIRECTORY . "/$lock_filename"); ?> |