lib/site_hook.rb in site_hook-0.4.0 vs lib/site_hook.rb in site_hook-0.5.0
- old
+ new
@@ -2,25 +2,57 @@
require 'site_hook/sender'
require 'site_hook/logger'
require 'recursive-open-struct'
require 'site_hook/cli'
require 'sinatra'
+require 'haml'
+require 'sass'
require 'json'
+require 'sinatra/json'
require 'yaml'
module SiteHook
+ module Gem
+ class Info
+ def self.name
+ 'site_hook'
+ end
+ def self.constant_name
+ 'SiteHook'
+ end
+ def self.author
+ %q(Ken Spencer <me@iotaspencer.me>)
+ end
+ end
+ end
+ class SassHandler < Sinatra::Base
+ set :views, Pathname(app_file).dirname.join('site_hook', 'static', 'sass').to_s
+ get '/css/*.css' do
+ filename = params[:splat].first
+ scss filename.to_sym, cache: false
+ end
+ end
+ class CoffeeHandler < Sinatra::Base
+ set :views, Pathname(app_file).dirname.join('site_hook', 'static', 'coffee').to_s
+ get '/js/*.js' do
+ filename = params[:splat].first
+ coffee filename.to_sym
+ end
+ end
class Webhook < Sinatra::Base
HOOKLOG = SiteHook::HookLogger::HookLog.new(SiteHook.log_levels['hook']).log
BUILDLOG = SiteHook::HookLogger::BuildLog.new(SiteHook.log_levels['build']).log
APPLOG = SiteHook::HookLogger::AppLog.new(SiteHook.log_levels['app']).log
JPHRC = YAML.load_file(Pathname(Dir.home).join('.jph-rc'))
set port: JPHRC.fetch('port', 9090)
set bind: '127.0.0.1'
set server: %w(thin)
set quiet: true
set raise_errors: true
-
+ set views: Pathname(app_file).dirname.join('site_hook', 'views')
+ set :public_folder, Pathname(app_file).dirname.join('site_hook', 'static')
+ use SassHandler
# @param [String] body JSON String of body
# @param [String] sig Signature or token from git service
# @param [String] secret User-defined verification token
# @param [Boolean] plaintext Whether the verification is plaintext
def Webhook.verified?(body, sig, secret, plaintext:)
@@ -37,16 +69,42 @@
end
end
end
get '/' do
- halt 403, {'Content-Type' => 'application/json'}, {message: 'no permission'}.to_json
+ halt 403, {'Content-Type' => 'text/html'}, "<h1>See <a href=\"/webhooks/\">here</a> for the active webhooks</h1>"
end
- get '/webhook/?' do
- halt 405, {'Content-Type' => 'application/json'}, {message: 'GET not allowed'}.to_json
+
+ get '/webhooks.json', provides: :json do
+ content_type 'application/json'
+ public_projects = JPHRC['projects'].select do |project, hsh|
+ hsh.fetch('private', nil) == false or hsh.fetch('private', nil).nil?
+ end
+ result = {}
+ public_projects.each do |project, hsh|
+ result[project] = {}
+ hsh.delete('hookpass')
+ result[project].merge!(hsh)
+ end
+ headers 'Content-Type' => 'application/json', 'Accept' => 'application/json'
+ json result, layout: false
+
end
- post '/webhook/:hook_name' do
+
+ get '/webhooks/?' do
+ haml :webhooks, locals: {'projects' => JPHRC['projects']}
+ end
+
+ get '/webhook/*' do
+ if params[:splat]
+ pass
+ else
+ halt 405, {'Content-Type' => 'application/json'}, {message: 'GET not allowed'}.to_json
+ end
+
+ end
+ post '/webhook/:hook_name/?' do
request.body.rewind
req_body = request.body.read
js = RecursiveOpenStruct.new(JSON.parse(req_body))
projects = JPHRC['projects']
@@ -56,10 +114,9 @@
halt 404, {'Content-Type' => 'application/json'}, {message: 'no such project', status: 1}.to_json
end
plaintext = false
signature = nil
event = request.env.fetch('HTTP_X_GITLAB_EVENT', nil) || request.env.fetch('HTTP_X_GITHUB_EVENT', nil)
- APPLOG.info event.inspect
if event != 'push'
if event.nil?
halt 400, {'Content-Type' => 'application/json'}, {message: 'no event header'}.to_json
end
end