Sha256: 8ddfa7d88707b4fc4f35bb64bc229283c68476665434bfec63b2a8c82db3eb96

Contents?: true

Size: 1.85 KB

Versions: 5

Compression:

Stored size: 1.85 KB

Contents

module NginxTail
  module RemoteUser

    #
    # to easily identify remote and authenticated users, for filtering and formatting purposes
    #
    # e.g. add all employees as authenticated remote users (from your webserver's .htaccess file)
    #

    UNKNOWN_REMOTE_USER = "-".freeze # the 'default' nginx value for the $remote_user variable

    def self.included(base) # :nodoc:
      base.class_eval do

        @@authenticated_users = []

        # mainly (solely?) for testing purposes...
        def self.reset_authenticated_users
          while !@@authenticated_users.empty? ; @@authenticated_users.pop ; end
        end
        
        # mainly (solely?) for testing purposes...
        def self.authenticated_users
          @@authenticated_users.dup
        end
        
        def self.add_authenticated_user(authenticated_user)
          raise "Cannot add unkown remote user" if self.unknown_remote_user? authenticated_user
          (@@authenticated_users << authenticated_user).uniq!
        end

        def self.unknown_remote_user?(remote_user)
          remote_user == UNKNOWN_REMOTE_USER
        end

        def self.remote_user?(remote_user)
          !self.unknown_remote_user?(remote_user)
        end
        
        def self.authenticated_user?(remote_user)
          self.remote_user?(remote_user) && @@authenticated_users.include?(remote_user)
        end

        # this ensures the below module methods actually make sense...
        raise "Class #{base.name} should implement instance method 'remote_user'" unless base.instance_methods.include? 'remote_user'

      end
    end

    def unknown_remote_user?
      self.class.unknown_remote_user?(self.remote_user)
    end

    def remote_user?
      self.class.remote_user?(self.remote_user)
    end
    
    def authenticated_user?
      self.class.authenticated_user?(self.remote_user)
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ntail-0.0.11 lib/ntail/remote_user.rb
ntail-0.0.10 lib/ntail/remote_user.rb
ntail-0.0.9 lib/ntail/remote_user.rb
ntail-0.0.8 lib/ntail/remote_user.rb
ntail-0.0.7 lib/ntail/remote_user.rb