| 1 | <HTML> | 
| 2 | <HEAD> | 
| 3 | <TITLE>Torus</TITLE> | 
| 4 | <LINK REV="made" HREF="mailto:"> | 
| 5 | </HEAD> | 
| 6 |  | 
| 7 | <BODY> | 
| 8 |  | 
| 9 | <A NAME="__index__"></A> | 
| 10 | <!-- INDEX BEGIN --> | 
| 11 |  | 
| 12 | <UL> | 
| 13 |  | 
| 14 | <LI><A HREF="#name">NAME</A></LI> | 
| 15 | <LI><A HREF="#description">DESCRIPTION</A></LI> | 
| 16 | <LI><A HREF="#news">NEWS</A></LI> | 
| 17 | <UL> | 
| 18 |  | 
| 19 | <UL> | 
| 20 |  | 
| 21 | <UL> | 
| 22 |  | 
| 23 | <LI><A HREF="#20030118  initial checkin">2003-01-18  -  initial check-in</A></LI> | 
| 24 | </UL> | 
| 25 |  | 
| 26 | </UL> | 
| 27 |  | 
| 28 | </UL> | 
| 29 |  | 
| 30 | <LI><A HREF="#requirements">REQUIREMENTS</A></LI> | 
| 31 | <LI><A HREF="#authors / copyright">AUTHORS / COPYRIGHT</A></LI> | 
| 32 | <LI><A HREF="#contributors">CONTRIBUTORS</A></LI> | 
| 33 | <LI><A HREF="#support / warranty">SUPPORT / WARRANTY</A></LI> | 
| 34 | <LI><A HREF="#bugs">BUGS</A></LI> | 
| 35 | <LI><A HREF="#todo">TODO</A></LI> | 
| 36 | <LI><A HREF="#ideas">IDEAS</A></LI> | 
| 37 | </UL> | 
| 38 | <!-- INDEX END --> | 
| 39 |  | 
| 40 | <HR> | 
| 41 | <P> | 
| 42 | <HR> | 
| 43 | <H1><A NAME="name">NAME</A></H1> | 
| 44 | <P>Torus</P> | 
| 45 | <P> | 
| 46 | <HR> | 
| 47 | <H1><A NAME="description">DESCRIPTION</A></H1> | 
| 48 | <PRE> | 
| 49 | Torus is a module to ease migration from Outlook.</PRE> | 
| 50 | <PRE> | 
| 51 | Torus uses CPAN's Win32::OLE to access Microsoft's MAPI locally and | 
| 52 | CPAN's Net::LDAP to connect to a remote OpenLDAP-server (slapd).</PRE> | 
| 53 | <PRE> | 
| 54 | Access to these storage-implementations is wrapped via Data::Storage. | 
| 55 | Core functionality of Torus is currently provided from Data::Transfer::Sync.</PRE> | 
| 56 | <PRE> | 
| 57 | We are starting with Contacts/Adresses, will go along with Messages, | 
| 58 | Calendar-Items and Journaling-Features. | 
| 59 | The "rest" should be able to be modeled and implemented on top of this.</PRE> | 
| 60 | <PRE> | 
| 61 | This is more a reference implementation than anything actually useful.  ;-) | 
| 62 | You'll also like to take a look at: | 
| 63 | - Kroupware Project: <A HREF="http://kroupware.kde.org">http://kroupware.kde.org</A> | 
| 64 | - Outlook Connector Project: <A HREF="http://otlkcon.sourceforge.net">http://otlkcon.sourceforge.net</A> | 
| 65 | - bynari InsightConnector: <A HREF="http://bynari.net/index.php?id=7">http://bynari.net/index.php?id=7</A></PRE> | 
| 66 | <P> | 
| 67 | <HR> | 
| 68 | <H1><A NAME="news">NEWS</A></H1> | 
| 69 | <P> | 
| 70 | <H4><A NAME="20030118  initial checkin">2003-01-18  -  initial check-in</A></H4> | 
| 71 | <P> | 
| 72 | <HR> | 
| 73 | <H1><A NAME="requirements">REQUIREMENTS</A></H1> | 
| 74 | <PRE> | 
| 75 | Win32::OLE | 
| 76 | Net::LDAP | 
| 77 | Data::Storage | 
| 78 | Data::Transfer::Sync | 
| 79 | ... and all their dependencies</PRE> | 
| 80 | <P> | 
| 81 | <HR> | 
| 82 | <H1><A NAME="authors / copyright">AUTHORS / COPYRIGHT</A></H1> | 
| 83 | <PRE> | 
| 84 | The Data::Storage module is Copyright (c) 2002 Andreas Motl. | 
| 85 | All rights reserved.</PRE> | 
| 86 | <PRE> | 
| 87 | You may distribute it under the terms of either the GNU General Public | 
| 88 | License or the Artistic License, as specified in the Perl README file.</PRE> | 
| 89 | <P> | 
| 90 | <HR> | 
| 91 | <H1><A NAME="contributors">CONTRIBUTORS</A></H1> | 
| 92 | <PRE> | 
| 93 | Jan Hoffmann <jan@romain-volk.com> | 
| 94 | Sebastian Utz <s.utz@tunemedia.de></PRE> | 
| 95 | <P> | 
| 96 | <HR> | 
| 97 | <H1><A NAME="support / warranty">SUPPORT / WARRANTY</A></H1> | 
| 98 | <PRE> | 
| 99 | Data::Storage is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.</PRE> | 
| 100 | <P> | 
| 101 | <HR> | 
| 102 | <H1><A NAME="bugs">BUGS</A></H1> | 
| 103 | <P> | 
| 104 | <HR> | 
| 105 | <H1><A NAME="todo">TODO</A></H1> | 
| 106 | <PRE> | 
| 107 | - outlook2ldap - essential modules: | 
| 108 | - Net::LDAP | 
| 109 | - Convert::ASN1 / BER1 | 
| 110 | - Unicode::String | 
| 111 | - MIME::Base64 | 
| 112 | o use setup.pm with autoinstall, use ExtUtils::MakeMaker and/or h2xs | 
| 113 | x extend logging/debugging-output (logfiles below log/) | 
| 114 | o enhance mapping through expressions | 
| 115 | o provide multiple use of same fields | 
| 116 | o provide mechanism to concatenate fields | 
| 117 | --> see etc/_future! | 
| 118 | o make integrated setup | 
| 119 | o provide gui(s) | 
| 120 | o development (create mappings and stuff (testing, ...)) | 
| 121 | o productive use (control sync-processing at a central console) | 
| 122 | o little hotsync-button (iconbar bottom-right) which provides some actions and some configuration-settings (put ACLs on these settings?) | 
| 123 | o move libs/Torus to nfo-modules, exclude various metadata needed to actually sync with ldap and mappings (csv-files) | 
| 124 | o provide example to sync with mysql/Tangram/mbox/... | 
| 125 | o integrate genSchema.pl | 
| 126 | o regeln: | 
| 127 | o 3.spalte in outlook_ole_fields.csv: für "genSchema.pl" | 
| 128 | o wenn 2.spalte und/oder 3. leer, dann wird kein mapping gemacht (genSchema sowieso nicht) | 
| 129 | --> see etc/_future! | 
| 130 | +- beliebige outlook-ordner zu ldap-ou's mappen | 
| 131 | + fest deklarierte (level 1) | 
| 132 | o tief referenzierte (level X) (!!!)   (backup->Addressen->XYZ - Addressen) | 
| 133 | o daten "rückwärts" übertragen! | 
| 134 | + bugfix: utf8 | 
| 135 | o mapping aufbohren (csv -> xml) - integrate "schema"-property _per-field_!!! | 
| 136 | o have the engine use this | 
| 137 | o maybe provide cross-checks | 
| 138 | --> see etc/_future! | 
| 139 | o clean-up debugging (levels) | 
| 140 | + debugging-level does not work when error occours in Net::LDAP::Entry while adding... | 
| 141 | + display MAPI-object as hash | 
| 142 | o transfer statistics | 
| 143 | o zugriff auf outlook ohne rückfrage gewähren? | 
| 144 | o v.a. wichtig, wenn integrierter zugriff (z.b. durch outlook-plugin) stattfindet | 
| 145 | + verwenden _aller_ attribute, die mit einem address-eintrag assoziiert sein können? | 
| 146 | + mileage (reisekilometer) kommt! | 
| 147 | + bis dato unbekannte mapi-felder sollten nun auch verwendet werden können | 
| 148 | o declare folder-mapping inside xml-file | 
| 149 | o check-before-delete doesn't seem to work (again!) | 
| 150 | o make basedn configurable | 
| 151 | o introduce host-to-basedn-mapping | 
| 152 | o provide additional fallback basedn | 
| 153 | o maybe additional permissions for folder-autocreation | 
| 154 | o rework regexes in Torus::Driver::ldap | 
| 155 | o spaces in ou's? | 
| 156 | o utf8-encoding for dn's in ou's | 
| 157 | o also in other property-names (besides the attributes)?! | 
| 158 | o ä, ö, ü | 
| 159 | o Insight: | 
| 160 | o cclient.dll | 
| 161 | o InsightConnector.dll | 
| 162 | o folder-mapping | 
| 163 | o leerzeichen (non-word-chars) do not work inside foldernames | 
| 164 | o regex fails: | 
| 165 | o introduce some "highlevel-splitting" of ldap-addresses | 
| 166 | o fix problems occoured 2003-01-06/07 @barschwaechter: rules, access to mapi, etc. (see email) | 
| 167 | + syncOutlookContacts.pl --mapidump | 
| 168 | + provide better workflow for development phase(s) | 
| 169 | + configurable debugging | 
| 170 | + configurable tracing | 
| 171 | o do a _true_ sync! (no delete/add) | 
| 172 | o handle folder-mapping/-creation completely _before_ continuing with single entries | 
| 173 | o create non-existant and stuff.... | 
| 174 | o timestamp log-entries | 
| 175 | o add fieldname-context to ldap_errors.log | 
| 176 | o regeln für cn/dn - build | 
| 177 | o wenn "sn" gesetzt, dann nimm "sn" als "cn" | 
| 178 | o wenn "givenname" gesetzt, dann füge zu "cn" hinzu (bisheriger "build"-Vorgang) | 
| 179 | o wenn "sn" leer, dann nimm stattdessen "FileAs" als "cn" und ab [Debug Level=1]info | 
| 180 | o wenn "FileAs" leer, dann nimm stattdessen "FirstName" und ab [Debug Level=1]info | 
| 181 | o wenn "FirstName" leer, dann nimm stattdessen "CompanyName" und ab [Debug Level=1]info | 
| 182 | else ab [Debug Level=1] Warn: | 
| 183 | "Couldn't build DN/CN cause neighter SN/FileAs/FirstName/CompanyName does exist." (Should not happen). | 
| 184 | o collision checks!!! | 
| 185 | o convert date-fields | 
| 186 | o detect must-not-have characters in dn: | 
| 187 | + replace "+" through "&" | 
| 188 | o replace "," through "" [Kill] | 
| 189 | o replace "ô" through "" [to UTF8] | 
| 190 | o enhance mechanisms to talk to OLE: | 
| 191 | o use "->EnumAllObjects" | 
| 192 | o use "->FreeUnusedLibraries" | 
| 193 | o use "->LastError" | 
| 194 | o encode "dn" with utf8 | 
| 195 | o "member" is empty!!! | 
| 196 | o free resources while processing | 
| 197 | o Outlook (OLE) | 
| 198 | o Perl (Variables, Objects) | 
| 199 | o LDAP-Server (Handle) | 
| 200 | </PRE> | 
| 201 | <PRE> | 
| 202 |  | 
| 203 | + integration with Data::Storage and Data::Transfer | 
| 204 | + thrown away "L:" and "R:" o declarations for/in Data::Transfer::Sync | 
| 205 | o split 'syncOutlookContacts.ini' into 'torus.ini' and 'outlook2ldap.ini' | 
| 206 | o 'syncOutlookContacts.pl' reads 'outlook2ldap.ini' and runs 'feed.pl' | 
| 207 | + Data::Transfer::Sync now utilizes DesignPattern::Object and DesignPattern::Bridge</PRE> | 
| 208 | <PRE> | 
| 209 |  | 
| 210 | o for Horde: | 
| 211 | o helper: some kinda "genSchema.pl" | 
| 212 | o app: LDAP-Browser</PRE> | 
| 213 | <P> | 
| 214 | <HR> | 
| 215 | <H1><A NAME="ideas">IDEAS</A></H1> | 
| 216 | <PRE> | 
| 217 | o acl based permissions (use Data::ACL?) | 
| 218 | o combine Torus::Xyz with Device::Xyz somehow? | 
| 219 | o assure published stuff contains no client-specific informations (HMI, ...) | 
| 220 | o CPAN's AppConfig is still needed for now (could this be changed? e.g. using App::Config?) | 
| 221 | o if not, just include it below "libs" or install "nmake" (through integrated setup) before configuring CPAN | 
| 222 | (if you already have, do "perl -MCPAN -eshell" and "o conf init" to redo configuration) | 
| 223 | o rework folder-mapping to use xml | 
| 224 | o rework field-mapping to use xml (Data::Transfer::Sync!) | 
| 225 | o rework declaration of while-transfer-rules and after-transfer-patches to xml | 
| 226 | o example of a "while-transfer-rule" | 
| 227 | o build "dn" from "cn/sn" | 
| 228 | o must have "sn" | 
| 229 | o if no "sn" given, just use "Vorname" | 
| 230 | o don't allow some special characters inside "dn": '+' seems to get translated to '&' at somewhere in code | 
| 231 | o example of a "after-transfer-patch-rule" | 
| 232 | o copy contents of field "x" to field "y" to nivelate(?) access from ldap-query-engines we don't have access to! (the source!) | 
| 233 | (e.g. query-/search-engines in commercial products like "MS Outlook 2000|2002|Express", | 
| 234 | which also don't have _any_ mechanism to parametrize them) | 
| 235 | o write papers about networking (computers _and_ small/embedded/electronic devices (atmel, c-control)) | 
| 236 | o janosch: how to control arbitrary devices via personal computers _and_ standalone circuits in parallel! | 
| 237 | (using Device::SerialPort and Conrad C-Control together) | 
| 238 | o implement infrastructure(s) | 
| 239 | o actually handle folders (check, autocreation) completely _before_ starting to sync/process items/entries! | 
| 240 | o provide easy-to-access shell-interface to LDAP (e.g. via Xyz::Xyz or (maybe later) "oedit.pl") | 
| 241 | o this removes the need for the currently used Java-based Ldap-Client (which will stay more comfortable - of course) | 
| 242 | o navigate via "cd" through containers, show items/entries via (e.g.) "dump"(?) and stuff... | 
| 243 | ... the interactive feeling/behaviour is similar to navigating in a filesystem via a commandline-interface (CLI) | 
| 244 | o sum up "must-have" features of known synchronization-tools for (e.g.) ... | 
| 245 | o s25@once | 
| 246 | o siemens custom sync (S45Sync.exe?) | 
| 247 | o Nokia Communicator | 
| 248 | o SyncML (it's not a device from a manufacturer, it's actually a XML-standard) -> sync4j@sourceforge | 
| 249 | o use news (the nntp-protocol) for journalling-functionality | 
| 250 | o have mapping stored inside ldap as well</PRE> | 
| 251 |  | 
| 252 | </BODY> | 
| 253 |  | 
| 254 | </HTML> |