sabredav_client 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae2d27dea599feaf7acbd21fbd193654db5cde99
4
- data.tar.gz: 0f9c24649a0c48f8ff7a7f3df0f0b9199db308d2
3
+ metadata.gz: 673012a844fcc49d9bdc6e0d3d26680e038a0d65
4
+ data.tar.gz: 3ef7b59e3f3be1d4dd979b9a11565bdda0b18476
5
5
  SHA512:
6
- metadata.gz: 464a6433ebe8a79b9de028c06abe82baabad0fc2c0b2eb1680eb6d05e5b65bcd211c5f013b7de0eba8012c3046b9d439385cad216feca482e0fa3a1a95e5fd6f
7
- data.tar.gz: 326bc569d1fc23fb613d78137d22fa85746197e6c89494b228dc3b73a815b212457ac914ef35c25e22836471951e4f66f3f48c118c53cce865b63229cdcc3d71
6
+ metadata.gz: 5bde2b10dac16f4ae9115f1822a27244979e14234b9fb216a4b83b13b2fbd32877fc252c54d3ad2bffc7c03209661dd790b0dd293cb42eecf9a60e0df4bf3e6a
7
+ data.tar.gz: 8dda7560901ade742fb28e5b7379f42a55ec9896d9ff341ffa979d43301bd60c3038034c50e440c4a3365d6b832b0941ee5d4f9a2b7011e572fd70b90fdb01fd
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sabredav_client (0.1.0)
4
+ sabredav_client (0.1.1)
5
5
  builder (~> 3.2)
6
6
  net-http-digest_auth (~> 1.4)
7
7
 
@@ -71,6 +71,49 @@ module SabredavClient
71
71
  end
72
72
  end
73
73
 
74
+ def fetch_sharees
75
+ body = SabredavClient::XmlRequestBuilder::PropfindInvite.new.to_xml
76
+ header = {content_type: "application/xml", depth: "0"}
77
+
78
+ req = client.create_request(:propfind, header: header, body: body)
79
+
80
+ res = req.run
81
+
82
+ SabredavClient::Errors::errorhandling(res)
83
+
84
+ sharees = []
85
+ xml = REXML::Document.new(res.body)
86
+
87
+ REXML::XPath.each(xml, "//cs:user/", {"cs"=> "http://calendarserver.org/ns/"}) do |user|
88
+ entry = REXML::Document.new.add(user)
89
+ sharee = {
90
+ href: REXML::XPath.first(entry, "//d:href").text,
91
+ common_name: REXML::XPath.first(entry, "//d:common-name").text
92
+ }
93
+ access = REXML::XPath.first(entry, "//d:access").elements[1].to_s
94
+ sharee[:access] = access.gsub(/\A[<cs:]+|[\/>]+\Z/, "")
95
+
96
+ # So far Sabredav accepts every invite by default
97
+ sharee[:status] = :accepted unless REXML::XPath.first(entry, "//cs:invite-accepted").nil?
98
+ # URI depends on a custom plugin
99
+ begin
100
+ sharee[:uri] = REXML::XPath.first(entry, "//cs:uri").text
101
+ rescue
102
+ #sharee[:uri] = "Property not supported by SabreDAV server"
103
+ end
104
+ sharees.push(sharee)
105
+ end
106
+
107
+ {
108
+ sharees: sharees,
109
+ organizer: {
110
+ href: REXML::XPath.first(xml, "//cs:organizer").elements[2].text,
111
+ uri: REXML::XPath.first(xml, "//cs:uri").text
112
+ }
113
+ }
114
+
115
+ end
116
+
74
117
  def fetch_changes(sync_token)
75
118
 
76
119
  body = SabredavClient::XmlRequestBuilder::ReportEventChanges.new(sync_token).to_xml
@@ -40,6 +40,8 @@ module SabredavClient
40
40
  end
41
41
 
42
42
  def owner(uri)
43
+ # Warning: This is not a standard request. It only works if your sabredav
44
+ # server uses a certain OwnerPlugin
43
45
  header = {content_type: "application/xml"}
44
46
  body = XmlRequestBuilder::PropfindOwner.new.to_xml
45
47
  req = client.create_request(:propfind, path: uri, header: header, body: body)
@@ -47,10 +49,12 @@ module SabredavClient
47
49
 
48
50
  SabredavClient::Errors::errorhandling(res)
49
51
  xml = REXML::Document.new(res.body)
50
- REXML::XPath.first(xml, "//d:objectOwner").text
52
+ REXML::XPath.first(xml, "//cs:objectOwner").text
51
53
  end
52
54
 
53
55
  def update_owner(uri, owner)
56
+ # Warning: This is not a standard request. It only works if your sabredav
57
+ # server uses a certain OwnerPlugin
54
58
  header = {content_type: "application/xml"}
55
59
  body = XmlRequestBuilder::ProppatchOwner.new(owner).to_xml
56
60
  req = client.create_request(:proppatch, path: uri, header: header, body: body)
@@ -1,3 +1,3 @@
1
1
  module SabredavClient
2
- VERSION="0.1.1"
2
+ VERSION="0.1.2"
3
3
  end
@@ -0,0 +1,19 @@
1
+ module SabredavClient
2
+ module XmlRequestBuilder
3
+
4
+ class PropfindInvite < Base
5
+
6
+ def initialize
7
+ super()
8
+ end
9
+
10
+ def to_xml
11
+ xml.d :propfind, CS_NAMESPACES do
12
+ xml.d :prop do
13
+ xml.cs :invite
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -8,9 +8,9 @@ module SabredavClient
8
8
  end
9
9
 
10
10
  def to_xml
11
- xml.d :propfind, NAMESPACE do
11
+ xml.d :propfind, CS_NAMESPACES do
12
12
  xml.d :prop do
13
- xml.d :objectOwner
13
+ xml.cs :objectOwner
14
14
  end
15
15
  end
16
16
  end
@@ -10,10 +10,10 @@ module SabredavClient
10
10
  end
11
11
 
12
12
  def to_xml
13
- xml.d :propertyupdate, NAMESPACE do
13
+ xml.d :propertyupdate, CS_NAMESPACES do
14
14
  xml.d :set do
15
15
  xml.d :prop do
16
- xml.d :objectOwner, owner
16
+ xml.cs :objectOwner, owner
17
17
  end
18
18
  end
19
19
  end
@@ -1,6 +1,6 @@
1
1
  require 'builder'
2
2
 
3
3
  ['base.rb', 'propfind_calendar.rb', 'mkcalendar.rb', 'post_sharing.rb', 'report_vevent.rb', 'report_vtodo.rb', 'mkcol_principal.rb',
4
- 'report_event_changes.rb', 'propfind_owner.rb', 'proppatch_owner.rb'].each do |f|
4
+ 'report_event_changes.rb', 'propfind_owner.rb', 'proppatch_owner.rb', 'propfind_invite.rb'].each do |f|
5
5
  require File.join( File.dirname(__FILE__), 'xml_request_builder', f )
6
6
  end
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0"?>
2
+ <d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/">
3
+ <d:response>
4
+ <d:href>/caldav/server.php/user/calendar/</d:href>
5
+ <d:propstat>
6
+ <d:prop>
7
+ <cs:invite>
8
+ <cs:organizer>
9
+ <cs:uri>D8D498E2-4A98-4DC7-B421-BC49261168AF</cs:uri>
10
+ <d:href>/caldav/server.php/principals/user</d:href>
11
+ </cs:organizer>
12
+ <cs:user>
13
+ <cs:invite-accepted/>
14
+ <cs:access>
15
+ <cs:read/>
16
+ </cs:access>
17
+ <cs:uri>5bffa09e-7220-4688-a13f-088714a98783</cs:uri>
18
+ <d:href>mailto:sharee1@njiuko.com</d:href>
19
+ <cs:common-name>sharee1</cs:common-name>
20
+ </cs:user>
21
+ <cs:user>
22
+ <cs:invite-accepted/>
23
+ <cs:access>
24
+ <cs:write-read/>
25
+ </cs:access>
26
+ <cs:uri>f176b400-f0e4-4a57-bd92-0c307810ce12</cs:uri>
27
+ <d:href>mailto:sharee2@protonet.info</d:href>
28
+ <cs:common-name>sharee2</cs:common-name>
29
+ </cs:user>
30
+ </cs:invite>
31
+ </d:prop>
32
+ <d:status>HTTP/1.1 200 OK</d:status>
33
+ </d:propstat>
34
+ </d:response>
35
+ </d:multistatus>
@@ -4,7 +4,7 @@
4
4
  <d:href>http://localhost:5232/user/calendar/event.ics</d:href>
5
5
  <d:propstat>
6
6
  <d:prop>
7
- <d:objectOwner>principals/usertest</d:objectOwner>
7
+ <cs:objectOwner>principals/usertest</cs:objectOwner>
8
8
  </d:prop>
9
9
  <d:status>HTTP/1.1 200 OK</d:status>
10
10
  </d:propstat>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
+ <d:prop>
4
+ <cs:invite/>
5
+ </d:prop>
6
+ </d:propfind>
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <d:propfind xmlns:d="DAV:">
2
+ <d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
3
  <d:prop>
4
- <d:objectOwner/>
4
+ <cs:objectOwner/>
5
5
  </d:prop>
6
6
  </d:propfind>
@@ -1,8 +1,8 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <d:propertyupdate xmlns:d="DAV:">
2
+ <d:propertyupdate xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
3
  <d:set>
4
4
  <d:prop>
5
- <d:objectOwner>principals/usertest</d:objectOwner>
5
+ <cs:objectOwner>principals/usertest</cs:objectOwner>
6
6
  </d:prop>
7
7
  </d:set>
8
8
  </d:propertyupdate>
@@ -52,7 +52,7 @@ describe SabredavClient::Calendar do
52
52
  end
53
53
  end
54
54
 
55
- describe "shares" do
55
+ describe "sharing" do
56
56
  FakeWeb.register_uri(:post, "http://user@localhost:5232/user/calendar/", [{status: ["200", "OK"]},
57
57
  {status: ["200", "OK"]}])
58
58
  it "is type email" do
@@ -72,6 +72,19 @@ describe SabredavClient::Calendar do
72
72
  r = calendar.share(adds: ["test@test.de"], privilege: "write-read")
73
73
  expect(r).to be(true)
74
74
  end
75
+
76
+ it "fetch_sharees" do
77
+ FakeWeb.register_uri(:propfind, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_sharees.xml') )
78
+
79
+ organizer = {href: "/caldav/server.php/principals/user", uri: "D8D498E2-4A98-4DC7-B421-BC49261168AF"}
80
+ sharees =
81
+ [{href: "mailto:sharee1@njiuko.com", common_name: "sharee1", access: "read", status: :accepted, uri: "5bffa09e-7220-4688-a13f-088714a98783"},
82
+ {href: "mailto:sharee2@protonet.info", common_name: "sharee2", access: "write-read", status: :accepted, uri: "f176b400-f0e4-4a57-bd92-0c307810ce12"}]
83
+ expected_result = {sharees: sharees, organizer: organizer}
84
+
85
+ r = calendar.fetch_sharees
86
+ expect(r).to eq(expected_result)
87
+ end
75
88
  end
76
89
 
77
90
  describe "info" do
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe SabredavClient::XmlRequestBuilder::PropfindInvite do
4
+
5
+ let(:propfind) { described_class.new }
6
+
7
+ describe "#to_xml" do
8
+ let(:expected_xml) { File.read('spec/fixtures/xml_request_builder/propfind_invite.xml') }
9
+
10
+ it "returns a valid xml" do
11
+ expect(propfind.to_xml).to eq(expected_xml)
12
+ end
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sabredav_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Schwartau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-25 00:00:00.000000000 Z
11
+ date: 2016-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -96,6 +96,7 @@ files:
96
96
  - lib/sabredav_client/xml_request_builder/mkcol_principal.rb
97
97
  - lib/sabredav_client/xml_request_builder/post_sharing.rb
98
98
  - lib/sabredav_client/xml_request_builder/propfind_calendar.rb
99
+ - lib/sabredav_client/xml_request_builder/propfind_invite.rb
99
100
  - lib/sabredav_client/xml_request_builder/propfind_owner.rb
100
101
  - lib/sabredav_client/xml_request_builder/proppatch_owner.rb
101
102
  - lib/sabredav_client/xml_request_builder/report_event_changes.rb
@@ -104,6 +105,7 @@ files:
104
105
  - sabredav_client.gemspec
105
106
  - spec/fixtures/calendar_fetch_changes.xml
106
107
  - spec/fixtures/calendar_info.xml
108
+ - spec/fixtures/calendar_sharees.xml
107
109
  - spec/fixtures/event.ics
108
110
  - spec/fixtures/events_find_multiple.xml
109
111
  - spec/fixtures/events_owner.xml
@@ -111,6 +113,7 @@ files:
111
113
  - spec/fixtures/xml_request_builder/mkcol_principal.xml
112
114
  - spec/fixtures/xml_request_builder/post_sharing.xml
113
115
  - spec/fixtures/xml_request_builder/propfind_calendar/all_properties.xml
116
+ - spec/fixtures/xml_request_builder/propfind_invite.xml
114
117
  - spec/fixtures/xml_request_builder/propfind_owner.xml
115
118
  - spec/fixtures/xml_request_builder/proppatch_owner.xml
116
119
  - spec/fixtures/xml_request_builder/report_event_changes.xml
@@ -124,6 +127,7 @@ files:
124
127
  - spec/sabredav_client/xml_request_builder_specs/mkcol_principal_spec.rb
125
128
  - spec/sabredav_client/xml_request_builder_specs/post_sharing_spec.rb
126
129
  - spec/sabredav_client/xml_request_builder_specs/propfind_calendar_spec.rb
130
+ - spec/sabredav_client/xml_request_builder_specs/propfind_invite_spec.rb
127
131
  - spec/sabredav_client/xml_request_builder_specs/propfind_owner_spec.rb
128
132
  - spec/sabredav_client/xml_request_builder_specs/proppatch_owner_spec.rb
129
133
  - spec/sabredav_client/xml_request_builder_specs/report_event_changes_spec.rb