Class: Autumn::Authentication::Hostname
- Defined in:
- lib/autumn/authentication.rb
Overview
Authenticates by the host portion of an IRC message. A hostmask is used to match the relevant portion of the address with a whitelist of accepted host addresses.
This method can be a secure way of preventing unauthorized access if you choose an appropriately narrow hostmask. However, you must configure in advance the computers you may want to administrate your leaves from.
Instance Method Summary collapse
-
#authenticate(stem, channel, sender, leaf) ⇒ Object
:nodoc:.
-
#initialize(options = {}) ⇒ Hostname
constructor
Creates a new authenticator.
Methods inherited from Base
Constructor Details
#initialize(options = {}) ⇒ Hostname
Creates a new authenticator. You provide a hostmask via the hostmask
option – either a Regexp with one capture (that captures the portion of the hostmask you are interested in), or a Proc, which takes a host as an argument and returns true if the host is authorized, false if not. If the hostmask
option is not provided, a standard hostmask regexp will be used. This regexp strips everything left of the first period; for the example hostmask “wsd1.ca.widgetcom.net”, it would return “ca.widgetcom.net” to be used for comparison.
You also provide an authorized host with the host
option, or a list of such hosts with the hosts
option. If neither is given, an exception is raised.
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/autumn/authentication.rb', line 139 def initialize(={}) @hostmask = [:hostmask] @hostmask ||= /^.+?\.(.+)$/ @hostmask = @hostmask.to_rx(false) if @hostmask.kind_of? String if @hostmask.kind_of? Regexp then mask = @hostmask @hostmask = lambda do |host| if matches = host.match(mask) then matches[1] else nil end end end @hosts = [:host] @hosts ||= [:hosts] raise "You must give the host address of an administrator to use nick-based authentication." unless @hosts @hosts = [ @hosts ] unless @hosts.kind_of? Array end |
Instance Method Details
#authenticate(stem, channel, sender, leaf) ⇒ Object
:nodoc:
156 157 158 |
# File 'lib/autumn/authentication.rb', line 156 def authenticate(stem, channel, sender, leaf) # :nodoc: @hosts.include? @hostmask.call(sender[:host]) end |