htauth 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +15 -0
  2. data/CONTRIBUTING.md +46 -0
  3. data/HISTORY.md +36 -0
  4. data/Manifest.txt +45 -0
  5. data/{README → README.md} +21 -22
  6. data/Rakefile +17 -0
  7. data/bin/htpasswd-ruby +5 -5
  8. data/lib/htauth/algorithm.rb +1 -8
  9. data/lib/htauth/crypt.rb +1 -1
  10. data/lib/htauth/digest.rb +5 -2
  11. data/lib/htauth/digest_entry.rb +5 -4
  12. data/lib/htauth/digest_file.rb +1 -1
  13. data/lib/htauth/errors.rb +10 -0
  14. data/lib/htauth/file.rb +1 -1
  15. data/lib/htauth/md5.rb +2 -0
  16. data/lib/htauth/passwd.rb +10 -4
  17. data/lib/htauth/passwd_entry.rb +2 -1
  18. data/lib/htauth/passwd_file.rb +64 -63
  19. data/lib/htauth/plaintext.rb +12 -11
  20. data/lib/htauth/version.rb +8 -9
  21. data/lib/htauth.rb +14 -4
  22. data/spec/crypt_spec.rb +10 -12
  23. data/spec/digest_entry_spec.rb +20 -21
  24. data/spec/digest_file_spec.rb +11 -12
  25. data/spec/digest_spec.rb +23 -23
  26. data/spec/md5_spec.rb +2 -2
  27. data/spec/passwd_entry_spec.rb +47 -48
  28. data/spec/passwd_file_spec.rb +12 -13
  29. data/spec/passwd_spec.rb +37 -38
  30. data/spec/plaintext_spec.rb +4 -7
  31. data/spec/sha1_spec.rb +3 -5
  32. data/spec/spec_helper.rb +8 -4
  33. data/spec/test.add.digest +3 -0
  34. data/spec/test.add.passwd +3 -0
  35. data/spec/test.delete.digest +1 -0
  36. data/spec/test.delete.passwd +1 -0
  37. data/spec/test.original.digest +2 -0
  38. data/spec/test.original.passwd +2 -0
  39. data/spec/test.update.digest +2 -0
  40. data/spec/test.update.passwd +2 -0
  41. data/tasks/default.rake +276 -0
  42. data/tasks/this.rb +214 -0
  43. metadata +131 -75
  44. data/HISTORY +0 -26
  45. data/gemspec.rb +0 -43
  46. data/tasks/announce.rake +0 -38
  47. data/tasks/config.rb +0 -98
  48. data/tasks/distribution.rake +0 -46
  49. data/tasks/documentation.rake +0 -31
  50. data/tasks/rspec.rake +0 -29
  51. data/tasks/rubyforge.rake +0 -59
  52. data/tasks/utils.rb +0 -80
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZTUyZDQ3ZjdhODM0ZGI2ODZkMjA2NzQ3MGVlMzEyN2RlNGQzZjZmOA==
5
+ data.tar.gz: !binary |-
6
+ M2I1NTRmMmRhMzE4NzVlMTY2MjI1OGNhMmExNzUzNzE0YjY2MWI1Yw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MjBiNzk5NmE4NGM5MGY5OGM1MjU1YWJiMjdiZmZmYTVmYTkyOGY2MDE2OTQ2
10
+ YmI0ZmU1MGZiNDdiMjE1MzQzZWJmNjY1YWM2OGYxY2EzNWVlZmM1MzE5ZjRj
11
+ ZWU4NWRmNmVkYWRkYmRhMDgzMjA2MTJjMGM0ZGViMjBmYWQzZTA=
12
+ data.tar.gz: !binary |-
13
+ OGY5MTIyMTQxYzM1MGVkODk0OGNjMDdiZDkxNWYyMTI1Y2E3NjNhMTZlMTcy
14
+ MmIyN2FjZDMyMjA0YjIxYmQ0MzE4ZTgzNDI4ZjAxNzk5YWYxMGUyNmJjZGIz
15
+ NWZjMmM4ZTAzNzYxMTk4NjNiY2Y0Y2U3MDgwNmQ0Y2I2ZDY3YTQ=
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,46 @@
1
+ # Hi there!
2
+
3
+ I see you are interested in contributing. That is wonderful. I love
4
+ contributions.
5
+
6
+ I guarantee that there are bugs in this software. And I guarantee that there is
7
+ a feature you want that is not in here yet. As such, any and all bugs reports
8
+ are gratefully accepted, bugfixes even more so. Helping out with bugs is the
9
+ easiest way to contribute.
10
+
11
+
12
+ ## The Quick Version
13
+
14
+ * Have a [GitHub Account][].
15
+ * Search the [GitHub Issues][] and see if your issue already present. If so
16
+ add your comments, :thumbsup:, etc.
17
+ * Issue not there? Not a problem, open up a [new issue][].
18
+ * **Bug reports** please be as detailed as possible. Include:
19
+ * full ruby engine and version: `ruby -e 'puts RUBY_DESCRIPTION'`
20
+ * operating system and version
21
+ * version of htauth `ruby -rubygems -e "require 'htauth'; puts htauth::VERSION"`
22
+ * as much detail about the bug as possible so I can replicate it. Feel free
23
+ to link in a [gist][]
24
+ * **New Feature**
25
+ * What the new feature should do.
26
+ * What benefit the new feature brings to the project.
27
+ * Fork the [repo][].
28
+ * Create a new branch for your issue: `git checkout -b issue/my-issue`
29
+ * Lovingly craft your contribution:
30
+ * `rake develop` to get started, or if you prefer bundler `rake develop:using_bundler && bundle`.
31
+ * `rake test` to run tests
32
+ * Make sure that `rake test` passes. It's important, I said it twice.
33
+ * Add yourself to the contributors section below.
34
+ * Submit your [pull request][].
35
+
36
+ # Contributors
37
+
38
+ * [Jeremy Hinegardner](https://github.com/copiousfreetime)
39
+ * [Kevin Barnes](https://github.com/vinbarnes)
40
+
41
+ [GitHub Account]: https://github.com/signup/free "GitHub Signup"
42
+ [GitHub Issues]: https://github.com/copiousfreetime/htauth/issues "Htauth Issues"
43
+ [new issue]: https://github.com/copiousfreetime/htauth/issues/new "New Htauth Issue"
44
+ [gist]: https://gist.github.com/ "New Gist"
45
+ [repo]: https://github.com/copiousfreetime/htauth "htauth Repo"
46
+ [pull request]: https://help.github.com/articles/using-pull-requests "Using Pull Requests"
data/HISTORY.md ADDED
@@ -0,0 +1,36 @@
1
+ # Changelog
2
+
3
+ ## Version 1.1.0 2014-03-10
4
+
5
+ * Update highline dependency
6
+ * Change the default algorithm in htpasswd-ruby to be MD5
7
+ * Convert tests to minitest
8
+ * Update to [fixme](http://github.com/copiousfreetime/fixme) project structure
9
+ * General update to ruby 1.9/2.0
10
+ * Fix all -w warnings
11
+
12
+ ## Version 1.0.3 2008-12-20
13
+
14
+ * update highline dependency
15
+
16
+ ## Version 1.0.2 2008-11-30
17
+
18
+ ### Minor enhancement
19
+
20
+ * Change project layout
21
+
22
+ ## Version 1.0.1 2008-02-06
23
+
24
+ ### Bugfixes
25
+
26
+ * fix require dependency chain
27
+ * fix gem dependency on rake
28
+
29
+ ## Version 1.0.0 2008-02-05
30
+
31
+ * Initial public release
32
+
33
+ ### Release Notes
34
+
35
+ * Look at 'htpasswd-ruby' and 'htdigest-ruby' to get started.
36
+
data/Manifest.txt ADDED
@@ -0,0 +1,45 @@
1
+ CONTRIBUTING.md
2
+ HISTORY.md
3
+ LICENSE
4
+ Manifest.txt
5
+ README.md
6
+ Rakefile
7
+ bin/htdigest-ruby
8
+ bin/htpasswd-ruby
9
+ lib/htauth.rb
10
+ lib/htauth/algorithm.rb
11
+ lib/htauth/crypt.rb
12
+ lib/htauth/digest.rb
13
+ lib/htauth/digest_entry.rb
14
+ lib/htauth/digest_file.rb
15
+ lib/htauth/entry.rb
16
+ lib/htauth/errors.rb
17
+ lib/htauth/file.rb
18
+ lib/htauth/md5.rb
19
+ lib/htauth/passwd.rb
20
+ lib/htauth/passwd_entry.rb
21
+ lib/htauth/passwd_file.rb
22
+ lib/htauth/plaintext.rb
23
+ lib/htauth/sha1.rb
24
+ lib/htauth/version.rb
25
+ spec/crypt_spec.rb
26
+ spec/digest_entry_spec.rb
27
+ spec/digest_file_spec.rb
28
+ spec/digest_spec.rb
29
+ spec/md5_spec.rb
30
+ spec/passwd_entry_spec.rb
31
+ spec/passwd_file_spec.rb
32
+ spec/passwd_spec.rb
33
+ spec/plaintext_spec.rb
34
+ spec/sha1_spec.rb
35
+ spec/spec_helper.rb
36
+ spec/test.add.digest
37
+ spec/test.add.passwd
38
+ spec/test.delete.digest
39
+ spec/test.delete.passwd
40
+ spec/test.original.digest
41
+ spec/test.original.passwd
42
+ spec/test.update.digest
43
+ spec/test.update.passwd
44
+ tasks/default.rake
45
+ tasks/this.rb
@@ -1,21 +1,20 @@
1
- == HTAuth
1
+ ## HTAuth
2
2
 
3
- * Homepage[http://copiousfreetime.rubyforge.org/htauth]
4
- * {Rubyforge Project}[http://rubyforge.org/projects/copiousfreetime/]
5
- * Github[http://github.com/copiousfreetime/htauth/tree/master]
3
+ * [Homepage](http://copiousfreetime.rubyforge.org/htauth)
4
+ * [Github](http://github.com/copiousfreetime/htauth/tree/master)
6
5
  * email jeremy at copiousfreetime dot org
7
6
 
8
- == DESCRIPTION
7
+ ## DESCRIPTION
9
8
 
10
9
  HTAuth is a pure ruby replacement for the Apache support programs htdigest and
11
10
  htpasswd. Command line and API access are provided for access to htdigest and
12
11
  htpasswd files.
13
12
 
14
- == FEATURES
13
+ ## FEATURES
15
14
 
16
15
  HTAuth provides to drop in commands *htdigest-ruby* and *htpasswd-ruby* that
17
16
  can manipulate the digest and passwd files in the same manner as Apache's
18
- original commands.
17
+ original commands.
19
18
 
20
19
  *htdigest-ruby* and *htpasswd-ruby* are command line compatible with *htdigest*
21
20
  and *htpasswd*. They support the same exact same command line options as the
@@ -24,11 +23,12 @@ originals, and have some extras.
24
23
  Additionally, you can access all the functionality of *htdigest-ruby* and
25
24
  *htpasswd-ruby* through an API.
26
25
 
27
- == SYNOPSIS
26
+ ## SYNOPSIS
28
27
 
29
- * htpasswd-ruby command line application
28
+ ### htpasswd-ruby command line application
30
29
 
31
- Usage:
30
+
31
+ Usage:
32
32
  htpasswd-ruby [-cmdpsD] passwordfile username
33
33
  htpasswd-ruby -b[cmdpsD] passwordfile username password
34
34
 
@@ -46,7 +46,7 @@ Additionally, you can access all the functionality of *htdigest-ruby* and
46
46
  -s, --sha1 Force SHA encryption of the password.
47
47
  -v, --version Show version info.
48
48
 
49
- * htdigest-ruby command line application
49
+ ### htdigest-ruby command line application
50
50
 
51
51
  Usage: htdigest-ruby [options] passwordfile realm username
52
52
  -c, --create Create a new digest password file; this overwrites an existing file.
@@ -54,25 +54,24 @@ Additionally, you can access all the functionality of *htdigest-ruby* and
54
54
  -h, --help Display this help.
55
55
  -v, --version Show version info.
56
56
 
57
- * API Usage
57
+ ### API Usage
58
58
 
59
- HTAuth::DigestFile.new("some.htdigest") do |df|
59
+ HTAuth::DigestFile.open("some.htdigest") do |df|
60
60
  df.add_or_update('someuser', 'myrealm', 'a password')
61
61
  df.delete('someolduser', 'myotherrealm')
62
- end
62
+ end
63
63
 
64
- HTAuth::PasswdFile.new("some.htpasswd", HTAuth::File::CREATE) do |pf|
64
+ HTAuth::PasswdFile.open("some.htpasswd", HTAuth::File::CREATE) do |pf|
65
65
  pf.add('someuser', 'a password', 'md5')
66
66
  pf.add('someotheruser', 'a different password', 'sha1')
67
- end
68
-
69
-
70
- == CREDITS
67
+ end
68
+
69
+ ## CREDITS
71
70
 
72
- * {The Apache Software Foundation}[http://www.apache.org/]
73
- * all the folks who contributed to htdigest and htpassword
71
+ * [The Apache Software Foundation](http://www.apache.org/)
72
+ * all the folks who contributed to htdigest and htpassword
74
73
 
75
- == LICENSE
74
+ ## LICENSE
76
75
 
77
76
  Copyright (c) 2008 Jeremy Hinegardner
78
77
 
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ # vim: syntax=ruby
2
+ load 'tasks/this.rb'
3
+
4
+ This.name = "htauth"
5
+ This.author = "Jeremy Hinegardner"
6
+ This.email = "jeremy@copiousfreetime.org"
7
+ This.homepage = "http://github.com/copiousfreetime/#{ This.name }"
8
+
9
+ This.ruby_gemspec do |spec|
10
+ spec.add_development_dependency( 'rake' , '~> 10.1')
11
+ spec.add_development_dependency( 'minitest' , '~> 5.0' )
12
+ spec.add_development_dependency( 'rdoc' , '~> 4.0' )
13
+
14
+ spec.add_dependency("highline", "~> 1.6")
15
+ end
16
+
17
+ load 'tasks/default.rake'
data/bin/htpasswd-ruby CHANGED
@@ -8,12 +8,12 @@ rescue LoadError
8
8
  end
9
9
 
10
10
  begin
11
- require 'htauth'
11
+ require 'htauth'
12
12
  rescue LoadError
13
- path = File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
14
- raise if $:.include?(path)
15
- $: << path
16
- retry
13
+ path = File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
14
+ raise if $:.include?(path)
15
+ $: << path
16
+ retry
17
17
  end
18
18
 
19
19
  HTAuth::Passwd.new.run(ARGV, ENV)
@@ -1,12 +1,10 @@
1
- require 'htauth'
2
-
3
1
  module HTAuth
4
2
  class InvalidAlgorithmError < StandardError ; end
5
3
  # base class all the Passwd algorithms derive from
6
4
  class Algorithm
7
5
 
8
6
  SALT_CHARS = (%w[ . / ] + ("0".."9").to_a + ('A'..'Z').to_a + ('a'..'z').to_a).freeze
9
- DEFAULT = ( RUBY_PLATFORM !~ /mswin32/ ) ? "crypt" : "md5"
7
+ DEFAULT = "md5"
10
8
  EXISTING = "existing"
11
9
 
12
10
  class << self
@@ -62,8 +60,3 @@ module HTAuth
62
60
  end
63
61
  end
64
62
  end
65
-
66
- require 'htauth/md5'
67
- require 'htauth/sha1'
68
- require 'htauth/crypt'
69
- require 'htauth/plaintext'
data/lib/htauth/crypt.rb CHANGED
@@ -10,7 +10,7 @@ module HTAuth
10
10
  end
11
11
 
12
12
  def prefix
13
- ""
13
+ ""
14
14
  end
15
15
 
16
16
  def encode(password)
data/lib/htauth/digest.rb CHANGED
@@ -1,4 +1,5 @@
1
- require 'htauth'
1
+ require 'htauth/version'
2
+ require 'htauth/errors'
2
3
  require 'htauth/digest_file'
3
4
 
4
5
  require 'ostruct'
@@ -15,6 +16,8 @@ module HTAuth
15
16
 
16
17
  def initialize
17
18
  @digest_file = nil
19
+ @option_parser = nil
20
+ @options = nil
18
21
  end
19
22
 
20
23
  def options
@@ -120,7 +123,7 @@ module HTAuth
120
123
  exit 1
121
124
  rescue SignalException => se
122
125
  $stderr.puts
123
- $stderr.puts "Interrupted"
126
+ $stderr.puts "Interrupted #{se}"
124
127
  exit 1
125
128
  end
126
129
  exit 0
@@ -1,3 +1,4 @@
1
+ require 'htauth/errors'
1
2
  require 'htauth/entry'
2
3
  require 'digest/md5'
3
4
 
@@ -25,11 +26,11 @@ module HTAuth
25
26
  # and the md5sum must be 32 characters long.
26
27
  def is_entry!(line)
27
28
  raise InvalidDigestEntry, "line commented out" if line =~ /\A#/
28
- parts = line.strip.split(":")
29
+ parts = line.strip.split(":")
29
30
  raise InvalidDigestEntry, "line must be of the format username:realm:md5checksum" if parts.size != 3
30
31
  raise InvalidDigestEntry, "md5 checksum is not 32 characters long" if parts.last.size != 32
31
32
  raise InvalidDigestEntry, "md5 checksum has invalid characters" if parts.last !~ /\A[[:xdigit:]]{32}\Z/
32
- return parts
33
+ return parts
33
34
  end
34
35
 
35
36
  # test if a line is an entry and return true or false
@@ -63,11 +64,11 @@ module HTAuth
63
64
  end
64
65
 
65
66
  def key
66
- "#{user}:#{realm}"
67
+ "#{user}:#{realm}"
67
68
  end
68
69
 
69
70
  def to_s
70
- "#{user}:#{realm}:#{digest}"
71
+ "#{user}:#{realm}:#{digest}"
71
72
  end
72
73
  end
73
74
  end
@@ -1,5 +1,5 @@
1
1
  require 'stringio'
2
-
2
+ require 'htauth/errors'
3
3
  require 'htauth/file'
4
4
  require 'htauth/digest_entry'
5
5
 
@@ -0,0 +1,10 @@
1
+ #--
2
+ # Copyrigth (c) 2008 Jeremy Hinegardner
3
+ # All rights reserved. See LICENSE and/or COPYING for details
4
+ #++
5
+
6
+ module HTAuth
7
+ class FileAccessError < StandardError ; end
8
+ class TempFileError < StandardError ; end
9
+ class PasswordError < StandardError ; end
10
+ end
data/lib/htauth/file.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'stringio'
2
- require 'htauth'
2
+ require 'htauth/errors'
3
3
 
4
4
  module HTAuth
5
5
  class FileAccessError < StandardError ; end
data/lib/htauth/md5.rb CHANGED
@@ -60,6 +60,8 @@ module HTAuth
60
60
  end
61
61
 
62
62
 
63
+ pd = pd.bytes.to_a
64
+
63
65
  l = (pd[ 0]<<16) | (pd[ 6]<<8) | pd[12]
64
66
  encoded_password << to_64(l, 4)
65
67
 
data/lib/htauth/passwd.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'htauth'
1
+ require 'htauth/errors'
2
2
  require 'htauth/passwd_file'
3
3
 
4
4
  require 'ostruct'
@@ -15,6 +15,8 @@ module HTAuth
15
15
 
16
16
  def initialize
17
17
  @passwd_file = nil
18
+ @option_parser = nil
19
+ @options = nil
18
20
  end
19
21
 
20
22
  def options
@@ -56,7 +58,7 @@ EOB
56
58
  options.file_mode = HTAuth::File::CREATE
57
59
  end
58
60
 
59
- op.on("-d", "--crypt", "Force CRYPT encryption of the password (default).") do |c|
61
+ op.on("-d", "--crypt", "Force CRYPT encryption of the password.") do |c|
60
62
  options.algorithm = "crypt"
61
63
  end
62
64
 
@@ -68,7 +70,7 @@ EOB
68
70
  options.show_help = h
69
71
  end
70
72
 
71
- op.on("-m", "--md5", "Force MD5 encryption of the password (default on Windows).") do |m|
73
+ op.on("-m", "--md5", "Force MD5 encryption of the password (default).") do |m|
72
74
  options.algorithm = "md5"
73
75
  end
74
76
 
@@ -88,6 +90,10 @@ EOB
88
90
  op.on("-v", "--version", "Show version info.") do |v|
89
91
  options.show_version = v
90
92
  end
93
+
94
+ op.separator ""
95
+
96
+ op.separator "The SHA algorihtm does not use a salt and is less secure than the MD5 algorithm"
91
97
  end
92
98
  end
93
99
  @option_parser
@@ -166,7 +172,7 @@ EOB
166
172
  exit 1
167
173
  rescue SignalException => se
168
174
  $stderr.puts
169
- $stderr.puts "Interrupted"
175
+ $stderr.puts "Interrupted #{se}"
170
176
  exit 1
171
177
  end
172
178
  exit 0
@@ -1,3 +1,4 @@
1
+ require 'htauth/errors'
1
2
  require 'htauth/entry'
2
3
  require 'htauth/algorithm'
3
4
 
@@ -25,7 +26,7 @@ module HTAuth
25
26
  # where username, and password do not contain the ':' character
26
27
  def is_entry!(line)
27
28
  raise InvalidPasswdEntry, "line commented out" if line =~ /\A#/
28
- parts = line.strip.split(":")
29
+ parts = line.strip.split(":")
29
30
  raise InvalidPasswdEntry, "line must be of the format username:pssword" if parts.size != 2
30
31
  return parts
31
32
  end
@@ -1,83 +1,84 @@
1
1
  require 'stringio'
2
2
  require 'tempfile'
3
3
 
4
+ require 'htauth/errors'
4
5
  require 'htauth/file'
5
6
  require 'htauth/passwd_entry'
6
7
 
7
8
  module HTAuth
8
- class PasswdFileError < StandardError ; end
9
+ class PasswdFileError < StandardError ; end
9
10
 
10
- # PasswdFile provides API style access to an +htpasswd+ produced file
11
- class PasswdFile < HTAuth::File
11
+ # PasswdFile provides API style access to an +htpasswd+ produced file
12
+ class PasswdFile < HTAuth::File
12
13
 
13
- ENTRY_KLASS = HTAuth::PasswdEntry
14
+ ENTRY_KLASS = HTAuth::PasswdEntry
14
15
 
15
- # does the entry the the specified username and realm exist in the file
16
- def has_entry?(username)
17
- test_entry = PasswdEntry.new(username)
18
- @entries.has_key?(test_entry.key)
19
- end
16
+ # does the entry the the specified username and realm exist in the file
17
+ def has_entry?(username)
18
+ test_entry = PasswdEntry.new(username)
19
+ @entries.has_key?(test_entry.key)
20
+ end
20
21
 
21
- # remove an entry from the file
22
- def delete(username)
23
- if has_entry?(username) then
24
- ir = internal_record(username)
25
- line_index = ir['line_index']
26
- @entries.delete(ir['entry'].key)
27
- @lines[line_index] = nil
28
- dirty!
29
- end
30
- nil
31
- end
22
+ # remove an entry from the file
23
+ def delete(username)
24
+ if has_entry?(username) then
25
+ ir = internal_record(username)
26
+ line_index = ir['line_index']
27
+ @entries.delete(ir['entry'].key)
28
+ @lines[line_index] = nil
29
+ dirty!
30
+ end
31
+ nil
32
+ end
32
33
 
33
- # add or update an entry as appropriate
34
- def add_or_update(username, password, algorithm = Algorithm::DEFAULT)
35
- if has_entry?(username) then
36
- update(username, password, algorithm)
37
- else
38
- add(username, password, algorithm)
39
- end
40
- end
34
+ # add or update an entry as appropriate
35
+ def add_or_update(username, password, algorithm = Algorithm::DEFAULT)
36
+ if has_entry?(username) then
37
+ update(username, password, algorithm)
38
+ else
39
+ add(username, password, algorithm)
40
+ end
41
+ end
41
42
 
42
- # add an new record. raises an error if the entry exists.
43
- def add(username, password, algorithm = Algorithm::DEFAULT)
44
- raise PasswdFileError, "Unable to add already existing user #{username}" if has_entry?(username)
45
- new_entry = PasswdEntry.new(username, password, algorithm)
46
- new_index = @lines.size
47
- @lines << new_entry.to_s
48
- @entries[new_entry.key] = { 'entry' => new_entry, 'line_index' => new_index }
49
- dirty!
50
- return nil
51
- end
43
+ # add an new record. raises an error if the entry exists.
44
+ def add(username, password, algorithm = Algorithm::DEFAULT)
45
+ raise PasswdFileError, "Unable to add already existing user #{username}" if has_entry?(username)
46
+ new_entry = PasswdEntry.new(username, password, algorithm)
47
+ new_index = @lines.size
48
+ @lines << new_entry.to_s
49
+ @entries[new_entry.key] = { 'entry' => new_entry, 'line_index' => new_index }
50
+ dirty!
51
+ return nil
52
+ end
52
53
 
53
- # update an already existing entry with a new password. raises an error if the entry does not exist
54
- def update(username, password, algorithm = Algorithm::EXISTING)
55
- raise PasswdFileError, "Unable to update non-existent user #{username}" unless has_entry?(username)
56
- ir = internal_record(username)
57
- ir['entry'].algorithm = algorithm
58
- ir['entry'].password = password
59
- @lines[ir['line_index']] = ir['entry'].to_s
60
- dirty!
61
- return nil
62
- end
54
+ # update an already existing entry with a new password. raises an error if the entry does not exist
55
+ def update(username, password, algorithm = Algorithm::EXISTING)
56
+ raise PasswdFileError, "Unable to update non-existent user #{username}" unless has_entry?(username)
57
+ ir = internal_record(username)
58
+ ir['entry'].algorithm = algorithm
59
+ ir['entry'].password = password
60
+ @lines[ir['line_index']] = ir['entry'].to_s
61
+ dirty!
62
+ return nil
63
+ end
63
64
 
64
- # fetches a copy of an entry from the file. Updateing the entry returned from fetch will NOT
65
- # propogate back to the file.
66
- def fetch(username)
67
- return nil unless has_entry?(username)
68
- ir = internal_record(username)
69
- return ir['entry'].dup
70
- end
65
+ # fetches a copy of an entry from the file. Updateing the entry returned from fetch will NOT
66
+ # propogate back to the file.
67
+ def fetch(username)
68
+ return nil unless has_entry?(username)
69
+ ir = internal_record(username)
70
+ return ir['entry'].dup
71
+ end
71
72
 
72
- def entry_klass
73
- ENTRY_KLASS
74
- end
73
+ def entry_klass
74
+ ENTRY_KLASS
75
+ end
75
76
 
76
- private
77
+ private
77
78
 
78
- def internal_record(username)
79
- e = PasswdEntry.new(username)
80
- @entries[e.key]
81
- end
79
+ def internal_record(username)
80
+ e = PasswdEntry.new(username)
81
+ @entries[e.key]
82
82
  end
83
+ end
83
84
  end
@@ -2,17 +2,18 @@ require 'htauth/algorithm'
2
2
 
3
3
  module HTAuth
4
4
 
5
- # the plaintext algorithm, which does absolutly nothing
6
- class Plaintext < Algorithm
7
- # ignore parameters
8
- def initialize(params = {})
9
- end
10
- def prefix
11
- ""
12
- end
5
+ # the plaintext algorithm, which does absolutly nothing
6
+ class Plaintext < Algorithm
7
+ # ignore parameters
8
+ def initialize(params = {})
9
+ end
10
+
11
+ def prefix
12
+ ""
13
+ end
13
14
 
14
- def encode(password)
15
- "#{password}"
16
- end
15
+ def encode(password)
16
+ "#{password}"
17
17
  end
18
+ end
18
19
  end