PageRenderTime 49ms CodeModel.GetById 42ms app.highlight 5ms RepoModel.GetById 1ms app.codeStats 0ms

/tools/Ruby/lib/ruby/1.8/webrick/httpauth/htgroup.rb

http://github.com/agross/netopenspace
Ruby | 61 lines | 47 code | 6 blank | 8 comment | 3 complexity | ae7e9bb032404f2938a6f5b2e8e9b16d MD5 | raw file
 1#
 2# httpauth/htgroup.rb -- Apache compatible htgroup file
 3#
 4# Author: IPR -- Internet Programming with Ruby -- writers
 5# Copyright (c) 2003 Internet Programming with Ruby writers. All rights
 6# reserved.
 7#
 8# $IPR: htgroup.rb,v 1.1 2003/02/16 22:22:56 gotoyuzo Exp $
 9
10require 'tempfile'
11
12module WEBrick
13  module HTTPAuth
14    class Htgroup
15      def initialize(path)
16        @path = path
17        @mtime = Time.at(0)
18        @group = Hash.new
19        open(@path,"a").close unless File::exist?(@path)
20        reload
21      end
22
23      def reload
24        if (mtime = File::mtime(@path)) > @mtime
25          @group.clear
26          open(@path){|io|
27            while line = io.gets
28              line.chomp!
29              group, members = line.split(/:\s*/)
30              @group[group] = members.split(/\s+/)
31            end
32          }
33          @mtime = mtime
34        end
35      end
36
37      def flush(output=nil)
38        output ||= @path
39        tmp = Tempfile.new("htgroup", File::dirname(output))
40        begin
41          @group.keys.sort.each{|group|
42            tmp.puts(format("%s: %s", group, self.members(group).join(" ")))
43          }
44          tmp.close
45          File::rename(tmp.path, output)
46        rescue
47          tmp.close(true)
48        end
49      end
50
51      def members(group)
52        reload
53        @group[group] || []
54      end
55
56      def add(group, members)
57        @group[group] = members(group) | members
58      end
59    end
60  end
61end