lib/chook/server/routes.rb in chook-1.0.1.b2 vs lib/chook/server/routes.rb in chook-1.1.0

- old
+ new

@@ -21,7 +21,52 @@ ### KIND, either express or implied. See the Apache License for the specific ### language governing permissions and limitations under the Apache License. ### ### +module Chook + + # the server + class Server < Sinatra::Base + + # These two helpers let us decude which routes need + # http basic auth and which don't + # + # To protect a route, put `protected!` as the + # first line of code in the route. + # + # See http://sinatrarb.com/faq.html#auth + # + helpers do + def protected! + # don't protect if user isn't defined + return unless Chook.config.webhooks_user + + return if authorized? + headers['WWW-Authenticate'] = 'Basic realm="Restricted Area"' + halt 401, "Not authorized\n" + end + + def authorized? + @auth ||= Rack::Auth::Basic::Request.new(request.env) + @auth.provided? && \ + @auth.basic? && \ + @auth.credentials && \ + @auth.credentials == [Chook.config.webhooks_user, Chook::Server.webhooks_user_pw] + end + end + + # log errors in production (in dev, they go to stdout and the browser) + error do + logger.error "ERROR: #{env['sinatra.error'].message}" + env['sinatra.error'].backtrace.each { |l| logger.error "..#{l}" } + 500 + end + + end # server + +end # Chook + require 'chook/server/routes/home' require 'chook/server/routes/handle_webhook_event' +require 'chook/server/routes/handlers' +require 'chook/server/routes/log'