htauth 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,137 +2,137 @@ require 'spec_helper'
2
2
  require 'htauth/passwd_entry'
3
3
 
4
4
  describe HTAuth::PasswdEntry do
5
- before(:each) do
6
- @alice = HTAuth::PasswdEntry.new("alice", "a secret", "crypt", { :salt => "mD" })
7
- @bob = HTAuth::PasswdEntry.new("bob", "b secret", "crypt", { :salt => "b8"})
8
- @salt = "lo1tk/.."
9
- end
10
-
11
- it "initializes with a user and realm" do
12
- @alice.user.must_equal "alice"
13
- end
14
-
15
- it "has the correct crypt password" do
16
- @alice.password = "a secret"
17
- @alice.digest.must_equal "mDwdZuXalQ5zk"
18
- end
19
-
20
- it "encrypts correctly for md5" do
21
- bob = HTAuth::PasswdEntry.new("bob", "b secret", "md5", { :salt => @salt })
22
- bob.digest.must_equal "$apr1$lo1tk/..$CarApvZPee0F6Wj1U0GxZ1"
23
- end
24
-
25
- it "encrypts correctly for sha1" do
26
- bob = HTAuth::PasswdEntry.new("bob", "b secret", "sha1", { :salt => @salt })
27
- bob.digest.must_equal "{SHA}b/tjGXbX80MEKVnF200S43ca4hY="
28
- end
29
-
30
- it "encrypts correctly for plaintext" do
31
- bob = HTAuth::PasswdEntry.new("bob", "b secret", "plaintext", { :salt => @salt })
32
- bob.digest.must_equal "b secret"
33
- end
34
-
35
- it "encrypts with crypt as a default, when parsed from crypt()'d line" do
36
- bob2 = HTAuth::PasswdEntry.from_line(@bob.to_s)
37
- bob2.algorithm.must_be_instance_of( Array )
38
- bob2.algorithm.size.must_equal 2
39
- bob2.password = "another secret"
40
- bob2.algorithm.must_be_instance_of(HTAuth::Crypt)
41
- end
42
-
43
- it "encrypts with crypt as a default, when parsed from plaintext line" do
44
- p = HTAuth::PasswdEntry.new('paul', 'p secret', 'plaintext')
45
- p2 = HTAuth::PasswdEntry.from_line(p.to_s)
46
- p2.algorithm.must_be_instance_of(Array)
47
- p2.algorithm.size.must_equal 2
48
- p2.password = "another secret"
49
- p2.algorithm.must_be_instance_of(HTAuth::Crypt)
50
- end
51
-
52
- it "encrypts with md5 as default, when parsed from an md5 line" do
53
- m = HTAuth::PasswdEntry.new("mary", "m secret", "md5")
54
- m2 = HTAuth::PasswdEntry.from_line(m.to_s)
55
- m2.algorithm.must_be_instance_of(HTAuth::Md5)
56
- end
57
-
58
- it "encrypts with sha1 as default, when parsed from an sha1 line" do
59
- s = HTAuth::PasswdEntry.new("steve", "s secret", "sha1")
60
- s2 = HTAuth::PasswdEntry.from_line(s.to_s)
61
- s2.algorithm.must_be_instance_of(HTAuth::Sha1)
62
- end
63
-
64
- it "determins the algorithm to be crypt when checking a password" do
65
- bob2 = HTAuth::PasswdEntry.from_line(@bob.to_s)
66
- bob2.algorithm.must_be_instance_of(Array)
67
- bob2.algorithm.size.must_equal 2
68
- bob2.authenticated?("b secret").must_equal true
69
- bob2.algorithm.must_be_instance_of(HTAuth::Crypt)
70
- end
71
-
72
- it "determins the algorithm to be plain when checking a password" do
73
- bob2 = HTAuth::PasswdEntry.from_line("bob:b secret")
74
- bob2.algorithm.must_be_instance_of(Array)
75
- bob2.algorithm.size.must_equal 2
76
- bob2.authenticated?("b secret").must_equal true
77
- bob2.algorithm.must_be_instance_of(HTAuth::Plaintext)
78
- end
79
-
80
- it "authenticates correctly against md5" do
81
- m = HTAuth::PasswdEntry.new("mary", "m secret", "md5")
82
- m2 = HTAuth::PasswdEntry.from_line(m.to_s)
83
- m2.authenticated?("m secret").must_equal true
84
- end
85
-
86
- it "authenticates correctly against sha1" do
87
- s = HTAuth::PasswdEntry.new("steve", "s secret", "sha1")
88
- s2 = HTAuth::PasswdEntry.from_line(s.to_s)
89
- s2.authenticated?("s secret").must_equal true
90
- end
91
-
92
-
93
-
94
-
95
- it "returns username for a key" do
96
- @alice.key.must_equal "alice"
97
- end
98
-
99
- it "checks the password correctly" do
100
- @bob.authenticated?("b secret").must_equal true
101
- end
102
-
103
- it "formats correctly when put to a string" do
104
- @bob.to_s.must_equal "bob:b8Ml4Jp9I0N8E"
105
- end
106
-
107
- it "parses an input line" do
108
- @bob_new = HTAuth::PasswdEntry.from_line("bob:b8Ml4Jp9I0N8E")
109
- @bob.user.must_equal @bob_new.user
110
- @bob.digest.must_equal @bob_new.digest
111
- end
112
-
113
- it "knows if an input line is a possible entry and raises an exception" do
114
- lambda { HTAuth::PasswdEntry.is_entry!("#stuff") }.must_raise(HTAuth::InvalidPasswdEntry)
115
- lambda { HTAuth::PasswdEntry.is_entry!("this:that:other:stuff") }.must_raise(HTAuth::InvalidPasswdEntry)
116
- lambda { HTAuth::PasswdEntry.is_entry!("this:that:other") }.must_raise(HTAuth::InvalidPasswdEntry)
117
- lambda { HTAuth::PasswdEntry.is_entry!("this:that:0a90549e8ffb2dd62f98252a95d88xyz") }.must_raise(HTAuth::InvalidPasswdEntry)
118
- end
119
-
120
- it "knows if an input line is a possible entry and returns false" do
121
- HTAuth::PasswdEntry.is_entry?("#stuff").must_equal false
122
- HTAuth::PasswdEntry.is_entry?("this:that:other:stuff").must_equal false
123
- HTAuth::PasswdEntry.is_entry?("this:that:other").must_equal false
124
- HTAuth::PasswdEntry.is_entry?("this:that:0a90549e8ffb2dd62f98252a95d88xyz").must_equal false
125
- end
126
-
127
- it "knows if an input line is a possible entry and returns true" do
128
- HTAuth::PasswdEntry.is_entry?("bob:irRm0g.SDfCyI").must_equal true
129
- HTAuth::PasswdEntry.is_entry?("bob:b secreat").must_equal true
130
- HTAuth::PasswdEntry.is_entry?("bob:{SHA}b/tjGXbX80MEKVnF200S43ca4hY=").must_equal true
131
- HTAuth::PasswdEntry.is_entry?("bob:$apr1$lo1tk/..$CarApvZPee0F6Wj1U0GxZ1").must_equal true
132
-
133
- end
134
-
135
- it "duplicates itself" do
136
- @alice.dup.to_s.must_equal @alice.to_s
137
- end
5
+ before(:each) do
6
+ @alice = HTAuth::PasswdEntry.new("alice", "a secret", "crypt", { :salt => "mD" })
7
+ @bob = HTAuth::PasswdEntry.new("bob", "b secret", "crypt", { :salt => "b8"})
8
+ @salt = "lo1tk/.."
9
+ end
10
+
11
+ it "initializes with a user and realm" do
12
+ @alice.user.must_equal "alice"
13
+ end
14
+
15
+ it "has the correct crypt password" do
16
+ @alice.password = "a secret"
17
+ @alice.digest.must_equal "mDwdZuXalQ5zk"
18
+ end
19
+
20
+ it "encrypts correctly for md5" do
21
+ bob = HTAuth::PasswdEntry.new("bob", "b secret", "md5", { :salt => @salt })
22
+ bob.digest.must_equal "$apr1$lo1tk/..$CarApvZPee0F6Wj1U0GxZ1"
23
+ end
24
+
25
+ it "encrypts correctly for sha1" do
26
+ bob = HTAuth::PasswdEntry.new("bob", "b secret", "sha1", { :salt => @salt })
27
+ bob.digest.must_equal "{SHA}b/tjGXbX80MEKVnF200S43ca4hY="
28
+ end
29
+
30
+ it "encrypts correctly for plaintext" do
31
+ bob = HTAuth::PasswdEntry.new("bob", "b secret", "plaintext", { :salt => @salt })
32
+ bob.digest.must_equal "b secret"
33
+ end
34
+
35
+ it "encrypts with crypt as a default, when parsed from crypt()'d line" do
36
+ bob2 = HTAuth::PasswdEntry.from_line(@bob.to_s)
37
+ bob2.algorithm.must_be_instance_of( Array )
38
+ bob2.algorithm.size.must_equal 2
39
+ bob2.password = "another secret"
40
+ bob2.algorithm.must_be_instance_of(HTAuth::Crypt)
41
+ end
42
+
43
+ it "encrypts with crypt as a default, when parsed from plaintext line" do
44
+ p = HTAuth::PasswdEntry.new('paul', 'p secret', 'plaintext')
45
+ p2 = HTAuth::PasswdEntry.from_line(p.to_s)
46
+ p2.algorithm.must_be_instance_of(Array)
47
+ p2.algorithm.size.must_equal 2
48
+ p2.password = "another secret"
49
+ p2.algorithm.must_be_instance_of(HTAuth::Crypt)
50
+ end
51
+
52
+ it "encrypts with md5 as default, when parsed from an md5 line" do
53
+ m = HTAuth::PasswdEntry.new("mary", "m secret", "md5")
54
+ m2 = HTAuth::PasswdEntry.from_line(m.to_s)
55
+ m2.algorithm.must_be_instance_of(HTAuth::Md5)
56
+ end
57
+
58
+ it "encrypts with sha1 as default, when parsed from an sha1 line" do
59
+ s = HTAuth::PasswdEntry.new("steve", "s secret", "sha1")
60
+ s2 = HTAuth::PasswdEntry.from_line(s.to_s)
61
+ s2.algorithm.must_be_instance_of(HTAuth::Sha1)
62
+ end
63
+
64
+ it "determins the algorithm to be crypt when checking a password" do
65
+ bob2 = HTAuth::PasswdEntry.from_line(@bob.to_s)
66
+ bob2.algorithm.must_be_instance_of(Array)
67
+ bob2.algorithm.size.must_equal 2
68
+ bob2.authenticated?("b secret").must_equal true
69
+ bob2.algorithm.must_be_instance_of(HTAuth::Crypt)
70
+ end
71
+
72
+ it "determins the algorithm to be plain when checking a password" do
73
+ bob2 = HTAuth::PasswdEntry.from_line("bob:b secret")
74
+ bob2.algorithm.must_be_instance_of(Array)
75
+ bob2.algorithm.size.must_equal 2
76
+ bob2.authenticated?("b secret").must_equal true
77
+ bob2.algorithm.must_be_instance_of(HTAuth::Plaintext)
78
+ end
79
+
80
+ it "authenticates correctly against md5" do
81
+ m = HTAuth::PasswdEntry.new("mary", "m secret", "md5")
82
+ m2 = HTAuth::PasswdEntry.from_line(m.to_s)
83
+ m2.authenticated?("m secret").must_equal true
84
+ end
85
+
86
+ it "authenticates correctly against sha1" do
87
+ s = HTAuth::PasswdEntry.new("steve", "s secret", "sha1")
88
+ s2 = HTAuth::PasswdEntry.from_line(s.to_s)
89
+ s2.authenticated?("s secret").must_equal true
90
+ end
91
+
92
+
93
+
94
+
95
+ it "returns username for a key" do
96
+ @alice.key.must_equal "alice"
97
+ end
98
+
99
+ it "checks the password correctly" do
100
+ @bob.authenticated?("b secret").must_equal true
101
+ end
102
+
103
+ it "formats correctly when put to a string" do
104
+ @bob.to_s.must_equal "bob:b8Ml4Jp9I0N8E"
105
+ end
106
+
107
+ it "parses an input line" do
108
+ @bob_new = HTAuth::PasswdEntry.from_line("bob:b8Ml4Jp9I0N8E")
109
+ @bob.user.must_equal @bob_new.user
110
+ @bob.digest.must_equal @bob_new.digest
111
+ end
112
+
113
+ it "knows if an input line is a possible entry and raises an exception" do
114
+ lambda { HTAuth::PasswdEntry.is_entry!("#stuff") }.must_raise(HTAuth::InvalidPasswdEntry)
115
+ lambda { HTAuth::PasswdEntry.is_entry!("this:that:other:stuff") }.must_raise(HTAuth::InvalidPasswdEntry)
116
+ lambda { HTAuth::PasswdEntry.is_entry!("this:that:other") }.must_raise(HTAuth::InvalidPasswdEntry)
117
+ lambda { HTAuth::PasswdEntry.is_entry!("this:that:0a90549e8ffb2dd62f98252a95d88xyz") }.must_raise(HTAuth::InvalidPasswdEntry)
118
+ end
119
+
120
+ it "knows if an input line is a possible entry and returns false" do
121
+ HTAuth::PasswdEntry.is_entry?("#stuff").must_equal false
122
+ HTAuth::PasswdEntry.is_entry?("this:that:other:stuff").must_equal false
123
+ HTAuth::PasswdEntry.is_entry?("this:that:other").must_equal false
124
+ HTAuth::PasswdEntry.is_entry?("this:that:0a90549e8ffb2dd62f98252a95d88xyz").must_equal false
125
+ end
126
+
127
+ it "knows if an input line is a possible entry and returns true" do
128
+ HTAuth::PasswdEntry.is_entry?("bob:irRm0g.SDfCyI").must_equal true
129
+ HTAuth::PasswdEntry.is_entry?("bob:b secreat").must_equal true
130
+ HTAuth::PasswdEntry.is_entry?("bob:{SHA}b/tjGXbX80MEKVnF200S43ca4hY=").must_equal true
131
+ HTAuth::PasswdEntry.is_entry?("bob:$apr1$lo1tk/..$CarApvZPee0F6Wj1U0GxZ1").must_equal true
132
+
133
+ end
134
+
135
+ it "duplicates itself" do
136
+ @alice.dup.to_s.must_equal @alice.to_s
137
+ end
138
138
  end
@@ -4,63 +4,63 @@ require 'tempfile'
4
4
 
5
5
  describe HTAuth::PasswdFile do
6
6
 
7
- before(:each) do
8
- @tf = Tempfile.new("rpasswrd-passwd")
9
- @tf.write(IO.read(PASSWD_ORIGINAL_TEST_FILE))
10
- @tf.close
11
- @passwd_file = HTAuth::PasswdFile.new(@tf.path)
12
-
13
- @tf2 = Tempfile.new("rpasswrd-passwd-empty")
14
- @tf2.close
15
- @empty_passwd_file = HTAuth::PasswdFile.new(@tf2.path)
16
- end
7
+ before(:each) do
8
+ @tf = Tempfile.new("rpasswrd-passwd")
9
+ @tf.write(IO.read(PASSWD_ORIGINAL_TEST_FILE))
10
+ @tf.close
11
+ @passwd_file = HTAuth::PasswdFile.new(@tf.path)
17
12
 
18
- after(:each) do
19
- @tf2.close(true)
20
- @tf.close(true)
21
- end
13
+ @tf2 = Tempfile.new("rpasswrd-passwd-empty")
14
+ @tf2.close
15
+ @empty_passwd_file = HTAuth::PasswdFile.new(@tf2.path)
16
+ end
22
17
 
23
- it "can add a new entry to an already existing passwd file" do
24
- @passwd_file.add_or_update("charlie", "c secret", "sha1")
25
- @passwd_file.contents.must_equal IO.read(PASSWD_ADD_TEST_FILE)
26
- end
18
+ after(:each) do
19
+ @tf2.close(true)
20
+ @tf.close(true)
21
+ end
27
22
 
28
- it "can tell if an entry already exists in the passwd file" do
29
- @passwd_file.has_entry?("alice").must_equal true
30
- @passwd_file.has_entry?("david").must_equal false
31
- end
32
-
33
- it "can update an entry in an already existing passwd file, algorithm can change" do
34
- @passwd_file.add_or_update("alice", "a new secret", "sha1")
35
- @passwd_file.contents.must_equal IO.read(PASSWD_UPDATE_TEST_FILE)
36
- end
23
+ it "can add a new entry to an already existing passwd file" do
24
+ @passwd_file.add_or_update("charlie", "c secret", "sha1")
25
+ @passwd_file.contents.must_equal IO.read(PASSWD_ADD_TEST_FILE)
26
+ end
37
27
 
38
- it "fetches a copy of an entry" do
39
- @passwd_file.fetch("alice").to_s.must_equal "alice:$apr1$DghnA...$CsPcgerfsI/Ryy0AOAJtb0"
40
- end
28
+ it "can tell if an entry already exists in the passwd file" do
29
+ @passwd_file.has_entry?("alice").must_equal true
30
+ @passwd_file.has_entry?("david").must_equal false
31
+ end
41
32
 
42
- it "raises an error if an attempt is made to alter a non-existenet file" do
43
- lambda { HTAuth::PasswdFile.new("some-file") }.must_raise(HTAuth::FileAccessError)
44
- end
33
+ it "can update an entry in an already existing passwd file, algorithm can change" do
34
+ @passwd_file.add_or_update("alice", "a new secret", "sha1")
35
+ @passwd_file.contents.must_equal IO.read(PASSWD_UPDATE_TEST_FILE)
36
+ end
45
37
 
46
- # this test will only work on systems that have /etc/ssh_host_rsa_key
47
- it "raises an error if an attempt is made to open a file where no permissions are granted" do
48
- lambda { HTAuth::PasswdFile.new("/etc/ssh_host_rsa_key") }.must_raise(HTAuth::FileAccessError)
49
- end
38
+ it "fetches a copy of an entry" do
39
+ @passwd_file.fetch("alice").to_s.must_equal "alice:$apr1$DghnA...$CsPcgerfsI/Ryy0AOAJtb0"
40
+ end
50
41
 
51
- it "deletes an entry" do
52
- @passwd_file.delete("bob")
53
- @passwd_file.contents.must_equal IO.read(PASSWD_DELETE_TEST_FILE)
54
- end
42
+ it "raises an error if an attempt is made to alter a non-existenet file" do
43
+ lambda { HTAuth::PasswdFile.new("some-file") }.must_raise(HTAuth::FileAccessError)
44
+ end
45
+
46
+ # this test will only work on systems that have /etc/ssh_host_rsa_key
47
+ it "raises an error if an attempt is made to open a file where no permissions are granted" do
48
+ lambda { HTAuth::PasswdFile.new("/etc/ssh_host_rsa_key") }.must_raise(HTAuth::FileAccessError)
49
+ end
50
+
51
+ it "deletes an entry" do
52
+ @passwd_file.delete("bob")
53
+ @passwd_file.contents.must_equal IO.read(PASSWD_DELETE_TEST_FILE)
54
+ end
55
55
 
56
- it "is usable in a ruby manner and yeilds itself when opened" do
57
- HTAuth::PasswdFile.open(@tf.path) do |pf|
58
- pf.add_or_update("alice", "a new secret", "md5")
59
- pf.delete('bob')
60
- end
61
- lines = IO.readlines(@tf.path)
62
- lines.size.must_equal 1
63
- lines.first.split(':').first.must_equal "alice"
64
- lines.first.split(':').last.must_match( /\$apr1\$/ )
56
+ it "is usable in a ruby manner and yeilds itself when opened" do
57
+ HTAuth::PasswdFile.open(@tf.path) do |pf|
58
+ pf.add_or_update("alice", "a new secret", "md5")
59
+ pf.delete('bob')
65
60
  end
61
+ lines = IO.readlines(@tf.path)
62
+ lines.size.must_equal 1
63
+ lines.first.split(':').first.must_equal "alice"
64
+ lines.first.split(':').last.must_match( /\$apr1\$/ )
65
+ end
66
66
  end
@@ -2,14 +2,14 @@ require 'spec_helper'
2
2
  require 'htauth/plaintext'
3
3
 
4
4
  describe HTAuth::Plaintext do
5
- it "has a prefix" do
6
- HTAuth::Plaintext.new.prefix.must_equal ""
7
- end
5
+ it "has a prefix" do
6
+ HTAuth::Plaintext.new.prefix.must_equal ""
7
+ end
8
8
 
9
- it "encrypts the same way that apache does" do
10
- apache_result = "a secret"
11
- pt = HTAuth::Plaintext.new
12
- pt.encode("a secret").must_equal apache_result
13
- end
9
+ it "encrypts the same way that apache does" do
10
+ apache_result = "a secret"
11
+ pt = HTAuth::Plaintext.new
12
+ pt.encode("a secret").must_equal apache_result
13
+ end
14
14
  end
15
15
 
@@ -2,14 +2,14 @@ require 'spec_helper'
2
2
  require 'htauth/sha1'
3
3
 
4
4
  describe HTAuth::Sha1 do
5
- it "has a prefix" do
6
- HTAuth::Sha1.new.prefix.must_equal "{SHA}"
7
- end
5
+ it "has a prefix" do
6
+ HTAuth::Sha1.new.prefix.must_equal "{SHA}"
7
+ end
8
8
 
9
- it "encrypts the same way that apache does" do
10
- apache_result = "{SHA}ZrnlrvmM7ZCOV3FAvM7la89NKbk="
11
- sha1 = HTAuth::Sha1.new
12
- sha1.encode("a secret").must_equal apache_result
13
- end
9
+ it "encrypts the same way that apache does" do
10
+ apache_result = "{SHA}ZrnlrvmM7ZCOV3FAvM7la89NKbk="
11
+ sha1 = HTAuth::Sha1.new
12
+ sha1.encode("a secret").must_equal apache_result
13
+ end
14
14
  end
15
15
 
@@ -19,3 +19,10 @@ DIGEST_ADD_TEST_FILE = File.join(File.dirname(__FILE__), "test.add.digest"
19
19
  DIGEST_UPDATE_TEST_FILE = File.join(File.dirname(__FILE__), "test.update.digest")
20
20
  DIGEST_DELETE_TEST_FILE = File.join(File.dirname(__FILE__), "test.delete.digest")
21
21
  DIGEST_COMMENTED_TEST_FILE = File.join(File.dirname(__FILE__), "test.comments.digest")
22
+
23
+ require 'stringio'
24
+ class ConsoleIO < StringIO
25
+ def noecho(&block)
26
+ yield self
27
+ end
28
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: htauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Hinegardner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-18 00:00:00.000000000 Z
11
+ date: 2015-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.9'
69
- - !ruby/object:Gem::Dependency
70
- name: highline
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.6'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.6'
83
69
  description: HTAuth is a pure ruby replacement for the Apache support programs htdigest
84
70
  and htpasswd. Command line and API access are provided for access to htdigest and
85
71
  htpasswd files.
@@ -104,28 +90,30 @@ files:
104
90
  - bin/htpasswd-ruby
105
91
  - lib/htauth.rb
106
92
  - lib/htauth/algorithm.rb
93
+ - lib/htauth/cli.rb
94
+ - lib/htauth/cli/digest.rb
95
+ - lib/htauth/cli/passwd.rb
96
+ - lib/htauth/console.rb
107
97
  - lib/htauth/crypt.rb
108
- - lib/htauth/digest.rb
109
98
  - lib/htauth/digest_entry.rb
110
99
  - lib/htauth/digest_file.rb
111
100
  - lib/htauth/entry.rb
112
- - lib/htauth/errors.rb
101
+ - lib/htauth/error.rb
113
102
  - lib/htauth/file.rb
114
103
  - lib/htauth/md5.rb
115
- - lib/htauth/passwd.rb
116
104
  - lib/htauth/passwd_entry.rb
117
105
  - lib/htauth/passwd_file.rb
118
106
  - lib/htauth/plaintext.rb
119
107
  - lib/htauth/sha1.rb
120
108
  - lib/htauth/version.rb
109
+ - spec/cli/digest_spec.rb
110
+ - spec/cli/passwd_spec.rb
121
111
  - spec/crypt_spec.rb
122
112
  - spec/digest_entry_spec.rb
123
113
  - spec/digest_file_spec.rb
124
- - spec/digest_spec.rb
125
114
  - spec/md5_spec.rb
126
115
  - spec/passwd_entry_spec.rb
127
116
  - spec/passwd_file_spec.rb
128
- - spec/passwd_spec.rb
129
117
  - spec/plaintext_spec.rb
130
118
  - spec/sha1_spec.rb
131
119
  - spec/spec_helper.rb
@@ -170,14 +158,14 @@ summary: HTAuth is a pure ruby replacement for the Apache support programs htdig
170
158
  and htpasswd. Command line and API access are provided for access to htdigest and
171
159
  htpasswd files.
172
160
  test_files:
161
+ - spec/cli/digest_spec.rb
162
+ - spec/cli/passwd_spec.rb
173
163
  - spec/crypt_spec.rb
174
164
  - spec/digest_entry_spec.rb
175
165
  - spec/digest_file_spec.rb
176
- - spec/digest_spec.rb
177
166
  - spec/md5_spec.rb
178
167
  - spec/passwd_entry_spec.rb
179
168
  - spec/passwd_file_spec.rb
180
- - spec/passwd_spec.rb
181
169
  - spec/plaintext_spec.rb
182
170
  - spec/sha1_spec.rb
183
171
  - spec/spec_helper.rb