diff options
Diffstat (limited to 'lib/caldav/request/calendar_home.js')
-rw-r--r-- | lib/caldav/request/calendar_home.js | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/lib/caldav/request/calendar_home.js b/lib/caldav/request/calendar_home.js index d0659bb..e7bed35 100644 --- a/lib/caldav/request/calendar_home.js +++ b/lib/caldav/request/calendar_home.js @@ -1,7 +1,7 @@ (function(module, ns) { - var Errors = ns.require('request/errors'); - + var RequestErrors = ns.require('errors'); + /** * Creates a propfind request. * @@ -72,19 +72,32 @@ return; } - principal = findProperty('current-user-principal', data, true); + // some fairly dumb allowances + principal = + findProperty('current-user-principal', data, true) || + findProperty('principal-URL', data, true); if (!principal) { - principal = findProperty('principal-URL', data, true); + return callback(new Errors.InvalidEntrypoint( + 'both current-user-principal and principal-URL are missing' + )); } + // per http://tools.ietf.org/html/rfc6638 we get unauthenticated if ('unauthenticated' in principal) { - callback(new Errors.UnauthenticatedError()); - } else if (principal.href) { - callback(null, principal.href); - } else { - callback(new Errors.CaldavHttpError(404)); + return callback( + new Errors.Authentication('caldav response is unauthenticated') + ); + } + + // we might have both principal.href & unauthenticated + if (principal.href) { + return callback(null, principal.href); } + + callback( + new Errors.InvalidEntrypoint('no useful location information found') + ); }); }, |