[SOGo] Agenor 0.8 and SOGo Svn online

Helge Hess sogo@opengroupware.org
Tue, 26 Jul 2005 17:31:43 +0200


Hi,

below is some basic information on SOGo / Agenor in a simple outline  
on the current state.

Agenor is developed for a deployment with 60.000 office workers (more  
or less actual concurrent users!), so there is a strong focus on  
scalability which affects the design in major (and sometimes  
"unusual") ways. A previous state of the application successfully  
went through major scalability testing (using a distributed OpenSTA  
setup) and the backend storage was well tested with 100.000 folders  
and loads of data.
The application will run on a small cluster at a central location  
(LDAP and Cyrus are separate and no SOGo concern, PostgreSQL setup is).


- user management
   - SOGo currently does not manage users, in Agenor this is done using
     LDAP + Apache mod_ldap + PAM/Cyrus
     - passwords are the same for all services (LDAP, Web, Cyrus)
   - the SOGo authenticator object extracts the username from the HTTP
     basic credentials (and creates a SOGoUser object)
   - we intend to provide some additional user-managers
     - eg one option would be to reuse IMAP4 for authentication

- data storage
   - mails are stored in IMAP4, tested is Cyrus as on Sarge
   - accounts are stored in LDAP (tested with OpenLDAP)
   - profiles are stored in a SQL table
     - exposed as an NSUserDefaults objects
   - contacts and events are stored in GCSContentStore
     - GCS has a registry table which maps names (called "folders") to
       table locations
       - so we can distribute folders between multiple machines
     - folder contents are distinct (and are kept in separate tables)
     - each folder has (... configurable)
       - a content table, containing either vcard, plist or iCalendar  
snippet
       - a quick table, containing an index on attributes used by the  
WebUI
         - quick and content can be joined in trunk SOPE
     - to convert a content item to a quick item we use so called  
'extractors'
       (SOPE-4.5/sope-gdl1/GDLContentStore ...)
     - tested with PostgreSQL and SQlite GDL1 adaptors (should work  
with any)

- accounts
   - are stored in LDAP
   - LDAP is wrapped in the AgenorUserManager class
   - SOGo uses LDAP to:
     - map between email and UID (two way!)
     - get CNs for UIDs
     - Agenor:
       - find shared mailbox accounts
         - uses Cyrus account.-.share Loginname notation
       - find user from addresses
       - find whether access is allowed from public internet
       - Agenor uses a lot of LDAP attributes in French
       - has an own tool called "Anais" for account selection
         - PHP tool, might become OpenSource as well

- contacts
   - UI similiar to OGo (will be changed in SOGo)
   - we currently support one private contact folder per user
   - GCS content is either a simple plist or a vCard
   - vCard can currently only get rendered in WebUI, the editor always
     produces plist (to be changed, move to vCard for everything)
   - can be used to select recipients in mail
   - can be used to select participants in calendar
   - full GroupDAV support
   - support for special "OGo-GroupDAV" "new" URLs
   - we probably add LDAP addressbook support
     - will also act as an LDAP<->WebDAV gateway

- calendar
   - UI similiar to OGo (will be changed in SOGo)
   - supports most views also available in regular OGo
   - supports iCalendar status tracking (and a decision-homepage)
   - has conflict detection
     - but not the nice conflict viewer as in OGO
   - has freebusy-proposal
     - currently missing third tentative state (only free and busy)
     - we do not yet retrieve external freebusy states
       - should be cached in some table bound to external users
   - can generate freebusy files on the fly
   - writes content into the calendar folders of all (internal)  
participants
     - kept in sync by the app
     - will probably change for SOGo
   - has direct support for iCalendar recurrences
     - only one event per file is supported
       - so we cannot support recurrence-ids in the store
         - such must be split as exceptions (matches what most  
clients do)
   - resources
     - support for resources is in the code, but got disabled for  
Agenor 0.8
       - uses standard iCal resources support (resource participants)
   - iMIP support
     - sends out REQUESTs
       - works well with Evolution with SOGo organized meetings
       - works well with Tiger iCal.app with SOGo organized meetings
       - doesn't work with Outlook
         - we currently send multipart mails, Outlook only accepts  
non-mp
     - does not yet send REPLYs
       - but the mailer can receive REPLYs
   - full GroupDAV support
   - CalDAV support pending
   - support for special "OGo-GroupDAV" "new" URLs
   - has prototyped iCal-over-HTTP support
     - assemble/disassemble a full iCal folder to/from a single iCal  
file

- mailer
   - for maillists IMAP4 MIME parsing is used
     - reason: much faster than NGImap4, smaller responses
     - so you can only use the fields as available in IMAP4 SORT
     - we require IMAP4 SORT extension
   - no mail-threading yet (could be implemented with IMAP4 SORT  
extension)
   - there are checks on IMAP4 ACLs to display/hide buttons
   - there are IMAP4 connection pools and (supposedly) clever caching
   - UI designed after Thunderbird
     - uses TB icons as included in Debian packages (but no Mozilla  
branding)
   - mail viewer
     - can fetch RFC822 header for additional attributes
       - slows down generation by ~10ms in test setup
       - deals with mailing list X- headers for posting/subscription etc
       - deals with some SpamAssassin and virus scanning X- headers
     - has basic iMIP support
       - can properly render most iMIP responses
       - operations on calendar are not yet fully implemented (minor  
work)
     - generates "readable URLs" even for attachments, eg:
         .../Mail/account/INBOX/1/2.gif
   - Agenor uses some folder names in French (eg Inbox, Sent etc)
     - SOGo also translates some foldernames depending on the locale
       (sigh, like in OSX Finder)
   - Agenor supports so called "shared accounts" (partages)
     - access with a different login: login.-.share
       - but same password
     - some special handling for shared-accounts INBOXes and folder  
prefixes
       - some special handling for altnamespace ACLs (Cyrus bugs)
   - Agenor uses Cyrus "altnamespace" per default
     - must be set using a default, should work with standard setup too
       - needs to be modified to retrieve the separator from IMAP4
   - SOGo mail also acts as a WebDAV<->IMAP4 gateway
     - you can connect using Cadaver and treat mails as files
     - or browse mail folders
     - create/delete collections
     - access attachments (browse a mail as a collection)
     - support for strong etags
     - of course WebDAV doesn't map 1:1 to IMAP4
   - mail composition results in "Drafts"
     - drafts are stored in the FS
       - not in IMAP4 because of decoding overhead
         - no "save Draft in IMAP4 Drafts" yet
     - necessary because we have no session and need fast
       access to draft
     - mail is send using /usr/lib/sendmail
     - objects: SOGoDraftObject, SOGoDraftFolder
       - fake a similiar interface like an IMAP4 folder object
   - support for Cyrus Sieve folders
     - we do not parse/generate Sieve yet, we just have a plaintext  
editor
       and a Sieve script list on the server

- permissions
   - SOGo itself has no real permission system yet
     - scheduled for Agenor 0.9
     - planned to be based on SOPE and be representable in WebDAV ACLs
   - some views have explicit UI-level permission checks
   - some static rules (eg private Contacts folder) are checked in SOPE

- scalability features
   - WebUI uses no sessions at all
     - processes can be distributed between multiple machines w/o
       sid tracking
       - distribution should consider authentication to improve use
         of local caches
       - we use Pound for load balancing
   - folders can be distributed among multiple servers
   - usage of strong etags to cache HTML pages in the client - in a
     _consistent_ way (open a mail, close a mail, open the same mail =>
     you'll get served from the browser cache)
     - two-way replication can be done with WebDAV replicators  
(sitecopy?)
       - didn't try

- Outlook support
   - does not yet support ZideLook
   - implementation will/can be done in four steps of varying  
complexity:
     - store 1:1 copies of MAPI messages in storage (no read/write in  
WebUI)
     - extract quickfields from MAPI (basic view support in WebUI)
     - extract various fields from MAPI (view/write support in WebUI)
     - rewrite MAPI to iCalendar (view/write support in open clients)
   - SOGo is a good ZideLook backend
     - can keep arbitary Outlook properties as x- attributes
       - eg should work with sync clients
     - can support arbitary folder hierarchies

- translation
   - currently translated in English and French
     - some work on German
   - done using Localizable.strings in the UI bundles
     - should move to /usr/lib/sogo-0.9/translations/

- source setup
   - clean separation between SoObjects and HTML UI
     - can run a GroupDAV/CalDAV server w/o SOGo Web UI
     /---------\
     | libSOGo |         - currently contains Agenor specific stuff
     |-----------\
     | SoObjects |       - objects mapped to URLs in SOPE
     |-----------------\
     | UI  | libSOGoUI | - HTML components bound to SoObjects  
(product.plsit)
     \-----------------/
   - SoObjects and UI are SoProduct's (NSBundle's) which are loaded  
by the
     sogod (Main) process
   - maybe we consolidate more code in shared libraries for use in  
different
     SoApplication's (like libSoMail)
   - goal is that the UI can be used on top of different backends
     - eg Calendar on ZideStore instead of SOGo SoObjects


Hopefully the notes give some overview on what is currently  
available. The notes are probably far from complete, just ask if you  
want to know details on some topic.

Greets,
   Helge
-- 
http://docs.opengroupware.org/Members/helge/
OpenGroupware.org