Sha256: 749097a261f9d4f3166b595e84435660a408156a970017bcbf3562b2e9234625

Contents?: true

Size: 922 Bytes

Versions: 2

Compression:

Stored size: 922 Bytes

Contents

require 'rack'
require 'gollum/auth/version'

module Gollum
  module Auth
    def self.new(*args)
      App.new(*args)
    end

    class App
      def initialize(app, opts = { })
        @app = app
        @users = opts.fetch(:users, [ ])
      end

      def call(env)
        request = Rack::Request.new(env)
        if request.path_info =~ /^\/(create|edit|delete|rename|revert|upload)(\/.*)?$/
          auth = Rack::Auth::Basic::Request.new(env)
          unless auth.provided? && auth.basic? && valid?(auth.credentials)
            return [
              401,
              { 'Content-Type' => 'text/plain', 'WWW-Authenticate' => 'Basic realm="Gollum Wiki"' },
              [ 'Not authorized' ]
            ]
          end
        end
        @app.call(env)
      end

      private

      def valid?(credentials)
        @users.any? { |u| [ u['user'], u['password'] ] == credentials }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
gollum-auth-0.1.1 lib/gollum/auth.rb
gollum-auth-0.1.0 lib/gollum/auth.rb