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