class Tilia::CalDav::Schedule::Inbox

The CalDAV scheduling inbox

Public Class Methods

new(caldav_backend, principal_uri) click to toggle source

Constructor

@param BackendSchedulingSupport caldav_backend @param string principal_uri

# File lib/tilia/cal_dav/schedule/inbox.rb, line 24
def initialize(caldav_backend, principal_uri)
  @caldav_backend = caldav_backend
  @principal_uri = principal_uri
end

Public Instance Methods

acl() click to toggle source

Returns a list of ACE's for this node.

Each ACE has the following properties:

* 'privilege', a string such as {DAV:}read or {DAV:}write. These are
  currently the only supported privileges
* 'principal', a url to the principal who owns the node
* 'protected' (optional), indicating that this ACE is not allowed to
   be updated.

@return array

# File lib/tilia/cal_dav/schedule/inbox.rb, line 107
def acl
  [
    {
      'privilege' => '{DAV:}read',
      'principal' => '{DAV:}authenticated',
      'protected' => true
    },
    {
      'privilege' => '{DAV:}write-properties',
      'principal' => owner,
      'protected' => true
    },
    {
      'privilege' => '{DAV:}unbind',
      'principal' => owner,
      'protected' => true
    },
    {
      'privilege' => '{DAV:}unbind',
      'principal' => owner + '/calendar-proxy-write',
      'protected' => true
    },
    {
      'privilege' => "{#{Plugin::NS_CALDAV}}schedule-deliver-invite",
      'principal' => '{DAV:}authenticated',
      'protected' => true
    },
    {
      'privilege' => "{#{Plugin::NS_CALDAV}}schedule-deliver-reply",
      'principal' => '{DAV:}authenticated',
      'protected' => true
    }
  ]
end
acl=(_acl) click to toggle source

Updates the ACL

This method will receive a list of new ACE's.

@param array acl @return void

# File lib/tilia/cal_dav/schedule/inbox.rb, line 148
def acl=(_acl)
  fail Dav::Exception::MethodNotAllowed, 'You\'re not allowed to update the ACL'
end
calendar_query(filters) click to toggle source

Performs a calendar-query on the contents of this calendar.

The calendar-query is defined in RFC4791 : CalDAV. Using the calendar-query it is possible for a client to request a specific set of object, based on contents of iCalendar properties, date-ranges and iCalendar component types (VTODO, VEVENT).

This method should just return a list of (relative) urls that match this query.

The list of filters are specified as an array. The exact array is documented by SabreCalDAVCalendarQueryParser.

@param array filters @return array

# File lib/tilia/cal_dav/schedule/inbox.rb, line 192
def calendar_query(filters)
  result = []
  validator = CalendarQueryValidator.new

  objects = @caldav_backend.scheduling_objects(@principal_uri)
  objects.each do |object|
    v_object = VObject::Reader.read(object['calendardata'])

    result << object['uri'] if validator.validate(v_object, filters)

    # Destroy circular references to PHP will GC the object.
    v_object.destroy
  end

  result
end
children() click to toggle source

Returns an array with all the child nodes

@return SabreDAVINode[]

# File lib/tilia/cal_dav/schedule/inbox.rb, line 41
def children
  objs = @caldav_backend.scheduling_objects(@principal_uri)
  children = []
  objs.each do |obj|
    # obj['acl'] = self.get_acl
    obj['principaluri'] = @principal_uri
    children << SchedulingObject.new(@caldav_backend, obj)
  end

  children
end
create_file(name, data = nil) click to toggle source

Creates a new file in the directory

Data will either be supplied as a stream resource, or in certain cases as a string. Keep in mind that you may have to support either.

After succesful creation of the file, you may choose to return the ETag of the new file here.

The returned ETag must be surrounded by double-quotes (The quotes should be part of the actual string).

If you cannot accurately determine the ETag, you should not return it. If you don't store the file exactly as-is (you're transforming it somehow) you should also not return an ETag.

This means that if a subsequent GET to this new file does not exactly return the same contents of what was submitted here, you are strongly recommended to omit the ETag.

@param string name Name of the file @param resource|string data Initial payload @return null|string

# File lib/tilia/cal_dav/schedule/inbox.rb, line 75
def create_file(name, data = nil)
  @caldav_backend.create_scheduling_object(@principal_uri, name, data)
end
group() click to toggle source

Returns a group principal

This must be a url to a principal, or null if there's no owner

@return string|null

# File lib/tilia/cal_dav/schedule/inbox.rb, line 93
def group
  nil
end
name() click to toggle source

Returns the name of the node.

This is used to generate the url.

@return string

# File lib/tilia/cal_dav/schedule/inbox.rb, line 34
def name
  'inbox'
end
owner() click to toggle source

Returns the owner principal

This must be a url to a principal, or null if there's no owner

@return string|null

# File lib/tilia/cal_dav/schedule/inbox.rb, line 84
def owner
  @principal_uri
end
supported_privilege_set() click to toggle source

Returns the list of supported privileges for this node.

The returned data structure is a list of nested privileges. See SabreDAVACLPlugin::getDefaultSupportedPrivilegeSet for a simple standard structure.

If null is returned from this method, the default privilege set is used, which is fine for most common usecases.

@return array|null

# File lib/tilia/cal_dav/schedule/inbox.rb, line 162
def supported_privilege_set
  ns = "{#{Plugin::NS_CALDAV}}"

  default = DavAcl::Plugin.default_supported_privilege_set
  default['aggregates'] << {
    'privilege'  => "#{ns}schedule-deliver",
    'aggregates' => [
      { 'privilege' => "#{ns}schedule-deliver-invite" },
      { 'privilege' => "#{ns}schedule-deliver-reply" }
    ]
  }

  default
end