Torus
Torus is a module to ease migration from Outlook.
Torus uses CPAN's Win32::OLE to access Microsoft's MAPI locally and CPAN's Net::LDAP to connect to a remote OpenLDAP-server (slapd).
Access to these storage-implementations is wrapped via Data::Storage. Core functionality of Torus is currently provided from Data::Transfer::Sync.
We are starting with Contacts/Adresses, will go along with Messages, Calendar-Items and Journaling-Features. The "rest" should be able to be modeled and implemented on top of this.
This is more a reference implementation than anything actually useful. ;-) You'll also like to take a look at: - Kroupware Project: http://kroupware.kde.org - Outlook Connector Project: http://otlkcon.sourceforge.net - bynari InsightConnector: http://bynari.net/index.php?id=7
Win32::OLE Net::LDAP Data::Storage Data::Transfer::Sync ... and all their dependencies
The Data::Storage module is Copyright (c) 2002 Andreas Motl. All rights reserved.
You may distribute it under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.
Jan Hoffmann <jan@romain-volk.com> Sebastian Utz <s.utz@tunemedia.de>
Data::Storage is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.
- outlook2ldap - essential modules: - Net::LDAP - Convert::ASN1 / BER1 - Unicode::String - MIME::Base64 o use setup.pm with autoinstall, use ExtUtils::MakeMaker and/or h2xs o enhance mapping through expressions o provide multiple use of same fields o provide mechanism to concatenate fields --> see etc/_future! o make integrated setup o provide gui(s) o development (create mappings and stuff (testing, ...)) o productive use (control sync-processing at a central console) o little hotsync-button (iconbar bottom-right) which provides some actions and some configuration-settings (put ACLs on these settings?) o move libs/Torus to nfo-modules, exclude various metadata needed to actually sync with ldap and mappings (csv-files) o provide example to sync with mysql/Tangram/mbox/... o integrate genSchema.pl o regeln: o 3.spalte in outlook_ole_fields.csv: für "genSchema.pl" o wenn 2.spalte und/oder 3. leer, dann wird kein mapping gemacht (genSchema sowieso nicht) --> see etc/_future! o daten "rückwärts" übertragen! o mapping aufbohren (csv -> xml) - integrate "schema"-property _per-field_!!! o have the engine use this o maybe provide cross-checks --> see etc/_future! o transfer statistics o zugriff auf outlook (2002) ohne rückfrage gewähren? o v.a. wichtig, wenn integrierter zugriff (z.b. durch outlook-plugin) stattfindet + verwenden _aller_ attribute, die mit einem address-eintrag assoziiert sein können? + mileage (reisekilometer) kommt! + bis dato unbekannte mapi-felder sollten nun auch verwendet werden können o declare folder-mapping inside xml-file o check-before-delete doesn't seem to work (again!) o make basedn configurable o introduce host-to-basedn-mapping o provide additional fallback basedn o maybe additional permissions for folder-autocreation o rework regexes in Torus::Driver::ldap o spaces in ou's? o utf8-encoding for dn's in ou's o also in other property-names (besides the attributes)?! o ä, ö, ü o Insight: o cclient.dll o InsightConnector.dll o folder-mapping o leerzeichen (non-word-chars) do not work inside foldernames o regex fails: o introduce some "highlevel-splitting" of ldap-addresses o fix problems occoured 2003-01-06/07 @barschwaechter: rules, access to mapi, etc. (see email) o do a _true_ sync! (no delete/add) o handle folder-mapping/-creation completely _before_ continuing with single entries o create non-existant and stuff.... o timestamp log-entries o add fieldname-context to ldap_errors.log o regeln für cn/dn - build o wenn "sn" gesetzt, dann nimm "sn" als "cn" o wenn "givenname" gesetzt, dann füge zu "cn" hinzu (bisheriger "build"-Vorgang) o wenn "sn" leer, dann nimm stattdessen "FileAs" als "cn" und ab [Debug Level=1]info o wenn "FileAs" leer, dann nimm stattdessen "FirstName" und ab [Debug Level=1]info o wenn "FirstName" leer, dann nimm stattdessen "CompanyName" und ab [Debug Level=1]info else ab [Debug Level=1] Warn: "Couldn't build DN/CN cause neighter SN/FileAs/FirstName/CompanyName does exist." (Should not happen). o collision checks!!! o convert date-fields o detect must-not-have characters in dn: + replace "+" through "&" o replace "," through "" [Kill] o replace "ô" through "" [to UTF8] o enhance mechanisms to talk to OLE: o use "->EnumAllObjects" o use "->FreeUnusedLibraries" o use "->LastError" o encode "dn" with utf8 o "member" is empty!!! o free resources while processing o Outlook (OLE) o Perl (Variables, Objects) o LDAP-Server (Handle)
o for Horde: o helper: some kinda "genSchema.pl" o app: LDAP-Browser
o split 'syncOutlookContacts.ini' into 'torus.ini' and 'outlook2ldap.ini' o 'syncOutlookContacts.pl' reads 'outlook2ldap.ini' and runs 'feed.pl'
o acl based permissions (use Data::ACL?) o combine Torus::Xyz with Device::Xyz somehow? o assure published stuff contains no client-specific informations (HMI, ...) o CPAN's AppConfig is still needed for now (could this be changed? e.g. using App::Config?) o if not, just include it below "libs" or install "nmake" (through integrated setup) before configuring CPAN (if you already have, do "perl -MCPAN -eshell" and "o conf init" to redo configuration) o rework folder-mapping to use xml o rework field-mapping to use xml (Data::Transfer::Sync!) o rework declaration of while-transfer-rules and after-transfer-patches to xml o example of a "while-transfer-rule" o build "dn" from "cn/sn" o must have "sn" o if no "sn" given, just use "Vorname" o don't allow some special characters inside "dn": '+' seems to get translated to '&' at somewhere in code o example of a "after-transfer-patch-rule" o copy contents of field "x" to field "y" to nivelate(?) access from ldap-query-engines we don't have access to! (the source!) (e.g. query-/search-engines in commercial products like "MS Outlook 2000|2002|Express", which also don't have _any_ mechanism to parametrize them) o write papers about networking (computers _and_ small/embedded/electronic devices (atmel, c-control)) o janosch: how to control arbitrary devices via personal computers _and_ standalone circuits in parallel! (using Device::SerialPort and Conrad C-Control together) o implement infrastructure(s) o actually handle folders (check, autocreation) completely _before_ starting to sync/process items/entries! o provide easy-to-access shell-interface to LDAP (e.g. via Xyz::Xyz or (maybe later) "oedit.pl") o this removes the need for the currently used Java-based Ldap-Client (which will stay more comfortable - of course) o navigate via "cd" through containers, show items/entries via (e.g.) "dump"(?) and stuff... ... the interactive feeling/behaviour is similar to navigating in a filesystem via a commandline-interface (CLI) o sum up "must-have" features of known synchronization-tools for (e.g.) ... o s25@once o siemens custom sync (S45Sync.exe?) o Nokia Communicator o SyncML (it's not a device from a manufacturer, it's actually a XML-standard) -> sync4j@sourceforge o use news (the nntp-protocol) for journalling-functionality o have mapping stored inside ldap as well