summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--classes/article.php2
-rwxr-xr-xclasses/feeds.php12
-rw-r--r--classes/pluginhost.php1
-rwxr-xr-xclasses/pref/feeds.php20
-rw-r--r--classes/ttrssmailer.php5
-rw-r--r--config.php-dist5
-rw-r--r--css/tt-rss.css6
-rw-r--r--include/crypt.php15
-rwxr-xr-xinclude/functions.php9
-rw-r--r--include/rssfuncs.php4
-rw-r--r--index.php11
-rwxr-xr-xinstall/index.php8
-rw-r--r--js/tt-rss.js8
-rw-r--r--plugins/mail/init.php3
-rw-r--r--plugins/toggle_sidebar/application_side_list.pngbin0 -> 510 bytes
-rw-r--r--plugins/toggle_sidebar/init.php34
-rwxr-xr-xupdate.php34
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);
}
diff --git a/index.php b/index.php
index 6b27d9042..220fe27c1 100644
--- a/index.php
+++ b/index.php
@@ -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">
- &lt;&lt;</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 = "&lt;&lt;";
- } else {
- Element.hide('feeds-holder');
- $("collapse_feeds_btn").innerHTML = "&gt;&gt;";
- }
+ 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
new file mode 100644
index 000000000..248eaf1ac
--- /dev/null
+++ b/plugins/toggle_sidebar/application_side_list.png
Binary files differ
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");
?>