CAMAS 1.1 TODO List and Q&A
---------------------------

TODO:

CAMAS:
	. Choose a standard way in output/input of all functions that
          returns / handle strings. 
           Either strings are UTF8 encoded,
           Either strings are Unicoded,
           Either strings are encoded in national caracter of client.
          Anyway, I really think that we must choose either utf8 or
          unicode since pike 7.x have string_to_utf8, utf8_to_string,
          string_to_unicode and unicode_to_string functions.
	. would be cool if we could remove the \Seen flags from mails :)
	. from redax: on the fly uuencoded attachments decoding

	. oliv3 TODO remove this defvar "inboxes" which deprecated for a
	    long time now

        . HIGH PRIORITY : clean the code :
           . stop add nom portables objects in id->session_variables (eg
              object that cannot MIME.base64.encoded. 
              Aim: Use mysql option of 123session to have a real load 
                   load balancing system
              Use a mapping like id->camas->localvars
        
        . create a global directory system for camas with open
          API :
            CAMAS Global directory ---> File global directory
                                   |--> Defvar global directory
                                   |--> LDAP global directory
                                   |--> SQL global directory
                                   ...? Another type of global directory
          So when quering the addressbook, we have only one way to
          query the global directories...

        . create a "preauth" system : (quoting grendel) :
          <Grendel> I'll just spit out another idea for CAMAS :)
          <Grendel> it's an addition to the current auth system
          <Grendel> I need something that will enable me to talk to the user
          <Grendel> i.e. during the preauthentication phase
          <Grendel> I need to show him some kind of form, ask questions,
                    activate the account
          <Grendel> the current system doesn't allow for that
          <Grendel> it would be nice if there was a hook to the auth module
                    to allow switching to a different page when the module
                    needs to do that.
          <Grendel> AFTER the user enters his login and password
          <Grendel> probably the best thing wouldbe to open up a separate
                    window then but this is dangerous if the browser doesn't
                    have JavaScript so it should be detected
          <Grendel> because what I need to do is :
                    - the user gets with his modem a login/password pair
                    - the password is just the activation one, once he logs in
                    - he is asked to give a new alias to his e-mail, change the
                      password and fill some form (volutarily) from that on 
                      the account is activated and expires after some time
                    - this done only once per user then they will have a
                      control panel to modify things, but that's a different
                      case althought I'll need to put another button in the 
                      CAMAS screen to transfer the user to the control panel
                      without closing his e-mail.
          <Grendel> I also thought we could do something else to add to camas
                    another feature, namely after login in, the user isn't faced
                    with his inbox at once. He sees a kind of menu: 
                    "Read your email", "Configure option", "Your control panel"
                    etc... etc...
          <Grendel> something like Yahoo et. al have... 
          ==> It is allmost an "entry screen" that can be inserted on demand
              by the auth module between login part and mail reading part.

        . (Low priority) .procmail and .forward editing feature for CAMAS
          ==> I think this may be handled by the auth module, because this
              implies the MTA is on the same machine that the one is running
              Caudium + CAMAS...

        . add a configure script to detect the correct version of
            caudium (maybe a Makefile.in to setup the install) ?

        . Abstraction Layers:

                . INPUT layer ------> Read only access (POP3)
                                 |
                                 +--> Read/Write access (IMAP, NEWS, maildir,
                                                         SQLdb, ...)

                . OUTPUT layer -----> SMTP, maildir, postfix maildrop, ...
                                 |
                                 +--> sendmail (exec)

                . use UIRs (eg: imap://ogirondel_isd@mail.isdnet.net/INBOX,
                                news://....)

        . See and check if Mikael Brandström's IMAP client code can be used
          in this setup.

        . Global Configuration module to handle the configuration of
          all the CAMAS_* modules. (maybe use a more
          sophisticated interface, like everything on the same
          page to avoid browsing up and down all the time in
          the configuration interface)
	   --> This one is really urgent to finish the new camas rxml language.

        . remove all the 'features' stuff, instead use an object
          (eg id->conf->CAMAS->...) to store the webmail's
          configuration. use private and public scopes in
          the class definition.
	   --> This maybe added in Global Configuration module too

        . finish to clean up / split the .h

        . option or module to handle SMIME (crypto)

        . C (or C++) module for Caudium: IMAP client (to replace FastIMHO)

                . look for an clean, portable and thread-safe API.

                maybe see Grendel for this as he has design plans for such
                a client ?

        . move outside non IMAP functions from imapclient.pmod

        . add login access like :
           - standart one
           - direct access (difficult cause 123session no set up... Maybe
             a patch is needed to handle POST and GET before setting up 
             session ?)
             /*
              * something like :
                ((id->query)?("?"+roxen_encode(id->query,"url"):""))
              * in 123 session ?
              */
           - http basic mode 
           - http extended mode (?)

	. readmail:
		- recursive MIME decoding
		- convert images on the fly (ex: pbm -> jpg)

        . Add support (in readmail) for mailing list managements fields
          and extensions (RFC2369).
          Even use such extensions to make some filters ?

------------
(lowpriority)
Run time admin interface: more precise stats (eg % of logouts vs autologouts)

- camas.pike

  oliv3:

  BUGS:
  extended adressbook fails if name or address contains éèçàù...

  TODO
  finish <camas_index_output> container

  * (Kiwi): forward a mail as an attachment

  * (Stenad): parse_date() should return a mapping, not an array.
              Benefits: Extendability (new data can be returned).
	                No need for #define of indexes.

  * (Stenad): User-selectable timezone.

  * (Stenad): use Crypto.randomness if available in rand_string().
    (Kiwi)  : seems to be available on allmost every pike (starting with pike
              7.0.x... I'd like to use Crypto.randomness.really_random()->read;
	      better random :)

  QUESTIONS
  + sessobj->address == sessobj->defaultaddress ? => remove one ?
  A: (Stenad) Defaultaddress should go, its an old IMHO thingy.
     If the user wasn't allowed to set-up his own address, the defaultaddress was used.

     Fix: camas_imho.pike:tag_imho_address() to use sessobj->address instead, 
          then defaultaddress can be deleted.
     (kiwi) Done !

  cont_imho_buttonoutput: virer le côté 'inboxes' (obsolete car une seule inbox maintenant)
  et rajouter inbox/sent/trash/drafts (selon les features) + un bouton "notify"
  buttons="compose,mailindex,blah..."

  tag_imho_notify: insère le javascript

  defaultlayout: on ne met pas un frameset dans un head !!!

  <imho_string text="logout">

  PS: todo pour camas : forcer le wrapping des lignes à 70-77 caractères de
    facon configurable...

  ??? garder les rand_string en fin d'URL ? (cause: maintenant, nocache)
  -- Xavier yes :) two systems are better than one... (read : dammed M$IE).

  Features => add an option for MDN (and ignore MDN behavior when receiving a mail)


- camas_layout_fs.pike

 oliv3 TODO: load from a tarball

 <Grendel> why the TAR - because right now for each template screen you waste two inodes

- camas_runtime_admin.pike

 add location to enable MRTG graphics using http :)

- camas_features.pike

	add missing defvars like "user dialog... : rfc 822 date ... etc..."
		"User interface..."
		"User preferences..."
		"Outgoing mail..."

	remove the feature to specify Trash/Drafts/Sent/prefs folders.
		Use IMAP standard directories instead (ie: Trash)
		but keep the localization feature

[CIF]:	Site Wide: ....
	New Users: ....
	Users:     ....
- imapclient.pmod
 	handle thread sorting for mails using IMAP server

 - general to CAMAS
   add all RFC references that camas is full compliant (MIME, Imap....) in
   the RFC file.

--=========================== [ Done section ] ==============================--
  * (Stenad): use Crypto.randomness if available in rand_string().
    (Kiwi)  : seems to be available on allmost every pike (starting with pike
              7.0.x... I'd like to use Crypto.randomness.really_random()->read;
	      better random :)
  
  Done using Crypto.randomness.reasonably_random since really_random cannot
  be used on all OS (like Solaris) because lack of /dev/random or /dev/urandom.

