Page MenuHomePhorge

D4911.diff
No OneTemporary

D4911.diff

diff --git a/bin/inspect.php b/bin/inspect.php
new file mode 100755
--- /dev/null
+++ b/bin/inspect.php
@@ -0,0 +1,170 @@
+#!/usr/bin/env php
+<?php
+/*
+ +--------------------------------------------------------------------------+
+ | Kolab Sync (ActiveSync for Kolab) |
+ | |
+ | Copyright (C) 2024, Apheleia IT AG <contact@apheleia-it.ch> |
+ | |
+ | This program is free software: you can redistribute it and/or modify |
+ | it under the terms of the GNU Affero General Public License as published |
+ | by the Free Software Foundation, either version 3 of the License, or |
+ | (at your option) any later version. |
+ | |
+ | This program is distributed in the hope that it will be useful, |
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ | GNU Affero General Public License for more details. |
+ | |
+ | You should have received a copy of the GNU Affero General Public License |
+ | along with this program. If not, see <http://www.gnu.org/licenses/> |
+ +--------------------------------------------------------------------------+
+ | Author: Christian Mollekopf <mollekopf@apheleia-it.ch> |
+ +--------------------------------------------------------------------------+
+*/
+
+
+define('RCUBE_INSTALL_PATH', realpath(dirname(__FILE__) . '/../') . '/');
+define('RCUBE_PLUGINS_DIR', RCUBE_INSTALL_PATH . 'lib/plugins/');
+
+// Define include path
+$include_path = RCUBE_INSTALL_PATH . 'lib' . PATH_SEPARATOR;
+$include_path .= RCUBE_INSTALL_PATH . 'lib/ext' . PATH_SEPARATOR;
+$include_path .= ini_get('include_path');
+set_include_path($include_path);
+
+// include composer autoloader (if available)
+if (@file_exists(RCUBE_INSTALL_PATH . 'vendor/autoload.php')) {
+ require RCUBE_INSTALL_PATH . 'vendor/autoload.php';
+}
+
+// include global functions from Roundcube Framework
+require_once 'Roundcube/bootstrap.php';
+
+$opts = rcube_utils::get_opt([
+ 'e' => 'email',
+ 'p' => 'adminpassword',
+]);
+
+if (empty($opts['email'])) {
+ rcube::raise_error("Email address not specified (--email).", false, true);
+}
+$email = $opts['email'];
+if (empty($opts['adminpassword'])) {
+ rcube::raise_error("Admin password not specified (--adminpassword).", false, true);
+}
+$password = $opts['adminpassword'];
+
+$rcube = rcube::get_instance();
+$default_port = $rcube->config->get('default_port', 143);
+$default_host = $rcube->config->get('default_host');
+$user = "cyrus-admin";
+$imap = new \rcube_imap_generic();
+$options['auth_cid'] = $user;
+$options['auth_pw'] = $password;
+$options['auth_type'] = 'PLAIN';
+$options['port'] = $default_port;
+$imap->setDebug(true);
+if (!$imap->connect($default_host, $email, $password, $options)) {
+ rcube::raise_error("Failed to connect to imap.", false, true);
+}
+
+$rcube = \rcube::get_instance();
+$db = $rcube->get_dbh();
+
+$select = $db->query(
+ "SELECT `user_id` FROM `users`"
+ . " WHERE `username` = ?"
+ . " ORDER BY `user_id` DESC",
+ \strtolower($email)
+);
+
+if ($data = $db->fetch_assoc($select)) {
+ $userid = $data['user_id'];
+} else {
+ rcube::raise_error("User not found: $user.", false, true);
+}
+
+print($userid);
+
+$devicesSelect = $db->query(
+ "SELECT `id`, `deviceid`, `devicetype` FROM `syncroton_device`"
+ . " WHERE `owner_id` = ?",
+ $userid
+);
+
+$result = [];
+while ($data = $db->fetch_assoc($devicesSelect)) {
+ $deviceid = $data["deviceid"];
+ $device_id = $data["id"];
+
+ $result[$device_id]['deviceid'] = $deviceid;
+ $result[$device_id]['devicetype'] = $data["devicetype"];
+
+ $select = $db->limitquery(
+ "SELECT `counter`, `lastsync` FROM `syncroton_synckey`"
+ . " WHERE `device_id` = ? AND `type` = 'FolderSync'"
+ . " ORDER BY `counter` DESC",
+ 0,
+ 1,
+ $device_id
+ );
+
+ if ($data = $db->fetch_assoc($select)) {
+ $result[$deviceid]['FolderSync'] = [
+ "counter" => $data['counter'],
+ "lastsync" => $data['lastsync'],
+ ];
+ } else {
+ echo("Synckey not found.\n");
+ }
+
+ $folderSelect = $db->query(
+ "SELECT * FROM `syncroton_folder`"
+ . " WHERE `device_id` = ?",
+ $device_id
+ );
+
+
+
+
+ while ($folder = $db->fetch_assoc($folderSelect)) {
+ $select = $db->limitquery(
+ "SELECT `counter`, `lastsync`, `extra_data` FROM `syncroton_synckey`"
+ . " WHERE `device_id` = ? AND `type` = ?"
+ . " ORDER BY `counter` DESC",
+ 0,
+ 1,
+ $device_id,
+ $folder['id']
+ );
+
+ if ($data = $db->fetch_assoc($select)) {
+ $result[$device_id]['folders'][$folder['id']] = [
+ "counter" => $data['counter'],
+ "lastsync" => $data['lastsync'],
+ "modseq" => $data['extra_data'] ? json_decode($data['extra_data'])->modseq : null,
+ ];
+ }
+
+ $result[$device_id]['folders'][$folder['id']]['name'] = $folder['displayname'];
+
+ $imap->select($folder['displayname']);
+ $result[$device_id]['folders'][$folder['id']]['imapModseq'] = $imap->data['HIGHESTMODSEQ'] ?? null;
+ $result[$device_id]['folders'][$folder['id']]['imapMessagecount'] = $imap->data['EXISTS'] ?? null;
+
+ $select = $db->query(
+ "SELECT count(*) FROM `syncroton_content`"
+ . " WHERE `device_id` = ? AND `folder_id` = ?",
+ $device_id,
+ $folder['id']
+ );
+
+ if ($data = $db->fetch_assoc($select)) {
+ $result[$device_id]['folders'][$folder['id']]['contentCount'] = array_values($data)[0];
+ }
+ }
+}
+
+var_export($result);
+

File Metadata

Mime Type
text/plain
Expires
Sun, Sep 22, 4:20 PM (18 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
9484320
Default Alt Text
D4911.diff (6 KB)

Event Timeline