# encoding: utf-8 module LocalPac module App class GitHookController < ApplicationController helpers Sinatra::Param helpers Sinatra::JSON not_found do halt 404, json( error_summary: I18n.t('errors.unknown_git_hook.summary'), error_details: I18n.t('errors.unknown_git_hook.details', name: env['PATH_INFO']), result: :failure, ) end error do halt 500, json( error_summary: I18n.t('errors.default.summary'), error_details: I18n.t('errors.default.details'), result: :failure, ) end error Exceptions::GivenUrlInvalid do halt 401, json( error_summary: I18n.t('errors.invalid_url.summary'), error_details: I18n.t('errors.invalid_url.details', url: env['sinatra.error'].message), result: :failure, ) end set :raise_sinatra_param_exceptions, true error Sinatra::Param::InvalidParameterError do halt 401, json( error_summary: I18n.t('errors.invalid_parameter.summary'), error_details: I18n.t('errors.invalid_parameter.details', parameter: env['sinatra.error'].param), result: :failure, ) end error Exceptions::PacFileInvalid do halt 403, json( error_summary: I18n.t('errors.invalid_pac_file.summary'), error_details: I18n.t('errors.invalid_pac_file.details', name: env['sinatra.error']), result: :failure, ) end error Exceptions::ApiKeyInvalid do halt 403, json( error_summary: I18n.t('errors.invalid_api_key.summary'), error_details: I18n.t('errors.invalid_api_key.details', name: env['sinatra.error']), result: :failure, ) end error Exceptions::ReloadOfLocalStorageFailed do halt 500, json( error_summary: I18n.t('errors.reload_of_local_storage_failed.summary'), error_details: I18n.t('errors.reload_of_local_storage_failed.details'), result: :failure, ) end before do fail Exceptions::ApiKeyInvalid unless params['api_key'] == LocalPac.config.api_key end post '/pre-receive' do param :old_commit_id, String, required: true param :new_commit_id, String, required: true param :reference, String, required: true param :api_key, String, required: true validator = PacFileValidator.new repo = GitStorage.new(LocalPac.config.local_storage) repo.each_added_pac_file(params[:old_commit_id], params[:new_commit_id]) do |f| fail Exceptions::PacFileInvalid, f.path unless validator.valid?(f) end LocalPac::Actions::ReloadLocalStorage.new([LocalPac::App::FileServeController, LocalPac::App::LookupController]).run json result: :success end end end end