chook 1.0.1.b2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -29,7 +29,40 @@ module Chook
29
29
  class Server < Sinatra::Base
30
30
 
31
31
  get '/' do
32
- body "Hello, this is Chook, a Jamf Pro WebHook handling service from Pixar Animation Studios!\n"
32
+ protected!
33
+
34
+ # a list of current handlers for the admin page
35
+ @handlers_for_admin_page = []
36
+
37
+ Chook::HandledEvent::Handlers.handlers.keys.sort.each do |eventname|
38
+ Chook::HandledEvent::Handlers.handlers[eventname].each do |handler|
39
+ if handler.is_a? Pathname
40
+ file = handler
41
+ type = :external
42
+ else
43
+ file = Pathname.new(Chook.config.handler_dir) + handler.handler_file
44
+ type = :internal
45
+ end # if else
46
+ @handlers_for_admin_page << { event: eventname, file: file, type: type }
47
+ end # handlers each
48
+ end # Handlers.handlers.each
49
+
50
+ # the current config, for the admin page
51
+ @config_text =
52
+ if Chook::Configuration::DEFAULT_CONF_FILE.file?
53
+ @config_src = Chook::Configuration::DEFAULT_CONF_FILE.to_s
54
+ Chook::Configuration::DEFAULT_CONF_FILE.read
55
+
56
+ elsif Chook::Configuration::SAMPLE_CONF_FILE.file?
57
+ @config_src = "Using default values, showing sample config file at #{Chook::Configuration::SAMPLE_CONF_FILE}"
58
+ Chook::Configuration::SAMPLE_CONF_FILE.read
59
+
60
+ else
61
+ @config_src = "No #{Chook::Configuration::DEFAULT_CONF_FILE} or sample config file found."
62
+ @config_src
63
+ end
64
+
65
+ haml :admin
33
66
  end # get /
34
67
 
35
68
  end # class
@@ -0,0 +1,106 @@
1
+ ### Copyright 2017 Pixar
2
+
3
+ ###
4
+ ### Licensed under the Apache License, Version 2.0 (the "Apache License")
5
+ ### with the following modification; you may not use this file except in
6
+ ### compliance with the Apache License and the following modification to it:
7
+ ### Section 6. Trademarks. is deleted and replaced with:
8
+ ###
9
+ ### 6. Trademarks. This License does not grant permission to use the trade
10
+ ### names, trademarks, service marks, or product names of the Licensor
11
+ ### and its affiliates, except as required to comply with Section 4(c) of
12
+ ### the License and to reproduce the content of the NOTICE file.
13
+ ###
14
+ ### You may obtain a copy of the Apache License at
15
+ ###
16
+ ### http://www.apache.org/licenses/LICENSE-2.0
17
+ ###
18
+ ### Unless required by applicable law or agreed to in writing, software
19
+ ### distributed under the Apache License with the above modification is
20
+ ### distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21
+ ### KIND, either express or implied. See the Apache License for the specific
22
+ ### language governing permissions and limitations under the Apache License.
23
+ ###
24
+ ###
25
+
26
+ module Chook
27
+
28
+ # see server.rb
29
+ class Server < Sinatra::Base
30
+
31
+ # External Handlers can use this route to make log entries.
32
+ #
33
+ # The request body must be a JSON object (Hash) wth 2 keys 'level' and 'message'
34
+ # where both values are strings
35
+ #
36
+ # Here's an example with curl, split to multi-line for clarity:
37
+ #
38
+ # curl -H "Content-Type: application/json" \
39
+ # -X POST \
40
+ # --data '{"level":"debug", "message":"It Worked"}' \
41
+ # https://user:passwd@chookserver.myorg.org:443/log
42
+ #
43
+ post '/log' do
44
+ protected!
45
+ request.body.rewind # in case someone already read it
46
+ raw = request.body.read
47
+
48
+ begin
49
+ logentry = JSON.parse raw, symbolize_names: true
50
+ raise if logentry[:level].to_s.empty? || logentry[:message].to_s.empty?
51
+ rescue
52
+ Chook::Server::Log.logger.error "Malformed log entry JSON from #{request.ip}: #{raw}"
53
+ halt 409, "Malformed log entry JSON: #{raw}"
54
+ end
55
+
56
+ level = logentry[:level].to_sym
57
+ level = :unknown unless Chook::Server::Log::LOG_LEVELS.key? level
58
+ Chook::Server::Log.logger.send level, "ExternalEntry: #{logentry[:message]}"
59
+
60
+ { result: 'logged', level: level }.to_json
61
+ end # post /
62
+
63
+ # AJAXy access to a log stream
64
+ # When an admin displays the log on the chook admin/home page,
65
+ # the page's javascript starts the stream as an EventSource
66
+ # from this url.
67
+ #
68
+ # The innards are taken almost verbatim from the Sinatra README
69
+ # docs.
70
+ #
71
+ # See also logstream.js and views/admin.haml
72
+ #
73
+ #
74
+ get '/subscribe_to_log_stream', provides: 'text/event-stream' do
75
+ protected!
76
+ content_type 'text/event-stream'
77
+ cache_control 'no-cache'
78
+
79
+ # register a client's interest in server events
80
+ stream(:keep_open) do |outbound_stream|
81
+ # add this connection to the array of streams
82
+ Chook::Server::Log.log_streams[outbound_stream] = request.ip
83
+ logger.debug "Added log stream for #{request.ip}"
84
+ # purge dead connections
85
+ Chook::Server::Log.clean_log_streams
86
+ end # stream
87
+ end
88
+
89
+ # set the log level via the admin page.
90
+ put '/set_log_level/:level' do
91
+ level = params[:level].to_sym
92
+ level = :unknown unless Chook::Server::Log::LOG_LEVELS.key? level
93
+ Chook.logger.level = level
94
+ Chook.logger.unknown "Log level changed, now: #{level}"
95
+ { result: 'level changed', level: level }.to_json
96
+ end
97
+
98
+ # get the log level via the admin page.
99
+ get '/current_log_level' do
100
+ protected!
101
+ Chook::Server::Log::LOG_LEVELS.invert[Chook.logger.level].to_s
102
+ end
103
+
104
+ end # class
105
+
106
+ end # module
@@ -0,0 +1,11 @@
1
+ %hr/
2
+ %hr/
3
+ = haml :logstream
4
+
5
+ %hr/
6
+ %hr/
7
+ = haml :handlers
8
+
9
+ %hr/
10
+ %hr/
11
+ = haml :config
@@ -0,0 +1,48 @@
1
+ %hr/
2
+ .section_label#log_label
3
+ The Live Chook Log
4
+ &nbsp;&nbsp;&nbsp;&nbsp;
5
+ %button#view_log_btn{ type: 'button', onClick: 'view_log();', title: 'view the live Chook log' }
6
+ View
7
+ %button#hide_log_btn{ type: 'button', onClick: 'hide_log();', title: 'hide the live Chook log' }
8
+ Hide
9
+ &nbsp;&nbsp;&nbsp;&nbsp; Log Level:
10
+ %select#log_level_select{ onchange: 'change_log_level();' }
11
+ %option{ value: 'fatal', selected: Chook.logger.level == Logger::FATAL } fatal
12
+ %option{ value: 'error', selected: Chook.logger.level == Logger::ERROR } error
13
+ %option{ value: 'warn', selected: Chook.logger.level == Logger::WARN } warn
14
+ %option{ value: 'info', selected: Chook.logger.level == Logger::INFO } info
15
+ %option{ value: 'debug', selected: Chook.logger.level == Logger::DEBUG } debug
16
+
17
+ #logbox_div
18
+ #logbox_btns
19
+ %input#pause_log{ type: 'checkbox', checked: false, onclick: 'update_logbox();' }
20
+ Pause
21
+ &nbsp;&nbsp;&nbsp;&nbsp;
22
+ %button#clear_log_btn{ type: 'button', onClick: 'clear_log();', title: 'clear the live Chook log' }
23
+ Clear
24
+
25
+ // Log Level: [popup list] (set)
26
+ %textarea.monospaced#logbox{ readonly: true, rows: 20, cols: 150 }
27
+
28
+ %hr/
29
+ .section_label#handlers_label
30
+ Current Webhook Handlers (#{@handlers_for_admin_page.size})
31
+ &nbsp;&nbsp;&nbsp;&nbsp;
32
+
33
+ %button#view_handlers_btn{ type: 'button', onClick: 'view_handlers();', title: 'view the handler list' }
34
+ View
35
+ %button#hide_handlers_btn{ type: 'button', onClick: 'hide_handlers();', title: 'hide the handler list' }
36
+ Hide
37
+ &nbsp;&nbsp;&nbsp;&nbsp;
38
+
39
+ Handler Directory:
40
+ %span.monospaced
41
+ = Chook.config.handler_dir.to_s
42
+
43
+ #handlers_div
44
+ %table#handlers_table
45
+ %tr
46
+ %th Event
47
+ %th Handler Type
48
+ %th File Name
@@ -0,0 +1,15 @@
1
+ .section_label#config_label
2
+ %button#view_config_btn{ type: 'button', onClick: 'view_config();', title: 'view the config file' }
3
+ View
4
+ %button#hide_config_btn{ type: 'button', onClick: 'hide_config();', title: 'hide the config file' }
5
+ Hide
6
+ &nbsp;&nbsp;&nbsp;&nbsp;
7
+
8
+ Configuration
9
+
10
+ #config_div
11
+ Config file:
12
+ %span.monospaced= @config_src
13
+
14
+ #config_viewer_div
15
+ %textarea.monospaced#config_box{ readonly: true, rows: 20, cols: 150 }= @config_text
@@ -0,0 +1,48 @@
1
+ .section_label#handlers_label
2
+ %button#view_handlers_btn{ type: 'button', onClick: 'view_handlers();', title: 'view the handler list' }
3
+ View
4
+ %button#hide_handlers_btn{ type: 'button', onClick: 'hide_handlers();', title: 'hide the handler list' }
5
+ Hide
6
+ &nbsp;&nbsp;&nbsp;&nbsp;
7
+
8
+ Current Webhook Handlers (#{@handlers_for_admin_page.size})
9
+
10
+ #handlers_div
11
+
12
+ Handler Directory:
13
+ %span.monospaced= Chook.config.handler_dir.to_s
14
+ &nbsp;&nbsp;&nbsp;&nbsp;
15
+
16
+ %button#reload_all_handlers_btn{ type: 'button', onClick: 'reload_handlers();', title: 'reload all handlers' }
17
+ Reload
18
+ &nbsp;&nbsp;
19
+ %span#reloaded_notification
20
+
21
+ %table#handlers_table
22
+ %tr#handlers_table_header_row
23
+ %th.handlers_table_cell Event
24
+ %th.handlers_table_cell{ width: '10%' } Handler Type
25
+ %th.handlers_table_cell File Name
26
+ %th.handlers_table_cell Actions
27
+
28
+ - @handlers_for_admin_page.each do |hndlr_info|
29
+ %tr
30
+ %td.handlers_table_cell= hndlr_info[:event]
31
+ %td.handlers_table_cell= hndlr_info[:type].to_s
32
+ %td.handlers_table_cell= hndlr_info[:file].basename.to_s
33
+ %td.handlers_table_cell
34
+ %button.edit_handler_btn{ type: 'button', onClick: "edit_handler('#{hndlr_info[:file].basename}', '#{hndlr_info[:type]}');", title: 'View this handler' }
35
+ View
36
+
37
+ #handler_viewer_div
38
+ %input#currently_viewing_handler_file{ name: 'currently_viewing_handler_file', type: :hidden }
39
+ %input#currently_editing_handler_type{ name: 'currently_editing_handler_type', type: :hidden }
40
+ #currently_viewing_handler_label
41
+ %button#hide_handler_viewer_btn{ type: 'button', onClick: 'hide_handler_viewer();', title: 'hide the handler editor' }
42
+ Hide
43
+ &nbsp;&nbsp;&nbsp;&nbsp;
44
+ Viewing handler: &nbsp;&nbsp;
45
+ %span.monospaced#currently_viewing_filename -nothing-
46
+
47
+
48
+ %textarea.monospaced#handler_viewer{ rows: 35 , readonly: true }
@@ -0,0 +1,39 @@
1
+ !!!
2
+ %html{ lang: 'en' }
3
+
4
+ %head
5
+
6
+ %meta{ charset: 'UTF-8' }
7
+ %title
8
+ Chook
9
+
10
+ / CSS
11
+ %link{ href: '/css/chook.css', rel: 'stylesheet' }
12
+
13
+ / JavaScript
14
+ %script{ type: 'text/javascript', language: 'javascript', src: '/js/chook.js' }
15
+ %script{ type: 'text/javascript', language: 'javascript', src: '/js/logstream.js' }
16
+
17
+ %body
18
+ / Top
19
+ #pageheader
20
+ %table{ width: '100%' }
21
+ %tr
22
+ %td{ valign: 'bottom', width: '120' }
23
+ #header_logo
24
+ %img{ alt: '', height: '120', src: '/imgs/ChookLogoAlMcWhiggin.png', width: '120' }
25
+ #header_version
26
+ v#{Chook::VERSION}
27
+ %td
28
+ #definition
29
+ %span.chook_title Chook
30
+ %br/
31
+ %span.def_pronunciation /tʃʊk/ (also chookie /ˈtʃʊki/ )
32
+ %br/
33
+ %span.def_part_of_speech noun
34
+ %span.def_dialect Australian/NZ informal
35
+ %br/
36
+ %span.def_definition a chicken or fowl
37
+
38
+
39
+ = yield
@@ -0,0 +1,32 @@
1
+ .section_label#log_label
2
+ %button#view_log_btn{ type: 'button', onClick: 'view_log();', title: 'view the live Chook log' }
3
+ View
4
+ %button#hide_log_btn{ type: 'button', onClick: 'hide_log();', title: 'hide the live Chook log' }
5
+ Hide
6
+ &nbsp;&nbsp;&nbsp;&nbsp;
7
+
8
+ The Live Chook Log
9
+
10
+
11
+ #logbox_div
12
+ #logbox_btns
13
+ %input#pause_log{ type: 'checkbox', checked: false, onclick: 'update_logbox();' }
14
+ Pause
15
+ &nbsp;&nbsp;&nbsp;&nbsp;
16
+
17
+ %button#clear_log_btn{ type: 'button', onClick: 'clear_log();', title: 'clear the live Chook log' }
18
+ Clear
19
+
20
+ &nbsp;&nbsp;&nbsp;&nbsp;
21
+
22
+ Server Log Level:
23
+ %select#log_level_select{ onchange: 'change_log_level();',
24
+ title: 'changes here affect logging the server, not just your view' }
25
+
26
+ %option{ value: 'fatal', selected: Chook.logger.level == Logger::FATAL } fatal
27
+ %option{ value: 'error', selected: Chook.logger.level == Logger::ERROR } error
28
+ %option{ value: 'warn', selected: Chook.logger.level == Logger::WARN } warn
29
+ %option{ value: 'info', selected: Chook.logger.level == Logger::INFO } info
30
+ %option{ value: 'debug', selected: Chook.logger.level == Logger::DEBUG } debug
31
+
32
+ %textarea.monospaced#logbox{ readonly: true, rows: 20 }
@@ -0,0 +1,44 @@
1
+ [image] Chook v.XXX
2
+
3
+
4
+ Log (view/hide) Log Level: [popup list] (set)
5
+ --------- hidable text area with streaming log -----------
6
+
7
+
8
+ Current Handlers
9
+ filename/type (view/edit) (remove)
10
+ ...
11
+ ...
12
+ (Add new handler)
13
+ --------- text area with editable handler -----------
14
+ (save)
15
+
16
+
17
+ Configuration (save)
18
+ --------- text area with editable (?) config file -----------
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+ (c) Pixar.... [links]
@@ -122,9 +122,8 @@ module Chook
122
122
  # Proc: Pass an API object to the PROC to get a value
123
123
  #
124
124
  def self.classes
125
- @classes
125
+ @classes ||= {}
126
126
  end
127
- @classes = {}
128
127
 
129
128
  end # class Subject
130
129
 
@@ -41,6 +41,12 @@ Chook::Subject.classes[Chook::Subject::SMART_GROUP] = {
41
41
  # sampler: :smart_group_jssid,
42
42
  api_object_attribute: :id
43
43
  },
44
+ groupAddedDevicesIds: {
45
+ validation: Array
46
+ },
47
+ groupRemovedDevicesIds: {
48
+ validation: Array
49
+ },
44
50
  computer: { # SmartGroupComputerMembershipChange == true, SmartGroupMobileDeviceMembershipChange == false
45
51
  validation: :boolean,
46
52
  randomizer: :bool,
@@ -27,6 +27,6 @@
27
27
  module Chook
28
28
 
29
29
  ### The version of the Chook framework
30
- VERSION = '1.0.1.b2'.freeze
30
+ VERSION = '1.1.0'.freeze
31
31
 
32
32
  end # module
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chook
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1.b2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Lasell
@@ -9,27 +9,69 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-25 00:00:00.000000000 Z
12
+ date: 2018-10-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '='
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 1.4.8
20
+ version: '2.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '='
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 1.4.8
27
+ version: '2.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: sinatra-contrib
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '2.0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '2.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: thin
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.7'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.7'
56
+ - !ruby/object:Gem::Dependency
57
+ name: haml
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '5.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '5.0'
28
70
  description: |2
29
71
  Chook is a Ruby module which implements a framework for working with webhook events
30
72
  sent by the JSS, the core of Jamf Pro, a management tool for Apple devices.
31
73
 
32
- Chook also provides a simple, sinatra-based HTTP server, for handling those Events,
74
+ Chook also provides a simple, sinatra-based HTTP(S) server, for handling those Events,
33
75
  and classes for sending simulated TestEvents to a webhook handling server.
34
76
  email: chook@pixar.com
35
77
  executables:
@@ -38,10 +80,13 @@ extensions: []
38
80
  extra_rdoc_files:
39
81
  - README.md
40
82
  - LICENSE.txt
83
+ - CHANGES.md
41
84
  files:
85
+ - CHANGES.md
42
86
  - LICENSE.txt
43
87
  - README.md
44
88
  - bin/chook-server
89
+ - data/chook.conf.example
45
90
  - data/sample_handlers/RestAPIOperation-executable
46
91
  - data/sample_handlers/RestAPIOperation.rb
47
92
  - data/sample_handlers/SmartGroupComputerMembershipChange-executable
@@ -70,6 +115,7 @@ files:
70
115
  - lib/chook/event.rb
71
116
  - lib/chook/event/handled_event.rb
72
117
  - lib/chook/event/handled_event/handlers.rb
118
+ - lib/chook/event/handled_event_logger.rb
73
119
  - lib/chook/event/test_event.rb
74
120
  - lib/chook/event_handling.rb
75
121
  - lib/chook/event_testing.rb
@@ -78,9 +124,23 @@ files:
78
124
  - lib/chook/handled_subjects.rb
79
125
  - lib/chook/procs.rb
80
126
  - lib/chook/server.rb
127
+ - lib/chook/server/log.rb
128
+ - lib/chook/server/public/css/chook.css
129
+ - lib/chook/server/public/imgs/ChookLogoAlMcWhiggin.png
130
+ - lib/chook/server/public/js/chook.js
131
+ - lib/chook/server/public/js/logstream.js
81
132
  - lib/chook/server/routes.rb
82
133
  - lib/chook/server/routes/handle_webhook_event.rb
134
+ - lib/chook/server/routes/handlers.rb
83
135
  - lib/chook/server/routes/home.rb
136
+ - lib/chook/server/routes/log.rb
137
+ - lib/chook/server/views/admin.haml
138
+ - lib/chook/server/views/bak.haml
139
+ - lib/chook/server/views/config.haml
140
+ - lib/chook/server/views/handlers.haml
141
+ - lib/chook/server/views/layout.haml
142
+ - lib/chook/server/views/logstream.haml
143
+ - lib/chook/server/views/sketch_admin
84
144
  - lib/chook/subject.rb
85
145
  - lib/chook/subject/computer.rb
86
146
  - lib/chook/subject/handled_subject.rb
@@ -103,28 +163,23 @@ licenses:
103
163
  - Nonstandard
104
164
  metadata: {}
105
165
  post_install_message:
106
- rdoc_options:
107
- - --title
108
- - Chook
109
- - --line-numbers
110
- - --main
111
- - README.md
166
+ rdoc_options: []
112
167
  require_paths:
113
168
  - lib
114
169
  required_ruby_version: !ruby/object:Gem::Requirement
115
170
  requirements:
116
- - - '>='
171
+ - - ">="
117
172
  - !ruby/object:Gem::Version
118
173
  version: '0'
119
174
  required_rubygems_version: !ruby/object:Gem::Requirement
120
175
  requirements:
121
- - - '>'
176
+ - - ">="
122
177
  - !ruby/object:Gem::Version
123
- version: 1.3.1
178
+ version: '0'
124
179
  requirements: []
125
180
  rubyforge_project:
126
- rubygems_version: 2.6.8
181
+ rubygems_version: 2.7.7
127
182
  signing_key:
128
183
  specification_version: 4
129
- summary: A Ruby framework for simulating and processing Jamf Pro Webhooks
184
+ summary: A Ruby framework for simulating and processing Jamf Pro Webhook Events
130
185
  test_files: []