Class: DandelionS1

Inherits:
RackRscript
  • Object
show all
Includes:
RXFHelperModule
Defined in:
lib/dandelion_s1.rb

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ DandelionS1

Returns a new instance of DandelionS1.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/dandelion_s1.rb', line 13

def initialize(opts={})

  h = {root: 'www', static: [], passwords: {'user' => 'us3r'}}.merge(opts)

  @passwords = h[:passwords]
  access_list = h[:access]

  #@access_list = {'/do/r/hello3' => 'user'}

  if access_list then

    h2 = SimpleConfig.new(access_list).to_h
    conf_access = h2[:body] || h2
    @access_list = conf_access.inject({}) \
                                {|r,x| k,v = x; r.merge(k.to_s => v.split)}

  end

  h3 = %i(log pkg_src rsc_host rsc root static debug)\
      .inject({}) {|r,x| r.merge(x => h[x])}

  super(**h3)
  @log.debug '@access_list: ' + @access_list.inspect if @log
  @log.debug 'end of initialize' if @log

end

Instance Method Details

#call(e) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/dandelion_s1.rb', line 40

def call(e)

  request = e['REQUEST_PATH']
  @log.debug 'request: ' + request.inspect if @log

  return super(e) if request == '/login'
  r = @access_list.detect {|k,v| request =~ Regexp.new(k)} if @access_list
  private_user = r ? r.last : nil

  req = Rack::Request.new(e)
  user = req.session[:username]

  @log.debug 'user: ' + user.inspect if @log
  #@log.debug '@e: ' + e.inspect if @log
  return jumpto '/login2?referer=' + e['PATH_INFO'] unless user

  if private_user.nil? then
    super(e)
  elsif (private_user.is_a? String and private_user == user) \
      or (private_user.is_a? Array and private_user.any? {|x| x == user})
    super(e)
  else
    jumpto '/unauthorised'
  end

end