1 = Resources = 2 3 In imip-agent, resources are a special kind of user that act upon requests 4 to schedule events and that perform such scheduling autonomously, meaning 5 that no human intervention is necessary when such resources receive messages 6 containing invitations. 7 8 By default, the [[../AgentPrograms|agent program]] responsible for resources 9 merely attempts to fit a received event into the resource's schedule. However, 10 in some organisations and environments, it is likely to be the case that other 11 policies are needed to ensure that a resource is not misused, overused or made 12 unnecessarily unavailable. 13 14 The [[../Preferences|preferences]] provide a way of controlling the behaviour 15 of resources, just as with any other kind of user, but certain preferences 16 are central to the configuration of resources. 17 18 <<TableOfContents(2,4)>> 19 20 == Scheduling Functions == 21 22 The [[../Preferences#scheduling_function|scheduling_function]] setting 23 indicates the behaviour of a resource when a valid request to schedule an 24 event has been received. By default, a value equivalent to the following is 25 employed: 26 27 {{{{#!table 28 '''Scheduling Functions''' || '''Decision Process''' 29 == 30 <style="vertical-align: top;"> 31 32 {{{ 33 schedule_in_freebusy 34 }}} 35 36 || 37 38 {{{#!graphviz 39 //format=svg 40 //transform=notugly 41 digraph scheduling_decisions { 42 node [shape=box,fontsize="13.0",fontname="Helvetica",tooltip="Scheduling decisions"]; 43 edge [tooltip="Scheduling decisions"]; 44 45 mail [label="Incoming mail",shape=folder,style=filled,fillcolor=cyan]; 46 47 subgraph { 48 rank=same; 49 schedule_in_freebusy [label="Can schedule in free/busy?",shape=ellipse,style=filled,fillcolor=gold]; 50 freebusy [label="Free/busy",shape=folder]; 51 } 52 53 schedule [label="Schedule event for resource",shape=ellipse,style=filled,fillcolor=gold]; 54 accept [label="Accept",shape=folder,style=filled,fillcolor=cyan]; 55 decline [label="Decline",shape=folder,style=filled,fillcolor=cyan]; 56 57 mail -> schedule_in_freebusy -> schedule -> accept; 58 schedule_in_freebusy -> decline [style=dashed]; 59 freebusy -> schedule_in_freebusy; 60 } 61 }}} 62 63 }}}} 64 65 As described above, this merely attempts to schedule an event in the free 66 periods of the resource's schedule. However, no attempt is made to reject the 67 booking of the resource according to the identity of the organiser. 68 69 === Identity Controls === 70 71 Although identity controls may be implemented in the e-mail system, 72 effectively preventing the messages from addresses other than those within 73 an organisation (for example) from being delivered to the resource, it is 74 possible to use scheduling functions to implement such controls instead. 75 76 ==== Same Domain Membership ==== 77 78 For instance, the following combines the default free/busy check with a 79 test that the organiser belongs to the same Internet mail domain (by using 80 the organiser's address): 81 82 {{{{#!table 83 '''Scheduling Functions''' || '''Decision Process''' 84 == 85 <style="vertical-align: top;"> 86 87 {{{ 88 schedule_in_freebusy 89 same_domain_only 90 }}} 91 92 || 93 94 {{{#!graphviz 95 //format=svg 96 //transform=notugly 97 digraph scheduling_decisions { 98 node [shape=box,fontsize="13.0",fontname="Helvetica",tooltip="Scheduling decisions"]; 99 edge [tooltip="Scheduling decisions"]; 100 101 mail [label="Incoming mail",shape=folder,style=filled,fillcolor=cyan]; 102 103 subgraph { 104 rank=same; 105 schedule_in_freebusy [label="Can schedule in free/busy?",shape=ellipse,style=filled,fillcolor=gold]; 106 freebusy [label="Free/busy",shape=folder]; 107 } 108 109 same_domain_only [label="Organiser has resource domain?",shape=ellipse,style=filled,fillcolor=gold]; 110 111 schedule [label="Schedule event for resource",shape=ellipse,style=filled,fillcolor=gold]; 112 accept [label="Accept",shape=folder,style=filled,fillcolor=cyan]; 113 decline [label="Decline",shape=folder,style=filled,fillcolor=cyan]; 114 115 mail -> schedule_in_freebusy -> same_domain_only -> schedule -> accept; 116 schedule_in_freebusy -> decline [style=dashed]; 117 same_domain_only -> decline [style=dashed]; 118 freebusy -> schedule_in_freebusy; 119 } 120 }}} 121 122 }}}} 123 124 Note that if the first function is omitted, no check against the resource's 125 schedule will occur, so it is necessary to mention any such function in the 126 list. 127 128 ==== Access Control Lists ==== 129 130 A simple domain-related test may not be sufficient to control access to a 131 resource. Thus, another function is provided to exercise a finer degree of 132 control over event participants. For example: 133 134 {{{{#!table 135 '''Scheduling Functions and Data''' || '''Decision Process''' 136 == 137 <style="vertical-align: top;"> 138 139 {{{ 140 schedule_in_freebusy 141 access_control_list 142 }}} 143 144 Access control list: 145 146 {{{ 147 accept 148 }}} 149 150 || 151 152 {{{#!graphviz 153 //format=svg 154 //transform=notugly 155 digraph scheduling_decisions { 156 node [shape=box,fontsize="13.0",fontname="Helvetica",tooltip="Scheduling decisions"]; 157 edge [tooltip="Scheduling decisions"]; 158 159 mail [label="Incoming mail",shape=folder,style=filled,fillcolor=cyan]; 160 161 subgraph { 162 rank=same; 163 schedule_in_freebusy [label="Can schedule in free/busy?",shape=ellipse,style=filled,fillcolor=gold]; 164 freebusy [label="Free/busy",shape=folder]; 165 } 166 167 subgraph { 168 rank=same; 169 access_control_list [label="Access control list permits booking?",shape=ellipse,style=filled,fillcolor=gold]; 170 acl [label="acl setting",shape=folder]; 171 } 172 173 accept_default [label="Accept invitation by default",shape=ellipse,style=filled,fillcolor=darkorange]; 174 end_acl [label="end",shape=ellipse,style=filled,fillcolor=darkorange]; 175 176 schedule [label="Schedule event for resource",shape=ellipse,style=filled,fillcolor=gold]; 177 accept [label="Accept",shape=folder,style=filled,fillcolor=cyan]; 178 decline [label="Decline",shape=folder,style=filled,fillcolor=cyan]; 179 180 mail -> schedule_in_freebusy -> access_control_list -> accept_default -> end_acl -> schedule -> accept; 181 end_acl -> decline [style=dashed]; 182 schedule_in_freebusy -> decline [style=dashed]; 183 freebusy -> schedule_in_freebusy; 184 acl -> access_control_list; 185 } 186 }}} 187 188 }}}} 189 190 To accompany the scheduling functions, the [[../Preferences#acl|acl]] setting 191 in the resource's preferences must be set, or if a separate file is more 192 appropriate, its full path may be given as an argument to `access_control_list`: 193 194 {{{ 195 schedule_in_freebusy 196 access_control_list /etc/imip-agent/resources.acl 197 }}} 198 199 Within the file provided by the setting or separate file, a list of rules 200 must describe the handling procedure for an event. For example, the following 201 was given in the above example: 202 203 {{{ 204 accept 205 }}} 206 207 This will merely accept all invitations, anyway. However, it may be 208 appropriate to prevent certain users from using resources. For example: 209 210 {{{{#!table 211 '''Scheduling Functions and Data''' || '''Decision Process''' 212 == 213 <style="vertical-align: top;"> 214 215 {{{ 216 schedule_in_freebusy 217 access_control_list 218 }}} 219 220 Access control list: 221 222 {{{ 223 accept 224 decline attendee simon.skunk@example.com 225 }}} 226 227 || 228 229 {{{#!graphviz 230 //format=svg 231 //transform=notugly 232 digraph scheduling_decisions { 233 node [shape=box,fontsize="13.0",fontname="Helvetica",tooltip="Scheduling decisions"]; 234 edge [tooltip="Scheduling decisions"]; 235 236 mail [label="Incoming mail",shape=folder,style=filled,fillcolor=cyan]; 237 238 subgraph { 239 rank=same; 240 schedule_in_freebusy [label="Can schedule in free/busy?",shape=ellipse,style=filled,fillcolor=gold]; 241 freebusy [label="Free/busy",shape=folder]; 242 } 243 244 subgraph { 245 rank=same; 246 access_control_list [label="Access control list permits booking?",shape=ellipse,style=filled,fillcolor=gold]; 247 acl [label="acl setting",shape=folder]; 248 } 249 250 accept_default [label="Accept invitation by default",shape=ellipse,style=filled,fillcolor=darkorange]; 251 decline_attendee [label="Is attendee simon.skunk@example.com?",shape=ellipse,style=filled,fillcolor=darkorange]; 252 end_acl [label="end",shape=ellipse,style=filled,fillcolor=darkorange]; 253 254 schedule [label="Schedule event for resource",shape=ellipse,style=filled,fillcolor=gold]; 255 accept [label="Accept",shape=folder,style=filled,fillcolor=cyan]; 256 decline [label="Decline",shape=folder,style=filled,fillcolor=cyan]; 257 258 mail -> schedule_in_freebusy -> access_control_list -> accept_default -> decline_attendee -> end_acl -> schedule -> accept; 259 end_acl -> decline [style=dashed]; 260 schedule_in_freebusy -> decline [style=dashed]; 261 freebusy -> schedule_in_freebusy; 262 acl -> access_control_list; 263 } 264 }}} 265 266 }}}} 267 268 This example indicates that by default, invitations will be accepted, but if 269 one of the attendees of an event is `simon.skunk@example.com`, the invitation 270 will be declined. However, it may be the case that this rule should be 271 overridden under certain circumstances. For example: 272 273 {{{{#!table 274 '''Scheduling Functions and Data''' || '''Decision Process''' 275 == 276 <style="vertical-align: top;"> 277 278 {{{ 279 schedule_in_freebusy 280 access_control_list 281 }}} 282 283 Access control list: 284 285 {{{ 286 accept 287 decline attendee simon.skunk@example.com 288 accept organiser paul.boddie@example.com 289 }}} 290 291 || 292 293 {{{#!graphviz 294 //format=svg 295 //transform=notugly 296 digraph scheduling_decisions { 297 node [shape=box,fontsize="13.0",fontname="Helvetica",tooltip="Scheduling decisions"]; 298 edge [tooltip="Scheduling decisions"]; 299 300 mail [label="Incoming mail",shape=folder,style=filled,fillcolor=cyan]; 301 302 subgraph { 303 rank=same; 304 schedule_in_freebusy [label="Can schedule in free/busy?",shape=ellipse,style=filled,fillcolor=gold]; 305 freebusy [label="Free/busy",shape=folder]; 306 } 307 308 subgraph { 309 rank=same; 310 access_control_list [label="Access control list permits booking?",shape=ellipse,style=filled,fillcolor=gold]; 311 acl [label="acl setting",shape=folder]; 312 } 313 314 accept_default [label="Accept invitation by default",shape=ellipse,style=filled,fillcolor=darkorange]; 315 decline_attendee [label="Is attendee simon.skunk@example.com?",shape=ellipse,style=filled,fillcolor=darkorange]; 316 accept_organiser [label="Is organiser paul.boddie@example.com?",shape=ellipse,style=filled,fillcolor=darkorange]; 317 end_acl [label="end",shape=ellipse,style=filled,fillcolor=darkorange]; 318 319 schedule [label="Schedule event for resource",shape=ellipse,style=filled,fillcolor=gold]; 320 accept [label="Accept",shape=folder,style=filled,fillcolor=cyan]; 321 decline [label="Decline",shape=folder,style=filled,fillcolor=cyan]; 322 323 mail -> schedule_in_freebusy -> access_control_list -> accept_default -> decline_attendee -> accept_organiser -> end_acl -> schedule -> accept; 324 end_acl -> decline [style=dashed]; 325 schedule_in_freebusy -> decline [style=dashed]; 326 freebusy -> schedule_in_freebusy; 327 acl -> access_control_list; 328 } 329 }}} 330 331 }}}} 332 333 Here, the stated organiser may still arrange a booking of the resource where 334 the previously-mentioned attendee is involved.