On May 2, 2011, at 12:29 PM, John Clark wrote: > HI > > I am building an online appointments app which I would like to integrate with > ical. > > The biggest issue I'm having is that while I can get a script to connect and > log in via CalDav, I can't get to a specific calendar in order to test adding > & removing. Essentially I can connect to your iCal instance > viahttps://cal.me.com/principals/users/[email protected]/ and theusername / > password however all this gives me is a directory overview page (perhaps for > file storage?) and does not allow me to access any other folders as far as I > can work out. > > The problem seems to be that to access a calendar you need to use a specific > url in a specific format but I can't seem to find that online. > > Is there anyone out there that can help?
This list is focused on iCal Server as opposed to Mobile Me's services, but this question seems fairly generic... We (iCal Server) have a diagnostic tool called CalDAVClientLibrary, which provides an interactive CalDAV command-line shell - useful for exploring CalDAV services. When I connect to my mobile me calendar, I see: ./runshell.py --server https://cal.me.com/principals/users/[email protected]/ User: dre Password: / > ls (no results) Against an iCal Server, the 'ls' would have displayed the server's document root: andre@xomg[CalendarServer/CalDAVClientLibrary]./runshell.py --server https://redacted.lompywickets.com User: dre Password: / > ls .calendarserver_version .well-known/ addressbooks/ admin/ calendars/ directory/ principals/ timezones webcal/ Digging around a bit, I think I have a method (but perhaps not the correct / expected method) to find the user's mobile me calendars. 1) Log in with CalDAVClientLibrary, get properties for the document root: andre@xomg[CalendarServer/CalDAVClientLibrary]./runshell.py --server https://cal.me.com User: [email protected] Password: / > props / OK Properties: {DAV:}acl-restrictions: {DAV:}creationdate: 2011-05-02T13:23:59Z {DAV:}current-user-principal: URL: /principals/users/1.9979107/ {DAV:}current-user-privilege-set: <Element '{DAV:}current-user-privilege-set' at 0x10e3852d0> {DAV:}displayname: tmp {DAV:}getcontentlength: {DAV:}getcontenttype: httpd/unix-directory {DAV:}getetag: "9E0001-1000-4DBF12DF" {DAV:}getlastmodified: Mon, 02 May 2011 13:23:59 GMT {DAV:}inherited-acl-set: {DAV:}principal-collection-set: URL: /principals/ {DAV:}resourcetype: <Element '{DAV:}resourcetype' at 0x10e387710> {DAV:}supported-privilege-set: <Element '{DAV:}supported-privilege-set' at 0x10e385990> {DAV:}supported-report-set: <Element '{DAV:}supported-report-set' at 0x10e387c90> {DAV:}supportedlock: <Element '{DAV:}supportedlock' at 0x10e387890> {http://twistedmatrix.com/xml_namespace/dav/}resource-class: MMRootResource Failed Properties: {DAV:}acl: 401 2) Observe the value of the current-user-principal attribute. In my case, /principals/users/1.9979107/ I'm not sure what that number is called or how it's derived, but it's probably specified in some spec somewhere :) Anyway, onward: 3) Use the 'user number' as the last component of a /calendars/users/ path, as shown here: / > cd /calendars/users/1.9979107 /calendars/users/1.9979107 > ls BBE4AA14-58E6-46F3-B0E7-B86F66E81390/ M2CD-1-1-6981CC60-E068-44C4-AA9B-6F65C8F25764/ inbox/ notification/ Now we see my calendars. You can see the http traffic by issuing the 'logging' command within CalDAVClientLibrary as shown below. Be advised that the string shown in the Authorization: Basic line contains sensitive information and should be obfuscated prior to 'sharing' :) /calendars/users/1.9979107 > props / <-------- BEGIN HTTP CONNECTION --------> Server: cal.me.com <-------- BEGIN HTTP REQUEST --------> PROPFIND / HTTP/1.1 Host: cal.me.com:443 Authorization: Basic ZHALSO89D7FREDACTED879MORE8445WICKETS88THAT88AREW45RLOMPYMjY= Content-Length: 110 Content-Type: text/xml; charset=utf-8 Depth: 0 <?xml version='1.0' encoding='utf-8'?> <ns0:propfind xmlns:ns0="DAV:"> <ns0:propname /> </ns0:propfind> <-------- BEGIN HTTP RESPONSE --------> HTTP/1.1 207 Multi-Status Content-Length: 547 Accept-Ranges: bytes Server: MobileMeCalendarServer 1C78 Last-Modified: Mon, 02 May 2011 20:26:37 GMT DAV: 1, access-control, calendar-access, calendar-schedule, calendar-auto-schedule, calendarserver-sharing, calendarserver-subscribed, calendarserver-principal-property-search ETag: "9E0001-1000-4DBF137D" Date: Mon, 02 May 2011 20:28:12 GMT X-Transaction-Id: nk11r10me-calsvr026-9-1303950232-3081494 X-Responding-Server: nk11r10me-calsvr026 9 Content-Type: text/xml <?xml version='1.0' encoding='UTF-8'?><multistatus xmlns='DAV:'><response><href>/</href><propstat><prop><getlastmodified/><supportedlock/><acl-restrictions/><acl/><current-user-privilege-set/><resource-class xmlns='http://twistedmatrix.com/xml_namespace/dav/'/><supported-report-set/><principal-collection-set/><getetag/><displayname/><inherited-acl-set/><creationdate/><resourcetype/><getcontentlength/><current-user-principal/><getcontenttype/><supported-privilege-set/></prop><status>HTTP/1.1 200 OK</status></propstat></response></multistatus> <-------- END HTTP RESPONSE --------> <-------- END HTTP CONNECTION --------> <-------- BEGIN HTTP CONNECTION --------> Server: cal.me.com <-------- BEGIN HTTP REQUEST --------> PROPFIND / HTTP/1.1 Host: cal.me.com:443 Authorization: Basic ZHALSO89D7FREDACTED879MORE8445WICKETS88THAT88AREW45RLOMPYMjY= Content-Length: 678 Content-Type: text/xml; charset=utf-8 Depth: 0 <?xml version='1.0' encoding='utf-8'?> <ns0:propfind xmlns:ns0="DAV:"> <ns0:prop> <ns0:principal-collection-set /> <ns0:creationdate /> <ns0:current-user-privilege-set /> <ns0:acl-restrictions /> <ns0:current-user-principal /> <ns0:getlastmodified /> <ns0:supported-privilege-set /> <ns0:getcontenttype /> <ns0:resourcetype /> <ns0:getetag /> <ns0:inherited-acl-set /> <ns0:supportedlock /> <ns0:displayname /> <ns0:getcontentlength /> <ns1:resource-class xmlns:ns1="http://twistedmatrix.com/xml_namespace/dav/" /> <ns0:acl /> <ns0:supported-report-set /> </ns0:prop> </ns0:propfind> <-------- BEGIN HTTP RESPONSE --------> HTTP/1.1 207 Multi-Status Content-Length: 3200 Accept-Ranges: bytes Server: MobileMeCalendarServer 1C78 Last-Modified: Mon, 02 May 2011 20:26:34 GMT DAV: 1, access-control, calendar-access, calendar-schedule, calendar-auto-schedule, calendarserver-sharing, calendarserver-subscribed, calendarserver-principal-property-search ETag: "1DE0001-1000-4DBF137A" Date: Mon, 02 May 2011 20:28:13 GMT X-Transaction-Id: nk11r10me-calsvr002-7-1303949901-4344863 X-Responding-Server: nk11r10me-calsvr002 7 Content-Type: text/xml <?xml version='1.0' encoding='UTF-8'?><multistatus xmlns='DAV:'><response><href>/</href><propstat><prop><principal-collection-set><href>/principals/</href></principal-collection-set><creationdate>2011-05-02T13:26:34Z</creationdate><current-user-privilege-set><privilege><read/></privilege><privilege><read-current-user-privilege-set/></privilege></current-user-privilege-set><acl-restrictions/><current-user-principal><href>/principals/users/1.9979107/</href></current-user-principal><getlastmodified>Mon, 02 May 2011 13:26:34 GMT</getlastmodified><supported-privilege-set><supported-privilege><privilege><all/></privilege><description xml:lang='en'>all privileges</description><supported-privilege><privilege><read/></privilege><description xml:lang='en'>read resource</description></supported-privilege><supported-privilege><privilege><write/></privilege><description xml:lang='en'>write resource</description><supported-privilege><privilege><write-properties/></privilege><description xml:lang='en'>write resource properties</description></supported-privilege><supported-privilege><privilege><write-content/></privilege><description xml:lang='en'>write resource content</description></supported-privilege><supported-privilege><privilege><bind/></privilege><description xml:lang='en'>add child resource</description></supported-privilege><supported-privilege><privilege><unbind/></privilege><description xml:lang='en'>remove child resource</description></supported-privilege></supported-privilege><supported-privilege><privilege><unlock/></privilege><description xml:lang='en'>unlock resource without ownership of lock</description></supported-privilege><supported-privilege><privilege><read-acl/></privilege><description xml:lang='en'>read resource access control list</description></supported-privilege><supported-privilege><privilege><write-acl/></privilege><description xml:lang='en'>write resource access control list</description></supported-privilege><supported-privilege><privilege><read-current-user-privilege-set/></privilege><description xml:lang='en'>read privileges for current principal</description></supported-privilege></supported-privilege></supported-privilege-set><getcontenttype>httpd/unix-directory</getcontenttype><resourcetype><collection/></resourcetype><getetag>"1DE0001-1000-4DBF137A"</getetag><inherited-acl-set/><supportedlock><lockentry><lockscope><exclusive/></lockscope><locktype><write/></locktype></lockentry><lockentry><lockscope><shared/></lockscope><locktype><write/></locktype></lockentry></supportedlock><displayname>tmp</displayname><getcontentlength/><resource-class xmlns='http://twistedmatrix.com/xml_namespace/dav/'>MMRootResource</resource-class><supported-report-set><supported-report><report><acl-principal-prop-set/></report></supported-report><supported-report><report><principal-match/></report></supported-report><supported-report><report><principal-property-search/></report></supported-report><supported-report><report><expand-property/></report></supported-report></supported-report-set></prop><status>HTTP/1.1 200 OK</status></propstat><propstat><prop><acl/></prop><status>HTTP/1.1 401 Unauthorized</status></propstat></response></multistatus> <-------- END HTTP RESPONSE --------> <-------- END HTTP CONNECTION --------> OK Properties: {DAV:}acl-restrictions: {DAV:}creationdate: 2011-05-02T13:26:34Z {DAV:}current-user-principal: URL: /principals/users/1.9979107/ {DAV:}current-user-privilege-set: <Element '{DAV:}current-user-privilege-set' at 0x10e385590> {DAV:}displayname: tmp {DAV:}getcontentlength: {DAV:}getcontenttype: httpd/unix-directory {DAV:}getetag: "1DE0001-1000-4DBF137A" {DAV:}getlastmodified: Mon, 02 May 2011 13:26:34 GMT {DAV:}inherited-acl-set: {DAV:}principal-collection-set: URL: /principals/ {DAV:}resourcetype: <Element '{DAV:}resourcetype' at 0x10e38b750> {DAV:}supported-privilege-set: <Element '{DAV:}supported-privilege-set' at 0x10e2f9e10> {DAV:}supported-report-set: <Element '{DAV:}supported-report-set' at 0x10e38b110> {DAV:}supportedlock: <Element '{DAV:}supportedlock' at 0x10e38b490> {http://twistedmatrix.com/xml_namespace/dav/}resource-class: MMRootResource Failed Properties: {DAV:}acl: 401 /calendars/users/1.9979107 > HTH, -dre > > REgards > > > JOhn > > _______________________________________________ > calendarserver-users mailing list > [email protected] > http://lists.macosforge.org/mailman/listinfo.cgi/calendarserver-users
_______________________________________________ calendarserver-users mailing list [email protected] http://lists.macosforge.org/mailman/listinfo.cgi/calendarserver-users
