7 Commits
4.0.1 ... 4.1

Author SHA1 Message Date
Boris Gulay
ac32196fc0 Better string handling. 2019-09-04 23:30:47 +03:00
Boris Gulay
ebc4324ecd Fixed login problem when server requires TLS.
Closes #47
Closes #45
2019-09-04 23:21:46 +03:00
Boris Gulay
c0a92bb436 Fixed issue in German translation. Thanx bJBM 2019-07-30 23:16:43 +03:00
Boris Gulay
652d1aaa1f Fix field names in CHECK. Thanx Tina Rosenstein 2019-07-30 23:14:30 +03:00
Boris Gulay
6f86e64442 Make preconfig work for SMTP host and port too.
Closes # 37
2019-04-16 00:20:06 +03:00
Boris Gulay
080a2ee591 Fixed non-html chars ware stripped from password.
Closes #17
2019-04-14 19:19:30 +03:00
Boris Gulay
4a20b77edb Fix incorrect field names in CHECKs (#42) 2019-04-14 17:51:01 +03:00
4 changed files with 71 additions and 65 deletions

View File

@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS ident_switch
varchar(64), varchar(64),
imap_port imap_port
int int
CHECK(port > 0 AND port <= 65535), CHECK(imap_port > 0 AND imap_port <= 65535),
label label
varchar(32), varchar(32),
flags flags
@@ -29,12 +29,12 @@ CREATE TABLE IF NOT EXISTS ident_switch
varchar(64), varchar(64),
smtp_port smtp_port
int int
CHECK(port > 0 AND port <= 65535), CHECK(smtp_port > 0 AND smtp_port <= 65535),
UNIQUE KEY user_id_label (user_id, label), UNIQUE KEY user_id_label (user_id, label),
CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_identity_id FOREIGN KEY (iid) REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT fk_identity_id FOREIGN KEY (iid) REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY(id), PRIMARY KEY(id),
INDEX IX_ident_switch_user_id (user_id), INDEX IX_ident_switch_user_id (user_id),
INDEX IX_ident_switch_iid (iid) INDEX IX_ident_switch_iid (iid)
); );

View File

@@ -1,41 +1,41 @@
CREATE TABLE ident_switch CREATE TABLE ident_switch
( (
id id
serial serial
PRIMARY KEY, PRIMARY KEY,
user_id user_id
integer integer
NOT NULL NOT NULL
REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
iid iid
integer integer
NOT NULL NOT NULL
REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE
UNIQUE, UNIQUE,
username username
varchar(64), varchar(64),
password password
varchar(64), varchar(64),
imap_host imap_host
varchar(64), varchar(64),
imap_port imap_port
integer integer
CHECK(port > 0 AND port <= 65535), CHECK(imap_port > 0 AND imap_port <= 65535),
label label
varchar(32), varchar(32),
flags flags
integer integer
NOT NULL NOT NULL
DEFAULT(0), DEFAULT(0),
smtp_host smtp_host
varchar(64), varchar(64),
smtp_port smtp_port
integer integer
CHECK(port > 0 AND port <= 65535), CHECK(smtp_port > 0 AND smtp_port <= 65535),
UNIQUE (user_id, label) UNIQUE (user_id, label)
); );
CREATE INDEX CREATE INDEX
IX_ident_switch_user_id IX_ident_switch_user_id
ON ON
ident_switch(user_id); ident_switch(user_id);

View File

@@ -183,8 +183,6 @@ class ident_switch extends rcube_plugin
else else
$args['smtp_server'] = 'tls://' . $args['smtp_server']; $args['smtp_server'] = 'tls://' . $args['smtp_server'];
} }
self::write_log(print_r($args, true));
} }
return $args; return $args;
@@ -355,7 +353,7 @@ class ident_switch extends rcube_plugin
unset($_SESSION['createData' . self::MY_POSTFIX]); unset($_SESSION['createData' . self::MY_POSTFIX]);
if (!$data || count($data) == 0) if (!$data || count($data) == 0)
self::write_log('Object with ident_switch values not found in session for ID = ' . $args['id'] . '.'); self::write_log("Object with ident_switch values not found in session for ID = {$args['id']}.");
else else
{ {
$data['id'] = $args['id']; $data['id'] = $args['id'];
@@ -373,7 +371,7 @@ class ident_switch extends rcube_plugin
$q = $rc->db->query($sql, $args['id'], $rc->user->ID); $q = $rc->db->query($sql, $args['id'], $rc->user->ID);
if ($rc->db->affected_rows($q)) if ($rc->db->affected_rows($q))
self::write_log('Deleted associated information for identity with ID = ' . $args['id'] . '.'); self::write_log("Deleted associated information for identity with ID = {$args['id']}.");
return $args; return $args;
} }
@@ -386,7 +384,10 @@ class ident_switch extends rcube_plugin
if (strcasecmp($_SESSION['username'], $rc->user->data['username']) !== 0) if (strcasecmp($_SESSION['username'], $rc->user->data['username']) !== 0)
{ {
if (isset($_SESSION['iid' . self::MY_POSTFIX])) if (isset($_SESSION['iid' . self::MY_POSTFIX]))
$rc->output->add_script('plugin_switchIdent_fixIdent(' . $_SESSION['iid' . self::MY_POSTFIX] . ');', 'docready'); {
$iid = $_SESSION['iid' . self::MY_POSTFIX];
$rc->output->add_script("plugin_switchIdent_fixIdent({$iid});", 'docready');
}
else else
self::write_log('Special session variable with active identity ID not found.'); self::write_log('Special session variable with active identity ID not found.');
} }
@@ -443,7 +444,7 @@ class ident_switch extends rcube_plugin
} }
// Get also password // Get also password
$retVal['imap.pass'] = self::get_field_value('imap', 'password', false); $retVal['imap.pass'] = self::get_field_value('imap', 'password', false, true);
// Parse secure settings // Parse secure settings
$retVal['flags'] = self::DB_ENABLED; $retVal['flags'] = self::DB_ENABLED;
@@ -455,11 +456,12 @@ class ident_switch extends rcube_plugin
return $retVal; return $retVal;
} }
private static function get_field_value($section, $field, $trim = true) private static function get_field_value($section, $field, $trim = true, $html = false)
{ {
$retVal = rcube_utils::get_input_value( $retVal = rcube_utils::get_input_value(
'_ident_switch_form_' . $section . '_' . $field, "_ident_switch_form_{$section}_{$field}",
rcube_utils::INPUT_POST rcube_utils::INPUT_POST,
$html
); );
if (!$trim) if (!$trim)
return $retVal; return $retVal;
@@ -554,7 +556,7 @@ class ident_switch extends rcube_plugin
$r['username'] = $rIid['email']; $r['username'] = $rIid['email'];
} }
self::write_log('Switching mailbox to one for identity with ID = ' . $r['iid'] . ' (username = \'' . $r['username'] . '\').'); self::write_log("Switching mailbox to one for identity with ID = {$r['iid']} (username = '{$r['username']}').");
$def_port = 143; // Default IMAP port here! $def_port = 143; // Default IMAP port here!
$ssl = null; $ssl = null;
@@ -582,7 +584,11 @@ class ident_switch extends rcube_plugin
if (!$_SESSION['password' . self::MY_POSTFIX]) if (!$_SESSION['password' . self::MY_POSTFIX])
$_SESSION['password' . self::MY_POSTFIX] = $_SESSION['password']; $_SESSION['password' . self::MY_POSTFIX] = $_SESSION['password'];
$_SESSION['storage_host'] = $r['imap_host'] ? $r['imap_host'] : 'localhost'; // Default IMAP host here! $host = $r['imap_host'] ? $r['imap_host'] : 'localhost'; // Default IMAP host here!
if ($ssl)
$host = "{$ssl}://{$host}";
$_SESSION['storage_host'] = $host;
$_SESSION['storage_ssl'] = $ssl; $_SESSION['storage_ssl'] = $ssl;
$_SESSION['storage_port'] = $port; $_SESSION['storage_port'] = $port;
$_SESSION['username'] = $r['username']; $_SESSION['username'] = $r['username'];
@@ -594,7 +600,7 @@ class ident_switch extends rcube_plugin
else else
{ {
// TODO: Show message in browser // TODO: Show message in browser
self::write_log('Requested remote mailbox with ID = ' . $identId . ' not found.'); self::write_log("Requested remote mailbox with ID = {$identId} not found.");
return; return;
} }
} }
@@ -640,14 +646,14 @@ class ident_switch extends rcube_plugin
$cfg = $this->get_preconfig($email); $cfg = $this->get_preconfig($email);
if (is_array($cfg)) if (is_array($cfg))
{ {
self::write_log('Applying predefined configuration for \'' . $email . '\'.'); self::write_log("Applying predefined configuration for '{$email}'.");
if ($cfg['host']) if ($cfg['host'])
{ // Parse and set host and related { // Parse and set host and related
$urlArr = parse_url($cfg['host']); $urlArr = parse_url($cfg['host']);
$record['ident_switch.form.imap.host'] = $urlArr['host'] ? rcube::Q($urlArr['host'], 'url') : ''; $record['ident_switch.form.imap.host'] = $record['ident_switch.form.smtp.host'] = $urlArr['host'] ? rcube::Q($urlArr['host'], 'url') : '';
$record['ident_switch.form.imap.port'] = $urlArr['port'] ? intval($urlArr['port']) : ''; $record['ident_switch.form.imap.port'] = $record['ident_switch.form.smtp.port'] = $urlArr['port'] ? intval($urlArr['port']) : '';
if (strcasecmp('tls', $urlArr['scheme']) === 0) if (strcasecmp('tls', $urlArr['scheme']) === 0)
$record['ident_switch.form.imap.tls'] = true; $record['ident_switch.form.imap.tls'] = true;

View File

@@ -64,4 +64,4 @@ $labels['err.host.long'] = 'Der Wert in Feld \'Servername\' ist zu lang (max. 64
$labels['err.port.num'] = 'Der Wert in Feld \'Port\' muss eine Zahl sein.'; $labels['err.port.num'] = 'Der Wert in Feld \'Port\' muss eine Zahl sein.';
// Value in \'Port\' field must be between 1 and 65535. // Value in \'Port\' field must be between 1 and 65535.
$labels['err.port.range'] = 'Der Wert in Feld \'Port\' muss 1 und 65535 liegen.'; $labels['err.port.range'] = 'Der Wert in Feld \'Port\' muss zwischen 1 und 65535 liegen.';