Apache/Web iCal Server

http and iCal are common standards that should be used together to create a calendar server. So far, I have not seen anyone do this effectively. Furthermore, most people seem to be concentrating on Windows calendar solutions or 'Windows to other platform' solutions. We have some ideas for a platform independent calendar server.

The server side is completely web technology. The files are pulled from the server through http(s). The files are pushed back to the server using https. Each calendar user would have two data stores--public and private. For now, the user would need to maintain two separate calendars to differentiate public/private data--This issue will be dealt with in the 2nd release--what release? We dont have any files yet. ;)

The client side is any program that supports iCal and https. The mozilla calendar project, korganizer(in kde), Evolution, Apple's iCal support ics files on remote servers.   The mozilla calendar runs on multiple platforms (including windows) and is the ideal client. 

Security Issues

One of the caveats of placing ical files on a public server so that others can read them is that it may include private data.  Even though some ical programs will not display the private data belonging to others it is still easily readable for those who know to look at the file directly.  This private data needs to be removed for public consumption.  I have written some test scripts which strip out private data from ical files.  This is similar to the freebusy feature of some calendar programs with the exception that the resulting public file is a real ics file that can be treated just like other ics files.  Most calendar programs can display multiple files at the same time so that multiple people's calendars could easily be seen at once with this method.

To facilitate both public and private access to the files the web server would be configured to hand out the public version in non encrypted sessions and the private version when the users accesses the same location with ssl.


There are two levels of security in this spec: private, and public.  It would be nice to allow for groups as well but that requires more overhead and should be dealt with later.

Technical details

Setup Apache:

How to setup the same location being served from both HTTP and HTTPS?
  Ultimately a modperl program will handle this because apache authorization is not fine grained enough to keep people from overwriting each other's calendars when they have access to them.

- .htaccess file in private directory

	<LIMIT PUT POST etc.>
require-user user </LIMIT>
Other users can be given access by adding them to file
	<LIMIT GET etc.>
require-user user other-user </LIMIT>

- Apache directives
Alias /calendars/ "var/www/calendars/public"
<VirtualHost *:443>
Alias /calendars/ "/var/www/calendars/private"
<Directory /var/www/calendars/private>
AllowOverride Limit Indexes
AuthName ""
Require valid-user
</Directory>
</VirtualHost>
will use indexes for now. later a cgi script will only pass out directories that user access to.

Write some helper scripts:
- addCalUser

  1. set ownership of user files to apache
  2. initialize files and .htaccess file for access to:
  3. add user:password to /etc/httpd/auth/calendar.passwd

- deleteCalUser
- importCalendar
put a file in place from a web upload form. The user will authenticate to the site the import script is running from. The import script will put the calendar file in place for the user using the webserver's AUTH or USER environment variables. User will need to specify whether this is a public or private calendar file. User specifiable filename?
- addCalShareUser [read|write] userdir user
adds a user to the .htaccess file in userdir with read/write access
- deleteCalShareUser [read|write] userdir user
deletes a user from the .htaccess file in userdir


Back | Return to .org