2 Commits
3.1 ... 3.3

Author SHA1 Message Date
Boris Gulay
bcea012af0 Finally works correct for SMTP too. Closes #24. 2018-07-16 20:30:48 +03:00
Boris Gulay
a437a107ba Drop NOT NULL for username column.
Someone please check MySQL script!
2018-07-16 18:55:12 +03:00
6 changed files with 36 additions and 11 deletions

View File

@@ -16,3 +16,6 @@ This plugin allows users to switch between different accounts (including remote)
* Branch 3.X - for Roundcube v1.3
Please specify verion like "~2.0" in your composer.json file for ident_switch requirement. In this case you will stay inside compatible branch until you manually update ypur Roundcube installation.
### Switching SMTP ###
Plugin also switched SMTP credentials but only for server specified in general config. You should use %u and %p substitutions for user and password to make it work. This substitutions are replaced by username and password for selected IMAP account.

View File

@@ -11,8 +11,7 @@ CREATE TABLE IF NOT EXISTS ident_switch
int(10) UNSIGNED
NOT NULL,
username
varchar(64)
NOT NULL,
varchar(64),
password
varchar(64),
host

6
SQL/mysql/2018071600.sql Normal file
View File

@@ -0,0 +1,6 @@
ALTER TABLE
ident_switch
MODIFY
username
varchar(64)
NULL;

View File

@@ -13,8 +13,7 @@ CREATE TABLE ident_switch
REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE
UNIQUE,
username
varchar(64)
NOT NULL,
varchar(64),
password
varchar(64),
host

View File

@@ -0,0 +1,5 @@
ALTER TABLE
ident_switch
ALTER COLUMN
username
DROP NOT NULL;

View File

@@ -150,16 +150,29 @@ class ident_switch extends rcube_plugin
function on_smtp_connect($args)
{
$iid = $_SESSION['iid' . self::MY_POSTFIX];
if (!is_integer($iid) || $iid == -1)
return $args;
$rc = rcmail::get_instance();
// TODO: Rewrite with full settings!
if (strcasecmp($rc->user->data['username'], $_SESSION['username']) !== 0)
$sql = 'SELECT host, flags, port, username, password, iid FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE iid = ? AND user_id = ?';
$q = $rc->db->query($sql, $iid ,$rc->user->ID);
$r = $rc->db->fetch_assoc($q);
if (is_array($r))
{
if ($args['smtp_user'] == '%u')
$args['smtp_user'] = $rc->user->data['username'];
if ($args['smtp_pass'] == '%p')
$args['smtp_pass'] = $rc->decrypt($_SESSION['password' . self::MY_POSTFIX]);
if (!$r['username'])
{ // Load email from identity
$sql = 'SELECT email FROM ' . $rc->db->table_name('identities') . ' WHERE identity_id = ?';
$q = $rc->db->query($sql, $r['iid']);
$rIid = $rc->db->fetch_assoc($q);
$r['username'] = $rIid['email'];
}
// Exactly the same in core SMTP handler
$args['smtp_user'] = str_replace('%u', $r['username'], $args['smtp_user']);
$args['smtp_pass'] = str_replace('%p', $rc->decrypt($r['password']), $args['smtp_pass']);
}
return $args;