chook 1.0.1.b2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES.md +21 -0
  3. data/README.md +243 -36
  4. data/bin/chook-server +29 -1
  5. data/data/chook.conf.example +104 -0
  6. data/data/sample_handlers/RestAPIOperation.rb +12 -8
  7. data/data/sample_handlers/SmartGroupComputerMembershipChange.rb +3 -6
  8. data/data/sample_jsons/SmartGroupComputerMembershipChange.json +3 -1
  9. data/data/sample_jsons/SmartGroupMobileDeviceMembershipChange.json +3 -1
  10. data/lib/chook/configuration.rb +20 -8
  11. data/lib/chook/event/handled_event.rb +15 -12
  12. data/lib/chook/event/handled_event/handlers.rb +136 -83
  13. data/lib/chook/event/handled_event_logger.rb +86 -0
  14. data/lib/chook/event_handling.rb +1 -0
  15. data/lib/chook/foundation.rb +2 -0
  16. data/lib/chook/procs.rb +17 -1
  17. data/lib/chook/server.rb +71 -74
  18. data/lib/chook/server/log.rb +215 -0
  19. data/lib/chook/server/public/css/chook.css +125 -0
  20. data/lib/chook/server/public/imgs/ChookLogoAlMcWhiggin.png +0 -0
  21. data/lib/chook/server/public/js/chook.js +127 -0
  22. data/lib/chook/server/public/js/logstream.js +101 -0
  23. data/lib/chook/server/routes.rb +45 -0
  24. data/lib/chook/server/routes/handle_webhook_event.rb +22 -3
  25. data/lib/chook/server/routes/handlers.rb +52 -0
  26. data/lib/chook/server/routes/home.rb +34 -1
  27. data/lib/chook/server/routes/log.rb +106 -0
  28. data/lib/chook/server/views/admin.haml +11 -0
  29. data/lib/chook/server/views/bak.haml +48 -0
  30. data/lib/chook/server/views/config.haml +15 -0
  31. data/lib/chook/server/views/handlers.haml +48 -0
  32. data/lib/chook/server/views/layout.haml +39 -0
  33. data/lib/chook/server/views/logstream.haml +32 -0
  34. data/lib/chook/server/views/sketch_admin +44 -0
  35. data/lib/chook/subject.rb +1 -2
  36. data/lib/chook/subject/smart_group.rb +6 -0
  37. data/lib/chook/version.rb +1 -1
  38. metadata +73 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e92976b3bdaf1f68f8b9f835d60801aaae016288
4
- data.tar.gz: beef1b38609f5e0dd9e88f7426564e243a87cfe7
2
+ SHA256:
3
+ metadata.gz: 05defee2dbf9d0d71b7657d491ac8eebf3c87529d1de1077365a3a2e82cc48fe
4
+ data.tar.gz: 845d410b10290129a233915600cf57ca7c89a855b2d504cb5593da885e5eef8c
5
5
  SHA512:
6
- metadata.gz: 03aafa3c761df70e9ac55fb22262ef795148b0cde019c3e4ea11c9709618710bb29785de10f26c18640eb6ea2cbb894949a5474685311fe74e0412987fb5389e
7
- data.tar.gz: 5b812b039b4298e8d662d778dd0ab9a5253f2a13ef29518c27869d169ce3228570036d9a64d85cfd9e0e5bee9d9ae96cb5a0f549d9377c02e0c30ee88ff81db6
6
+ metadata.gz: 153586d027c5c81d7ec5d0f0678d0c520879db7cef84cf3454134a4f7439601faa12463a3d227e7dd1ce6b561c18d4c95be781f39b2d0d787be742d5ea0b44fa
7
+ data.tar.gz: 10e36a024704ab54f38bfbfeec7f91da08a294c9a3d0c1b3c103d0aa924719045197a4f62e49ef4e4add8397004fc8578186d3c50ec03d53501839ac716384a5
@@ -0,0 +1,21 @@
1
+ # Chook Change Log
2
+
3
+ ## v 1.1.0, 2018-10-15
4
+
5
+ For details about the new features, please see README.md
6
+
7
+ - Now requires 'thin' as the server engine.
8
+
9
+
10
+ - Supports SSL and HTTP Basic Authentication
11
+
12
+
13
+ - Server logging is now a thing, with access to logging from both internal and external handlers
14
+
15
+
16
+ - A simple admin interface is available by pointing your browser at the chook server
17
+
18
+
19
+ - Internal handlers are now stored as anonymous objects rather than Procs, and the handler code block
20
+ is stored as an instance method on the object. This means that either 'break' or 'return' will work
21
+ to exit a handler.
data/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
 
2
2
  # Chook
3
3
 
4
- Documentation is a work in progress. Please get in touch for assistance. <3
4
+ Documentation is a work in progress. Please [get in touch](mailto:chook@pixar.com) for assistance. <3
5
5
 
6
6
  - [Introduction](#introduction)
7
+ - [Installing Chook](#installing-chook)
7
8
  - [The Framework](#the-framework)
8
9
  - [Event Handlers](#event-handlers)
9
10
  - [Internal Handlers](#internal-handlers)
@@ -11,7 +12,11 @@ Documentation is a work in progress. Please get in touch for assistance. <3
11
12
  - [Putting It Together](#putting-it-together)
12
13
  - [Events and Subjects](#events-and-subjects)
13
14
  - [The Server](#the-server)
14
- - [Installing Chook](#installing-chook)
15
+ - [Server Configuration](#server-configuration)
16
+ - [SSL](#ssl)
17
+ - [Logging](#logging)
18
+ - [Admin Interface](#admin-interface)
19
+ - [Pointing Jamf Pro at your Chook server](#pointing-jamf-pro-at-your-chook-server)
15
20
  - [TODOs](#todos)
16
21
 
17
22
 
@@ -19,36 +24,46 @@ Documentation is a work in progress. Please get in touch for assistance. <3
19
24
 
20
25
  Chook is a Ruby module that implements a framework for working with webhook events
21
26
  sent by the JSS, the core of [Jamf Pro](https://www.jamf.com/products/jamf-pro/),
22
- a management tool for Apple devices.
27
+ a management tool for Apple devices!
23
28
 
24
29
  Chook also provides a simple, sinatra-based HTTP server for handling those Events,
25
30
  and classes for sending simulated TestEvents to a webhook handling server.
26
31
 
27
- ** You do not need to be a Ruby developer to use this framework! **
32
+ **You do not need to be a Ruby developer to use Chook!**
28
33
 
29
34
  The webhook handling server that comes with Chook can use "Event Handlers" written in
30
35
  any language. See _Event Handlers_ and _The Server_ below for more information.
31
36
 
32
- Chook is still in development. While many of the basics work,
33
- there is much to be done before it can be considered complete.
34
-
35
37
  Although Chook integrates well with [ruby-jss](http://pixaranimationstudios.github.io/ruby-jss/index.html),
36
38
  it's a separate tool, and the two projects aren't dependent. However, ruby-jss
37
39
  does become a requirement when using sampling features to generate TestEvents.
38
40
 
39
41
  For more detail about the JSS webhooks API and the JSON data it passes, please see
40
- [Bryson Tyrrell's documentation.](https://unofficial-jss-api-docs.atlassian.net/wiki/display/JRA/Webhooks+API)
42
+ [JAMF's developer reference.](http://developer.jamf.com/webhooks)
41
43
 
42
44
  **Note:** When creating webhooks from your JSS to be handled by the framework, you must
43
45
  specify JSON in the "Content Type" section. This framework does not support XML and
44
- will only generate Events in JSON format.
46
+ will only generate Test Events in JSON format.
47
+
48
+
49
+ ## Installing Chook
50
+
51
+ `gem install chook -n /usr/local/bin`
52
+
53
+ It will also install "sinatra" and "thin", and their dependencies.
54
+
55
+ Then fire up `irb` and `require 'chook'` to start playing around.
56
+
57
+ OR
58
+
59
+ run `/usr/local/bin/chook-server` and point some JSS webhooks at `http://my.computer.org/handle_webhook_event`
45
60
 
46
61
  ## The Framework
47
62
 
48
63
  The Chook framework abstracts webhook Events and their components as Ruby
49
64
  classes. When the JSON payload of a JSS webhook POST request is passed into the
50
- `Chook::Event.parse_event` method, an instance of the appropriate subclass
51
- of `Chook::Event` is returned, for example
65
+ `Chook::Event.parse_event` method, an instance of the appropriate subclass of
66
+ `Chook::Event` is returned, for example
52
67
  `Chook::Event::ComputerInventoryCompletedEvent`
53
68
 
54
69
  Each Event instance contains these important attributes:
@@ -104,7 +119,7 @@ All of these file names are valid handlers for ComputerAdded events:
104
119
  - COMPUTERAdded_notify_team
105
120
  - Computeradded-update-ldap
106
121
 
107
- There are two kinds of handlers:
122
+ There are two kinds of handlers, distinguished by their file-executability.
108
123
 
109
124
  #### Internal Handlers
110
125
 
@@ -121,16 +136,70 @@ a handler for a Chook::ComputerAddedEvent
121
136
  Chook.event_handler do |event|
122
137
  cname = event.subject.deviceName
123
138
  uname = event.subject.realName
124
- puts "Computer '#{cname}' was just added to the JSS for user #{uname}."
139
+ event.logger.info "Computer '#{cname}' was just added to the JSS for user #{uname}."
125
140
  end
126
141
  ```
127
142
 
128
- In this example, the code block takes one parameter, which it expects to be
129
- a Chook::ComputerAddedEvent instance, and uses it in the variable "event."
143
+ The code block takes one parameter, which will be a Chook::ComputerAddedEvent instance,
144
+ and in this example stores it in the variable "event."
145
+
130
146
  It then extracts the "deviceName" and "realName" values from the subject
131
- contained in the event, and uses them to send a message to stdout.
147
+ contained in the event, and uses them to log a message in the chook log.
148
+
149
+ **NameSpacing**
150
+
151
+ Be careful when writing internal handlers - they all run in the same Ruby process!
152
+
153
+ Not only do they have to be thread-safe, but be wary of cluttering the default
154
+ namespace with constants that might overwrite each other.
155
+
156
+ A good, very ruby-like, practice is to put the guts of your code into a Module or a Class
157
+ and use that from inside the handler definition. Here's an example using a Class:
158
+
159
+ ```ruby
160
+ require 'slack-em' # ficticious Slack-chat gem, for demonstation purposes
161
+
162
+ class ComputerAdder
132
163
 
133
- Internal handlers **must not** be executable files. Executability is how the
164
+ SLACK_CHANNEL = '#mac-notifications'
165
+
166
+ def initialize(event)
167
+ @event = event
168
+ @cname = @event.subject.deviceName
169
+ end
170
+
171
+ def run
172
+ @event.logger.info "Adder Starting for computer #{@cname}"
173
+ notify_admins
174
+ @event.logger.info "Adder Finished for computer #{@cname}"
175
+ end
176
+
177
+ def notify_admins
178
+ SlackEm.send message: "Computer '#{@cname}' was just added to the JSS for user #{@event.subject.realName}.", channel: SLACK_CHANNEL
179
+ @event.logger.debug "Admins notified about computer #{@cname}"
180
+ end
181
+
182
+ end
183
+
184
+ Chook.event_handler do |event|
185
+ ComputerAddeder.new(event).run
186
+ end
187
+ ```
188
+
189
+ Here, the handler file defines a 'ComputerAdder' class that does all the work.
190
+ The handler block merely creates an instance of ComputerAdder with the event,
191
+ and tells the ComputerAdder instance to run. The instance's run method can
192
+ then perform any steps desired.
193
+
194
+ In this example, the SLACK_CHANNEL constant is defined inside the ComputerAdder class.
195
+ Access to it from inside the class is done using just the constant itself. If you
196
+ need to access that particular value from outside of the class, you can
197
+ use ComputerAdder::SLACK_CHANNEL.
198
+
199
+ This way, similar handlers can have their own SLACK_CHANNEL constants and
200
+ there won't be any interference.
201
+
202
+ NOTE: Internal handlers **must not** be executable files. Executability is how the
134
203
  framework determines if a handler is internal or external.
135
204
 
136
205
  #### External Handlers
@@ -142,7 +211,7 @@ desired. In this case the Chook framework is merely a conduit for passing
142
211
  the Posted JSON to the executable program.
143
212
 
144
213
  Here's a simple example using bash and [jq](https://stedolan.github.io/jq/) to
145
- do the same as the ruby example above:
214
+ do the same as the first ruby example above:
146
215
 
147
216
  ```bash
148
217
  #!/bin/bash
@@ -235,15 +304,15 @@ the `Chook::Subjects` module.
235
304
 
236
305
  ## The Server
237
306
 
238
- Chook comes with a simple HTTP server that uses the Chook framework
307
+ Chook comes with a simple HTTP(S) server that uses the Chook framework
239
308
  to handle all incoming webhook POST requests from the JSS via a single URL.
240
309
 
241
- To use it you'll need the [sinatra](http://www.sinatrarb.com/)
242
- ruby gem (`gem install sinatra`).
310
+ To use it you'll need the [sinatra](http://www.sinatrarb.com/) web framework
311
+ and the [thin](http://code.macournoyer.com/thin/) web server.
312
+ Both will be installed automatically when you install chook as mentioned below.
243
313
 
244
- After that, just run the `chook-server` command located in the bin
245
- directory for chook and then point your webhooks at:
246
- http://my_hostname/handle_webhook_event
314
+ After that, just run the `chook-server` command located in the bin directory
315
+ for chook and then point your webhooks at: http://my_hostname/handle_webhook_event
247
316
 
248
317
  It will then process all incoming webhook POST requests using whatever handlers
249
318
  you have installed.
@@ -251,25 +320,163 @@ you have installed.
251
320
  To automate it on a dedicated machine, just make a LaunchDaemon plist to run
252
321
  that command and keep it running.
253
322
 
254
- ## Installing Chook
323
+ ### Server Configuration
255
324
 
256
- `gem install chook -n /usr/local/bin`. It will also install "sinatra."
325
+ The Chook server looks for a config file at `/etc/chook.conf`. If not found, default
326
+ values are used. Full descriptions of the config values are provided in the sample
327
+ config file at:
328
+ /path/to/your/gem/folder/chook-<version>/data/chook.conf.example
257
329
 
258
- Then fire up `irb` and `require chook` to start playing around.
330
+ Each config setting is on a single line thus: `key: value`. Blank lines and those starting with # are ignored.
259
331
 
260
- OR
332
+ Here's a summary:
333
+
334
+ - port: The server port
335
+ - default = 80 or 443
336
+ - concurrency: Should events be processed simultaneously, or one-at-a time
337
+ - default = true
338
+ - handler_dir: The directory holding the andlers to load.
339
+ - default = /Library/Application Support/Chook
340
+ - use_ssl: Should the server use SSL (https)
341
+ - default = false
342
+ - ssl_cert_path: If SSL is used, the path to the server certificate
343
+ - no default
344
+ - ssl_private_key_path: If SSL is used, the path to the certificate key
345
+ - no default
346
+ - log_file: The path to the server log file
347
+ - default = /var/log/chook-server.log
348
+ - log_level: The severity level for log entries
349
+ - default = info
350
+ - logs_to_keep: How many old log files to keep when rotating
351
+ - default = 10
352
+ - log_max_megs: How big can a log file get before it's rotated.
353
+ - default = 10
354
+ - webhooks_user: The username for Basic Authentication
355
+ - no default, leave unset for no Authentication
356
+ - webhooks_user_pw: The file path, or command, to get the password for the webhooks_user.
357
+ - no default.
358
+
359
+ See the sample config file for details about all of these settings.
360
+
361
+ ### SSL
362
+
363
+ It is recommended to use SSL (https) if possible for security, although its beyond the scope
364
+ of this document to go into a lot of detail about SSL and certificates. That said, here
365
+ are some pointers:
366
+
367
+ - The certificate and key files should be in .pem format
368
+
369
+ - Make sure you use a certificate that can be verified by the JSS.
370
+ - This might involved adding a CA to the JSS's Java Keystore.
371
+
372
+ - If running on macOS, the 'thin' webserver and it's underlying 'eventmachine' gem may not
373
+ like the OS's openssl replacement 'libressl'.
374
+ - One solution is to use [homebrew](https://brew.sh/) to install openssl and then
375
+ install eventmachine using that openssl, something like this:
376
+
377
+ `brew install openssl ; brew link openssl --force ; gem install eventmachine -- --with-ssl-dir=/usr/local/`
378
+
379
+ ### Logging
380
+
381
+ The Chook server logs activity into the file defined in the `log_file` config setting,
382
+ `/var/log/chook-server.log` by default.
383
+
384
+ It uses a standard ruby [Logger](http://ruby-doc.org/stdlib-2.3.3/libdoc/logger/rdoc/index.html)
385
+ instance, which provides 5 severity levels: fatal (lowest), error, warn, info, and debug (highest).
386
+
387
+ The `log_level` config setting defines the level when the server starts up, and log
388
+ messages of that level or lower will be written to the log.
389
+
390
+ The logger is generally available via `Chook.logger`. If you want to log an exeption with its backtrace, you can use `Chook.log_exception exception` to get the Exception class, message, and backtrace in the log.
391
+
392
+ However, for logging from inside handlers, read on...
393
+
394
+ #### Logging from handlers
395
+
396
+ **Internal handlers**
397
+
398
+ To write to the log file from within an internal handler, use the `#logger` method of the `event` object
399
+ inside the handler block, like so:
400
+
401
+ ```ruby
402
+ Chook.event_handler do |event|
403
+ event.logger.debug "This line appears in the log if the level is debug"
404
+ event.logger.info "This line appears in the log if the level is info or debug"
405
+ event.logger.error "This line appears in the log if the level is error, warn, info, or debug"
406
+ end
407
+ ```
408
+
409
+ If you want to log an exeption with its backtrace, you can pass the entire exception to the
410
+ event loggers 'log_exception' method: `event.logger.log_exception exception`
411
+
412
+ Log entries written through event objects are preceded with 'Event *event_id*' where *event_id* is
413
+ an internal ID number for the specific even that wrote the entry.
414
+
415
+
416
+ **External handlers**
417
+
418
+ External Handlers can use a URL to make log entries by POSTing to `https://my.chookserver/log`
419
+
420
+ The request body must be a JSON object wth 2 keys 'level' and 'message' where both values are strings.
421
+ The 'level' must be one of the levels mentioned above, and the message is a single line of
422
+ text.
423
+
424
+ If your chook server is using Basic Authentication, it must be provided.
425
+
426
+ Here's an example with curl, split to multi-line for clarity:
427
+
428
+ ```
429
+ curl -H "Content-Type: application/json" \
430
+ -X POST \
431
+ --data '{"level":"debug", "message":"It Worked"}' \
432
+ https://user:passwd@chookserver.myorg.org/log
433
+ ```
434
+
435
+ Messages logged via this url show up in the log preceded by 'ExternalEntry: '
436
+
437
+ Any info needed to connect a log entry to a specific event must be included in
438
+ your log message.
439
+
440
+ ### Admin Interface
441
+
442
+ If you point your web browser at your Chook server, you'll see a simple admin interface.
443
+ If your server uses Basic Authentication, you'll need to provide the name and password.
444
+
445
+ The first section provides a live-stream of the server log file, and provides a way to
446
+ change the server's log level on the fly. Note that this change affect the server itself
447
+ not just the view in your browser. If you'd like to stop the stream temporarily (e.g. to
448
+ select and copy some text from it), just pause and unpause with the checkbox.
449
+
450
+ The second section lets you see which handlers are currently loaded, and if they are
451
+ internal or external. There's also a button to reload the handlers from the handler
452
+ directory without restarting the server - useful when you add, delete, or modify them.
453
+
454
+ The final section just shows your current /etc/chook.conf file, or if there is none,
455
+ the sample config file is shown, since it shows the default values.
456
+
457
+ The admin page cannot be used to edit or upload handlers or change the config. For security
458
+ reasons, you must do that on the server itself though normal administrative methods.
459
+
460
+ ### Pointing Jamf Pro at your Chook server
461
+
462
+ Once your server is up and running, you can create webhooks in your Jamf Pro interface.
261
463
 
262
- run `/usr/local/bin/chook-server` and point some JSS webhooks at that machine.
464
+ 1. Navigate to Settings => Global Management => Webhooks
465
+ 2. Click "New"
466
+ 3. Give your webhook a display name
467
+ 4. Enter the URL for your Chook server, ending with 'handle_webhook_event', e.g:
468
+ - `http://my.chookserver.edu/handle_webhook_event`
469
+ - `https://my.chookserver.edu:8443/handle_webhook_event`
470
+ 5. If you use Basic Authentication, enter the name and password
471
+ 6. The default timeouts should be OK, but raise them a bit if you're experiencing errors.
472
+ 7. Set the content type to JSON
473
+ 8. Select the event that triggers the webook
474
+ 9. Click "Enabled" at the top.
475
+ 10. Click "Save"
263
476
 
477
+ Watch the Chook log, with the level at info or debug, to see events come in.
264
478
 
265
479
  ## TODOs
266
480
 
267
- - Add SSL support to the server
268
- - Improved thread management for handlers
269
- - Logging and Debug options
270
- - Handler reloading for individual, or all, Event subclasses
271
481
  - Better YARD docs
272
- - Better namespace protection for internal handlers
273
- - Improved configuration
274
482
  - Proper documentation beyond this README
275
- - I'm sure there's more to do...
@@ -24,5 +24,33 @@
24
24
  ### language governing permissions and limitations under the Apache License.
25
25
  ###
26
26
  ###
27
+
28
+ require 'getoptlong'
29
+
30
+ # The CLI options for GetoptLong
31
+ OPTS = GetoptLong.new(
32
+ ['--log', '-l', GetoptLong::REQUIRED_ARGUMENT],
33
+ ['--dev', '-d', GetoptLong::NO_ARGUMENT]
34
+ )
35
+
36
+ env = :production
37
+ log_level = nil
38
+
39
+ OPTS.each do |opt, arg|
40
+ case opt
41
+ when '--log'
42
+ log_level = arg
43
+ when '--dev'
44
+ env = :development
45
+ end # case
46
+ end # opts.each
47
+
48
+ ENV['APP_ENV'] = env.to_s
49
+
27
50
  require 'chook/server'
28
- Chook::Server.run!
51
+ begin
52
+ Chook::Server.run! log_level: log_level
53
+ rescue => e
54
+ Chook.logger.fatal e.to_s
55
+ e.backtrace.each { |line| Chook.logger.fatal "..#{line}" }
56
+ end
@@ -0,0 +1,104 @@
1
+ #################
2
+ # This sample config file uses default settings.
3
+ #
4
+ # Each setting is defined on one line like so:
5
+ #
6
+ # key: value
7
+ #
8
+ # Values may have spaces.
9
+ #
10
+ # Blank lines and those starting with # are ignored.
11
+
12
+ #################
13
+ # The port used by the server.
14
+ # Default: 443 when use_ssl is true, 80 otherwise
15
+ #
16
+ port: 80
17
+
18
+ #################
19
+ # By default incoming webhooks are handled in parallel
20
+ # If you have problems (e.g. a handler isn't thread-safe) try setting this
21
+ # to false and hooks will be handled one at a time, in the order received.
22
+ # Default: true
23
+ #
24
+ concurrency: true
25
+
26
+ #################
27
+ # The directory holding the internal and external handlers.
28
+ # Their filenames must start with a known webhook name, and
29
+ # their executability determines internal (not executable)
30
+ # versus external (executable). See README.md for details.
31
+ # Default: /Library/Application Support/Chook
32
+ #
33
+ handler_dir: /Library/Application Support/Chook
34
+
35
+ #################
36
+ # Should the server use SSL (https)? Ignored unless the engine is 'thin'
37
+ # Default: false
38
+ #
39
+ use_ssl: false
40
+
41
+ #################
42
+ # When using SSL, the path to the SSL certificate to use, in PEM format
43
+ # Required if use_ssl == true and engine == thin
44
+ # Default: none
45
+ #
46
+ ssl_cert_path:
47
+
48
+ #################
49
+ # When using SSL, the path to the private key for the SSL certificate, in PEM format
50
+ # Required if use_ssl == true and engine == thin
51
+ # Default: none
52
+ #
53
+ ssl_private_key_path:
54
+
55
+ #################
56
+ # The path to the file used for chook server logging
57
+ # Default: /var/log/chook-server.log
58
+ #
59
+ log_file: /var/log/chook-server.log
60
+
61
+ #################
62
+ # The detail level for the log. One of:
63
+ # fatal (only fatal errors logged), error, warn, info, or debug (everything logged)
64
+ # Default: info
65
+ #
66
+ log_level: info
67
+
68
+ #################
69
+ # How many old log files to keep when rotating?
70
+ # Set to 0, or don't set at all, to disable auto-rotating
71
+ # of log files.
72
+ # Default: 10
73
+ #
74
+ logs_to_keep: 10
75
+
76
+ #################
77
+ # The log file rotates automatically when it reaches this size in megabytes.
78
+ # Default: 10
79
+ #
80
+ log_max_megs: 10
81
+
82
+ #################
83
+ # Any value here will turn on 'HTTP Basic Authentication' and this will be the username
84
+ # required to make any connection to the Chook server.
85
+ # Leaving this empty will allow any connection without authentication
86
+ # Default: none
87
+ #
88
+ webhooks_user:
89
+
90
+ #################
91
+ # When 'HTTP Basic Authentication' is enabled by setting webhooks_user, this
92
+ # tells chook how to learn the password for that user:
93
+ #
94
+ # - If its a path to a file, the file contains the password and nothing else.
95
+ # The file must be owned by the user running the chook server, and must have
96
+ # mode 0600.
97
+ #
98
+ # - If it ends with a pipe character (|), everything execpt the pipe is considered
99
+ # to be a shell command, executable by the user running the chook server.
100
+ # The standard-output of the command will be the password.
101
+ #
102
+ # Default: none
103
+ #
104
+ webhooks_user_pw: