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