site_hook 0.4.0 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 527916652c303be70f17556e05d2976ccf4147cc
4
- data.tar.gz: f425282a8157e32ac302dadedd5bf2c4289b2091
3
+ metadata.gz: b91ef665dece23dcb7dbc74835e8615686fca06f
4
+ data.tar.gz: cac8dd89fd31b748136a4ea995b1477cd90a7cdb
5
5
  SHA512:
6
- metadata.gz: aa270b66f0bab2f97a1b91783ae016648e456ad4c52869db1a58f5778455d956e6342bc3a8b561d3c3b9032d5b9ec8ea7e2e2d72506c323084ecaec32db151c4
7
- data.tar.gz: ab7a6e2c6765c95c9f900697139e94daf29332a4b726f8f5177208b74714f20912e3e5f188ccc39a59fde72d9bb4c0829fd8ef609ebbfbfcab8a55f71735aa51
6
+ metadata.gz: b8ba7d33d2b7a819f1d3ac2a3fc91640ed548165659372631deece7b23c956beeb3d7592415c84901012578e78b3052bbf8f66a52201c6f607e864a04f4c0d66
7
+ data.tar.gz: eb7cde1074571eebb5c96dd673f079cdadf1cc4161fb00c165c90df9a02a4aff20462ce108ee6b49388a0f8aa9dc844eebafbac690f44f1cd5e73c59d19c41d5
data/.gitignore CHANGED
@@ -6,7 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
- .idea/
9
+ /.idea/
10
10
  .vscode/
11
11
  /vendor
12
12
  # rspec failure tracking
@@ -4,10 +4,40 @@ require 'site_hook/logger'
4
4
  require 'recursive-open-struct'
5
5
  require 'site_hook/cli'
6
6
  require 'sinatra'
7
+ require 'haml'
8
+ require 'sass'
7
9
  require 'json'
10
+ require 'sinatra/json'
8
11
  require 'yaml'
9
12
 
10
13
  module SiteHook
14
+ module Gem
15
+ class Info
16
+ def self.name
17
+ 'site_hook'
18
+ end
19
+ def self.constant_name
20
+ 'SiteHook'
21
+ end
22
+ def self.author
23
+ %q(Ken Spencer <me@iotaspencer.me>)
24
+ end
25
+ end
26
+ end
27
+ class SassHandler < Sinatra::Base
28
+ set :views, Pathname(app_file).dirname.join('site_hook', 'static', 'sass').to_s
29
+ get '/css/*.css' do
30
+ filename = params[:splat].first
31
+ scss filename.to_sym, cache: false
32
+ end
33
+ end
34
+ class CoffeeHandler < Sinatra::Base
35
+ set :views, Pathname(app_file).dirname.join('site_hook', 'static', 'coffee').to_s
36
+ get '/js/*.js' do
37
+ filename = params[:splat].first
38
+ coffee filename.to_sym
39
+ end
40
+ end
11
41
  class Webhook < Sinatra::Base
12
42
  HOOKLOG = SiteHook::HookLogger::HookLog.new(SiteHook.log_levels['hook']).log
13
43
  BUILDLOG = SiteHook::HookLogger::BuildLog.new(SiteHook.log_levels['build']).log
@@ -18,7 +48,9 @@ module SiteHook
18
48
  set server: %w(thin)
19
49
  set quiet: true
20
50
  set raise_errors: true
21
-
51
+ set views: Pathname(app_file).dirname.join('site_hook', 'views')
52
+ set :public_folder, Pathname(app_file).dirname.join('site_hook', 'static')
53
+ use SassHandler
22
54
  # @param [String] body JSON String of body
23
55
  # @param [String] sig Signature or token from git service
24
56
  # @param [String] secret User-defined verification token
@@ -39,12 +71,38 @@ module SiteHook
39
71
  end
40
72
 
41
73
  get '/' do
42
- halt 403, {'Content-Type' => 'application/json'}, {message: 'no permission'}.to_json
74
+ halt 403, {'Content-Type' => 'text/html'}, "<h1>See <a href=\"/webhooks/\">here</a> for the active webhooks</h1>"
43
75
  end
44
- get '/webhook/?' do
45
- halt 405, {'Content-Type' => 'application/json'}, {message: 'GET not allowed'}.to_json
76
+
77
+ get '/webhooks.json', provides: :json do
78
+ content_type 'application/json'
79
+ public_projects = JPHRC['projects'].select do |project, hsh|
80
+ hsh.fetch('private', nil) == false or hsh.fetch('private', nil).nil?
81
+ end
82
+ result = {}
83
+ public_projects.each do |project, hsh|
84
+ result[project] = {}
85
+ hsh.delete('hookpass')
86
+ result[project].merge!(hsh)
87
+ end
88
+ headers 'Content-Type' => 'application/json', 'Accept' => 'application/json'
89
+ json result, layout: false
90
+
91
+ end
92
+
93
+ get '/webhooks/?' do
94
+ haml :webhooks, locals: {'projects' => JPHRC['projects']}
95
+ end
96
+
97
+ get '/webhook/*' do
98
+ if params[:splat]
99
+ pass
100
+ else
101
+ halt 405, {'Content-Type' => 'application/json'}, {message: 'GET not allowed'}.to_json
102
+ end
103
+
46
104
  end
47
- post '/webhook/:hook_name' do
105
+ post '/webhook/:hook_name/?' do
48
106
  request.body.rewind
49
107
  req_body = request.body.read
50
108
  js = RecursiveOpenStruct.new(JSON.parse(req_body))
@@ -58,7 +116,6 @@ module SiteHook
58
116
  plaintext = false
59
117
  signature = nil
60
118
  event = request.env.fetch('HTTP_X_GITLAB_EVENT', nil) || request.env.fetch('HTTP_X_GITHUB_EVENT', nil)
61
- APPLOG.info event.inspect
62
119
  if event != 'push'
63
120
  if event.nil?
64
121
  halt 400, {'Content-Type' => 'application/json'}, {message: 'no event header'}.to_json
@@ -28,7 +28,16 @@ module SiteHook
28
28
  # Prints version string
29
29
  # @return [NilClass] nil
30
30
  def __print_version
31
- puts SiteHook::VERSION
31
+ puts "Version: v#{SiteHook::VERSION}"
32
+ end
33
+
34
+ map %w(--gem-info --info --about) => :__gem_info
35
+ desc '--gem-info, --info, --about', 'Print info on the gem.'
36
+ def __gem_info
37
+ say "Gem Name: #{SiteHook::Gem::Info.name}"
38
+ say "Gem Constant: #{SiteHook::Gem::Info.constant_name}"
39
+ say "Gem Author: #{SiteHook::Gem::Info.author}"
40
+ say "Gem Version: v#{SiteHook::VERSION}"
32
41
  end
33
42
 
34
43
  method_option(:log_levels, type: :hash, banner: 'LEVELS', default: SiteHook.log_levels)
@@ -2,6 +2,8 @@ require 'thor'
2
2
  require 'yaml'
3
3
  require 'recursive-open-struct'
4
4
  module SiteHook
5
+ class FileExistsError < Exception
6
+ end
5
7
  class ConfigClass < Thor
6
8
  YML = open(Pathname(Dir.home).join('.jph-rc'), 'r')
7
9
 
@@ -10,11 +12,9 @@ module SiteHook
10
12
  def list
11
13
  puts YML.read
12
14
  end
13
- method_option '-f', type: :boolean, banner: 'FILE', default: false
15
+ method_option :file, type: :boolean, banner: 'FILE', default: false, aliases: %w(-f)
14
16
  desc 'gen [options]', "Generate a example config file if one doesn't exist"
15
17
  def gen
16
- #return if Pathname(Dir.home).join('.jph-rc').exist?
17
-
18
18
  yaml = [
19
19
  "# fatal, error, warn, info, debug",
20
20
  "log_levels:",
@@ -25,13 +25,36 @@ module SiteHook
25
25
  "projects:",
26
26
  " PROJECT.NAME: # Use the name you put as your webhook url",
27
27
  " # https://jekyllhook.example.com/webhook/PROJECT.NAME",
28
- " src: /path/to/jekyll/site/source # Directory you 'git pull' into",
29
- " dst: /path/to/build/destination/ # The web root will be this folder",
30
- " hookpass: SOMERANDOMSTRING # set your Gitlab-Token or GitHub secret to this",
28
+ " src: /path/2/site/source # Directory you 'git pull' into",
29
+ " dst: /path/2/destination/ # The web root will be this folder",
30
+ " host: git*.com # The git service you're using for vcs",
31
+ " repo: USER/REPO # The repo path on the git service",
32
+ " hookpass: SOMERANDOMSTRING # Gitlab-Token or GitHub secret, etc.",
33
+ " private: true/false # hidden from the public list",
31
34
  "",
32
35
  ]
36
+ if options[:file]
37
+ jphrc = Pathname(Dir.home).join('.jph-rc')
38
+ begin
39
+ if jphrc.exist?
40
+ raise SiteHook::FileExistsError "#{jphrc} exists. Will not overwrite."
41
+ else
42
+ open(jphrc, 'w') do |f|
43
+ yaml.each do |line|
44
+ f.puts line
45
+ end
46
+ end
47
+ say "Created #{jphrc}"
48
+ say "You can now edit #{jphrc} and add your projects."
49
+ end
50
+ rescue SiteHook::FileExistsError => e
51
+ puts e
52
+ end
53
+
54
+ else
55
+ puts yaml
56
+ end
33
57
 
34
- puts yaml
35
58
  end
36
59
  end
37
60
  end
@@ -0,0 +1,9 @@
1
+ body {
2
+ background-color: #bbbbff;
3
+ }
4
+ .list-group-item {
5
+ background-color: #036A07;
6
+ &:hover {
7
+ background-color: #021300
8
+ }
9
+ }
@@ -1,3 +1,3 @@
1
1
  module SiteHook
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -0,0 +1,24 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %meta{charset: "utf-8"}
5
+ %meta{name: "viewport", content: "width=device-width, initial-scale=1, shrink-to-fit=yes"}
6
+ %link{rel: "stylesheet", href: "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css", integrity: "sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm", crossorigin: "anonymous"}
7
+ %link{rel: "stylesheet", href: "/css/styles.css"}
8
+
9
+ %title Hello, world!
10
+ %body.bg-dark
11
+ %header.d-flex
12
+ %h1.text.light.d-flex.mx-auto Webhooks
13
+
14
+ #content.wrapper.card.bg-dark
15
+ =yield
16
+ %footer.container-fluid
17
+ %p.d-flex.justify-content-end.text-light
18
+ Powered by
19
+ %a{href: "https://iotaspencer.me/projects/site_hook"} #{"&nbsp;SiteHook&nbsp;"}
20
+ v#{SiteHook::VERSION}
21
+
22
+ %script{src: "https://code.jquery.com/jquery-3.2.1.slim.min.js", integrity: "sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN", crossorigin: "anonymous"}
23
+ %script{src: "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js", integrity: "sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q", crossorigin: "anonymous"}
24
+ %script{src: "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js", integrity: "sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl", crossorigin: "anonymous"}
@@ -0,0 +1,6 @@
1
+ #webhook-list.list-group
2
+ - projects.each do |name, hsh|
3
+ - if hsh.fetch('private', nil).nil? or hsh.fetch('private', nil)
4
+ %a{id: "#{hsh['repo'].sub(/\./, '-').sub(/\//, '-')}", class: "list-group-item",href: "https://#{hsh['host']}/#{hsh['repo']}"}
5
+ #{name}
6
+ %span{class: "badge badge-pill badge-dark"} https://#{hsh['host']}/#{hsh['repo']}
@@ -35,6 +35,8 @@ Gem::Specification.new do |spec|
35
35
  spec.add_runtime_dependency 'thin', '~> 1.7'
36
36
  spec.add_runtime_dependency 'activesupport', '~> 5.1'
37
37
  spec.add_runtime_dependency 'recursive-open-struct', '~> 1.1'
38
+ spec.add_runtime_dependency 'haml', '~> 5.0'
39
+ spec.add_runtime_dependency 'sass', '~> 3.5'
38
40
  spec.add_development_dependency 'bundler', '~> 1.16'
39
41
  spec.add_development_dependency 'rake', '~> 10.0'
40
42
  spec.add_development_dependency 'rspec', '~> 3.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: site_hook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Spencer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-18 00:00:00.000000000 Z
11
+ date: 2018-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -150,6 +150,34 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '1.1'
153
+ - !ruby/object:Gem::Dependency
154
+ name: haml
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '5.0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '5.0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: sass
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '3.5'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '3.5'
153
181
  - !ruby/object:Gem::Dependency
154
182
  name: bundler
155
183
  requirement: !ruby/object:Gem::Requirement
@@ -218,7 +246,10 @@ files:
218
246
  - lib/site_hook/logger.rb
219
247
  - lib/site_hook/sender.rb
220
248
  - lib/site_hook/spinner.rb
249
+ - lib/site_hook/static/sass/styles.scss
221
250
  - lib/site_hook/version.rb
251
+ - lib/site_hook/views/layout.haml
252
+ - lib/site_hook/views/webhooks.haml
222
253
  - site_hook.gemspec
223
254
  homepage: https://iotaspencer.me/projects/site_hook/
224
255
  licenses: