CalDAV calendar component in Lucee ColdFusion

Job ID: 33515458

Budget: $30 – $250 USD

I need a CalDAV component ( caldav.cfc ) written in Lucee ColdFusion that will interact with a CalDAV server to do the following

1. retrieve all calendars
2. retrieve all events per calendar
3. add event(s) to a calendar
4. delete event(s) from a calendar
5. update event(s) in a calendar
6. all retrieved events need to be parsed into a JSON format
7. when adding/editing events need to accept a JSON format as input


An example of the expected flow
===========================

// instantiation
var cdc = new Caldav(
server_url = "https://pxx-caldav.icloud.com/USER_ID/calendars",
username = "email",
password = "ABC123CDF"
);

----------------

// get all calendars
var calendars = cdc.getCalendars();

// => output
[
{ id:123, name:"Home Calendar", ... },
{ id:456, name:"John's Calendar", ... },
...
]

----------------

// add event to calendar
var event = {
id: 136,
start_date: "2022-04-21T10:30:00-04:00",
exp_date: "2022-04-21T12:00:00-04:00",
name: "Meeting with John Doe",
room: "Vxxt4HyoqBhQFXCGMBT4RC",
timezone: "US/Eastern"
};
cdc.setCalendarId(123);
cdc.addEvent(event);

----------------

// remove event from calendar
cdc.setCalendarId(123);
cdc.removeEventById(136);

----------------

// get event(s)
cdc.setCalendarId(123);
cdc.getEvents({
start_date: "2022-04-21T00:00:00-04:00",
exp_date: "2022-04-22T00:00:00-04:00",
});

// => outout
[
{
id:136,
calendar_id:123,
name:"Meeting with John Doe",
start_date:"2022-04-21T10:30:00-04:00',
exp_date:"2022-04-21T12:00:00-04:00",
...
},
{ id:137, calendar_id:123, name:"Breakfast Meeting", ... },
...
]

----------------

// get event by id
cdc.setCalendarId(123);
cdc.getEventById(136);

// => same output as from cfc.getEvents()


........

==> other methods are to be used in the similar fashion!


***** Side Note ******
==================
I would prefer for the component to be written in pure Lucee ColdFusion, however, I am OK with using the main functionality to be written in java as long as it compiles into a single .JAR file.