Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
# frozen_string_literal: true

require 'delegate'
require 'gem_config'
require 'sinatra/base'
require 'sinatra/impersonate/impersonator'
require 'sinatra/impersonate/version'

# Sinatra module
module Sinatra
  # Allow impersonation of users by other users
  module Impersonate
    include GemConfig::Base

    with_configuration do
      has :permission, classes: Symbol
    end

    def self.registered(app) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
      app.get '/impersonate/stop' do
        @logged_in_user.stop_impersonating
        redirect back
      end

      app.post '/impersonate' do
        raise http_status(403) if params[:username].nil?
        unless @logged_in_user.can_impersonate? params[:username]
          raise http_status(403, 'You do not have permission to impersonate that user')
        end

        @logged_in_user.impersonate params[:username]
        redirect back
      end
    end
  end

  register Impersonate
end