diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2016-02-19 12:15:47 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-02-19 14:33:57 +0100 |
commit | 9682b588375440922151f87a64f327f6e01fd2b7 (patch) | |
tree | 8903b2737fb9d0a367ebe105f595b84015929613 /js/dav | |
parent | 8121297a9671ce9d236683c4b934b49a709c7797 (diff) |
dav.js: adding propfind properties for groups, invites and owner
Diffstat (limited to 'js/dav')
-rw-r--r-- | js/dav/dav.js | 35 | ||||
-rw-r--r-- | js/dav/lib/contacts.js | 5 | ||||
-rw-r--r-- | js/dav/lib/namespace.js | 1 | ||||
-rw-r--r-- | js/dav/lib/parser.js | 15 | ||||
-rw-r--r-- | js/dav/lib/template/prop.js | 2 | ||||
-rw-r--r-- | js/dav/lib/template/propfind.js | 1 | ||||
-rw-r--r-- | js/dav/test/unit/data/index.js | 1 | ||||
-rw-r--r-- | js/dav/test/unit/data/propfind_oc.xml | 37 | ||||
-rw-r--r-- | js/dav/test/unit/parser_test.js | 27 |
9 files changed, 119 insertions, 5 deletions
diff --git a/js/dav/dav.js b/js/dav/dav.js index 628d0bc6..702fb8f6 100644 --- a/js/dav/dav.js +++ b/js/dav/dav.js @@ -1601,7 +1601,9 @@ var listAddressBooks = _co2['default'].wrap(regeneratorRuntime.mark(function cal case 0: debug('Fetch address books from home url ' + account.homeUrl); req = request.propfind({ - props: [{ name: 'displayname', namespace: ns.DAV }, { name: 'getctag', namespace: ns.CALENDAR_SERVER }, { name: 'resourcetype', namespace: ns.DAV }, { name: 'sync-token', namespace: ns.DAV }], + props: [{ name: 'displayname', namespace: ns.DAV }, { name: 'owner', namespace: ns.DAV }, { name: 'getctag', namespace: ns.CALENDAR_SERVER }, { name: 'resourcetype', namespace: ns.DAV }, { name: 'sync-token', namespace: ns.DAV }, + //{ name: 'groups', namespace: ns.OC }, + { name: 'invite', namespace: ns.OC }], depth: 1 }); context$1$0.next = 4; @@ -2259,6 +2261,8 @@ var CARDDAV = 'urn:ietf:params:xml:ns:carddav'; exports.CARDDAV = CARDDAV; var DAV = 'DAV:'; exports.DAV = DAV; +var OC = 'http://owncloud.org/ns'; +exports.OC = OC; },{}],11:[function(require,module,exports){ 'use strict'; @@ -2318,7 +2322,9 @@ var traverse = { resourcetype: false, supportedCalendarComponentSet: false, supportedReportSet: false, - currentUserPrincipal: false + currentUserPrincipal: false, + groups: false, + invite: false }); }, @@ -2328,6 +2334,27 @@ var traverse = { }); }, + groups: function groups(node) { + return complex(node, { group: true }, 'group'); + }, + group: function group(node) { + return childNodes(node).map(function (childNode) { + return childNode.nodeValue; + }); + }, + invite: function invite(node) { + return complex(node, { user: true }, 'user'); + }, + user: function user(node) { + return complex(node, { href: false, access: false }); + }, + access: function access(node) { + return complex(node, {}); + }, + //access: node => { + // return childNodes(node).map(childNode => childNode.localName); + //}, + // [x, y, z] supportedCalendarComponentSet: function supportedCalendarComponentSet(node) { return complex(node, { comp: true }, 'comp'); @@ -2943,6 +2970,8 @@ function xmlnsPrefix(namespace) { return 'c'; case ns.CARDDAV: return 'card'; + case ns.OC: + return 'oc'; default: throw new Error('Unrecognized xmlns ' + namespace); } @@ -2963,7 +2992,7 @@ var _prop = require('./prop'); var _prop2 = _interopRequireDefault(_prop); function propfind(object) { - return '<d:propfind xmlns:c="urn:ietf:params:xml:ns:caldav"\n xmlns:card="urn:ietf:params:xml:ns:carddav"\n xmlns:cs="http://calendarserver.org/ns/"\n xmlns:d="DAV:">\n <d:prop>\n ' + object.props.map(_prop2['default']) + '\n </d:prop>\n </d:propfind>'; + return '<d:propfind xmlns:c="urn:ietf:params:xml:ns:caldav"\n xmlns:card="urn:ietf:params:xml:ns:carddav"\n xmlns:cs="http://calendarserver.org/ns/"\n xmlns:oc="http://owncloud.org/ns"\n xmlns:d="DAV:">\n <d:prop>\n ' + object.props.map(_prop2['default']) + '\n </d:prop>\n </d:propfind>'; } module.exports = exports['default']; diff --git a/js/dav/lib/contacts.js b/js/dav/lib/contacts.js index b333c4c5..e20acf6b 100644 --- a/js/dav/lib/contacts.js +++ b/js/dav/lib/contacts.js @@ -17,9 +17,12 @@ export let listAddressBooks = co.wrap(function *(account, options) { var req = request.propfind({ props: [ { name: 'displayname', namespace: ns.DAV }, + { name: 'owner', namespace: ns.DAV }, { name: 'getctag', namespace: ns.CALENDAR_SERVER }, { name: 'resourcetype', namespace: ns.DAV }, - { name: 'sync-token', namespace: ns.DAV } + { name: 'sync-token', namespace: ns.DAV }, + //{ name: 'groups', namespace: ns.OC }, + { name: 'invite', namespace: ns.OC } ], depth: 1 }); diff --git a/js/dav/lib/namespace.js b/js/dav/lib/namespace.js index da37fecb..6a49801b 100644 --- a/js/dav/lib/namespace.js +++ b/js/dav/lib/namespace.js @@ -2,3 +2,4 @@ export const CALENDAR_SERVER = 'http://calendarserver.org/ns/'; export const CALDAV = 'urn:ietf:params:xml:ns:caldav'; export const CARDDAV = 'urn:ietf:params:xml:ns:carddav'; export const DAV = 'DAV:'; +export const OC = 'http://owncloud.org/ns'; diff --git a/js/dav/lib/parser.js b/js/dav/lib/parser.js index 2db089c3..d463d793 100644 --- a/js/dav/lib/parser.js +++ b/js/dav/lib/parser.js @@ -39,7 +39,9 @@ let traverse = { resourcetype: false, supportedCalendarComponentSet: false, supportedReportSet: false, - currentUserPrincipal: false + currentUserPrincipal: false, + groups: false, + invite: false }); }, @@ -47,6 +49,17 @@ let traverse = { return childNodes(node).map(childNode => childNode.localName); }, + groups: node => complex(node, { group: true }, 'group'), + group: node => { + return childNodes(node).map(childNode => childNode.nodeValue); + }, + invite: node => complex(node, { user: true }, 'user'), + user: node => complex(node, { href: false, access:false }), + access: node => complex(node, {}), + //access: node => { + // return childNodes(node).map(childNode => childNode.localName); + //}, + // [x, y, z] supportedCalendarComponentSet: node => complex(node, { comp: true }, 'comp'), diff --git a/js/dav/lib/template/prop.js b/js/dav/lib/template/prop.js index b04258cf..def9e9bc 100644 --- a/js/dav/lib/template/prop.js +++ b/js/dav/lib/template/prop.js @@ -59,6 +59,8 @@ function xmlnsPrefix(namespace) { return 'c'; case ns.CARDDAV: return 'card'; + case ns.OC: + return 'oc'; default: throw new Error('Unrecognized xmlns ' + namespace); } diff --git a/js/dav/lib/template/propfind.js b/js/dav/lib/template/propfind.js index eae4fe01..acc27918 100644 --- a/js/dav/lib/template/propfind.js +++ b/js/dav/lib/template/propfind.js @@ -4,6 +4,7 @@ export default function propfind(object) { return `<d:propfind xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:card="urn:ietf:params:xml:ns:carddav" xmlns:cs="http://calendarserver.org/ns/" + xmlns:oc="http://owncloud.org/ns" xmlns:d="DAV:"> <d:prop> ${object.props.map(prop)} diff --git a/js/dav/test/unit/data/index.js b/js/dav/test/unit/data/index.js index 627a39b6..2394dffc 100644 --- a/js/dav/test/unit/data/index.js +++ b/js/dav/test/unit/data/index.js @@ -11,6 +11,7 @@ export default docs; 'current_user_principal', 'calendar_query', 'propfind', + 'propfind_oc', 'sync_collection' ].forEach(function(responseType) { var camelCase = camelize(responseType); diff --git a/js/dav/test/unit/data/propfind_oc.xml b/js/dav/test/unit/data/propfind_oc.xml new file mode 100644 index 00000000..f233be04 --- /dev/null +++ b/js/dav/test/unit/data/propfind_oc.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8"?> +<d:multistatus xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns/"> + <d:response> + <d:href>/calendars/admin/</d:href> + <d:propstat> + <d:prop> + <d:owner> + <d:href>/remote.php/dav/principals/users/admin/</d:href> + </d:owner> + <oc:groups> + <oc:group>Friends</oc:group> + <oc:group>Co-Workers</oc:group> + </oc:groups> + <oc:invite> + <oc:user> + <d:href>principal:principals/users/user01</d:href> + <oc:common-name>user01</oc:common-name> + <oc:invite-accepted/> + <oc:access> + + <oc:read/> + </oc:access> + </oc:user> + <oc:user> + <d:href>principal:principals/users/user02</d:href> + <oc:common-name>user02</oc:common-name> + <oc:invite-accepted/> + <oc:access> + <oc:read/> + </oc:access> + </oc:user> + </oc:invite> + </d:prop> + <d:status>HTTP/1.1 200 OK</d:status> + </d:propstat> + </d:response> +</d:multistatus> diff --git a/js/dav/test/unit/parser_test.js b/js/dav/test/unit/parser_test.js index bd879d71..bbeeaf52 100644 --- a/js/dav/test/unit/parser_test.js +++ b/js/dav/test/unit/parser_test.js @@ -63,4 +63,31 @@ suite('parser.multistatus', function() { syncToken: 'http://sabre.io/ns/sync/3' }); }); + + test('propfind (oc-groups and oc-invites)', function() { + let propfind = data.propfindOc; + assert.deepEqual(multistatus(propfind), { + response: [{ + href: '/calendars/admin/', + propstat: [{ + prop: { + owner: '/remote.php/dav/principals/users/admin/', + invite: [{ + href: 'principal:principals/users/user01', + access: {'read':''}, + commonName: 'user01', + inviteAccepted: '' + }, { + href: 'principal:principals/users/user02', + access: {'read':''}, + commonName: 'user02', + inviteAccepted: '' + }], + groups: ['Friends', 'Co-Workers'] + }, + status: 'HTTP/1.1 200 OK' + }] + }], + }); + }); }); |