authtools 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,5 +1,12 @@
1
1
  Authtools changelog.
2
2
 
3
+ v0.3.0 [4.07.2010]
4
+ * Added specs
5
+ * Added symbolic names for token sizes (:tiny, :short, :medium, :long)
6
+ * Added tiny (128bit) md5-like token
7
+ * Minor improvments
8
+ * TODO empty
9
+
3
10
  v0.2.0 [4.07.2010]
4
11
  * Improvements in implementation
5
12
  * Minor bug fixes
data/Rakefile CHANGED
@@ -16,29 +16,21 @@ rescue LoadError
16
16
  puts "Jeweler not available. Install it with: gem install jeweler"
17
17
  end
18
18
 
19
- require 'rake/testtask'
20
- Rake::TestTask.new(:test) do |test|
21
- test.libs << 'lib' << 'test'
22
- test.pattern = 'test/**/test_*.rb'
23
- test.verbose = true
19
+ require 'spec/rake/spectask'
20
+ Spec::Rake::SpecTask.new(:spec) do |spec|
21
+ spec.libs << 'lib' << 'spec'
22
+ spec.spec_files = FileList['spec/**/*_spec.rb']
24
23
  end
25
24
 
26
- begin
27
- require 'rcov/rcovtask'
28
- Rcov::RcovTask.new do |test|
29
- test.libs << 'test'
30
- test.pattern = 'test/**/test_*.rb'
31
- test.verbose = true
32
- end
33
- rescue LoadError
34
- task :rcov do
35
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
36
- end
25
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
26
+ spec.libs << 'lib' << 'spec'
27
+ spec.pattern = 'spec/**/*_spec.rb'
28
+ spec.rcov = true
37
29
  end
38
30
 
39
- task :test => :check_dependencies
31
+ task :spec => :check_dependencies
40
32
 
41
- task :default => :test
33
+ task :default => :spec
42
34
 
43
35
  require 'rake/rdoctask'
44
36
  Rake::RDocTask.new do |rdoc|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{authtools}
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kris Kowalik"]
@@ -15,8 +15,7 @@ h or unique token and check if specified password string is valid for stored has
15
15
  s.email = %q{kriss.kowalik@gmail.com}
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE",
18
- "README.rdoc",
19
- "TODO"
18
+ "README.rdoc"
20
19
  ]
21
20
  s.files = [
22
21
  ".gitignore",
@@ -24,19 +23,25 @@ h or unique token and check if specified password string is valid for stored has
24
23
  "LICENSE",
25
24
  "README.rdoc",
26
25
  "Rakefile",
27
- "TODO",
28
26
  "VERSION",
29
27
  "authtools.gemspec",
30
28
  "lib/authtools.rb",
31
29
  "lib/authtools/common.rb",
32
30
  "lib/authtools/password.rb",
33
- "lib/authtools/token.rb"
31
+ "lib/authtools/token.rb",
32
+ "spec/authtools_spec.rb",
33
+ "spec/spec.opts",
34
+ "spec/spec_helper.rb"
34
35
  ]
35
36
  s.homepage = %q{http://github.com/kriss/authtools}
36
37
  s.rdoc_options = ["--charset=UTF-8"]
37
38
  s.require_paths = ["lib"]
38
39
  s.rubygems_version = %q{1.3.6}
39
40
  s.summary = %q{Usefull staff for tokens, passwords and authorization}
41
+ s.test_files = [
42
+ "spec/spec_helper.rb",
43
+ "spec/authtools_spec.rb"
44
+ ]
40
45
 
41
46
  if s.respond_to? :specification_version then
42
47
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -1,4 +1,5 @@
1
1
  require 'digest/sha2'
2
+ require 'digest/md5'
2
3
  require 'authtools/common'
3
4
 
4
5
  module Authtools
@@ -6,15 +7,21 @@ module Authtools
6
7
  extend Common
7
8
  extend self
8
9
 
9
- SHORT = 256
10
+ TINY = 128
11
+ SHORT = 256
10
12
  MEDIUM = 384
11
- LONG = 512
13
+ LONG = 512
12
14
 
13
15
  # Generates new token with specified size.
14
16
  #
15
17
  def generate(size=SHORT)
16
- hash = Digest::SHA2.new(size)
17
- hash << self.salt
18
+ size = const_get(size.to_s.upcase) if [:tiny, :short, :medium, :long].include?(size)
19
+ if size > 128
20
+ hash = Digest::SHA2.new(size)
21
+ hash << self.salt
22
+ else
23
+ hash = Digest::MD5.hexdigest(self.salt)
24
+ end
18
25
  hash.to_s
19
26
  end
20
27
 
@@ -24,22 +31,10 @@ module Authtools
24
31
  generate(size)
25
32
  end
26
33
 
27
- # Shortcut for generate 256 bit token.
28
- #
29
- def short
30
- generate(SHORT)
31
- end
32
-
33
- # Shortcut for generate 384 bit token.
34
- #
35
- def medium
36
- generate(MEDIUM)
37
- end
38
-
39
- # Shortcut for generate 512 bit token.
40
- #
41
- def long
42
- generate(LONG)
34
+ %w{tiny short medium long}.each do |label|
35
+ module_eval do
36
+ define_method(label) { generate(label.to_sym) }
37
+ end
43
38
  end
44
39
  end
45
40
  end
@@ -0,0 +1,76 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "Authtools" do
4
+ describe "Password" do
5
+ it "should be properly extended by Authtools::Common" do
6
+ Authtools::Password.should respond_to :salt
7
+ end
8
+
9
+ before do
10
+ @hash = Authtools::Password.generate('secret')
11
+ end
12
+
13
+ it "should allow to generate hash based on given string" do
14
+ @hash.should_not be_nil
15
+ @hash.size.should == 192
16
+ end
17
+
18
+ it "should allow to retrieve salt from stored hash" do
19
+ salt = Authtools::Password.get_salt(@hash)
20
+ salt.should_not be_nil
21
+ salt.size.should == 64
22
+ @hash.match(/#{salt}\Z/).should_not be_nil
23
+ end
24
+
25
+ it "should allow to check if given hash was generated from specified password" do
26
+ Authtools::Password.check('secret', @hash).should == true
27
+ Authtools::Password.check('not secret', @hash).should == false
28
+ end
29
+ end
30
+
31
+ describe "Token" do
32
+ it "should be properly extended by Authtools::Common" do
33
+ Authtools::Token.should respond_to :salt
34
+ end
35
+
36
+ it "should define shortcuts for each token size" do
37
+ Authtools::Token.should respond_to :tiny
38
+ Authtools::Token.should respond_to :short
39
+ Authtools::Token.should respond_to :medium
40
+ Authtools::Token.should respond_to :long
41
+ end
42
+
43
+ it "should allow to generate 128bit random token" do
44
+ Authtools::Token.generate(:tiny).size.should == 32
45
+ Authtools::Token.tiny.size.should == 32
46
+ end
47
+
48
+ it "should allow to generate 256bit random token" do
49
+ Authtools::Token.generate(:short).size.should == 64
50
+ Authtools::Token.short.size.should == 64
51
+ end
52
+
53
+ it "should allow to generate 384bit random token" do
54
+ Authtools::Token.generate(:medium).size.should == 96
55
+ Authtools::Token.medium.size.should == 96
56
+ end
57
+
58
+ it "should allow to generate 512bit random token" do
59
+ Authtools::Token.generate(:long).size.should == 128
60
+ Authtools::Token.long.size.should == 128
61
+ end
62
+
63
+ it "should generate 256bit token by default" do
64
+ Authtools::Token.generate.size.should == 64
65
+ end
66
+ end
67
+
68
+ describe "Common" do
69
+ include Authtools::Common
70
+
71
+ it "should provide method for generating pseudo-random salt" do
72
+ salt.should_not be_nil
73
+ salt.size.should == 64
74
+ end
75
+ end
76
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,8 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'authtools'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 2
7
+ - 3
8
8
  - 0
9
- version: 0.2.0
9
+ version: 0.3.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kris Kowalik
@@ -29,20 +29,21 @@ extensions: []
29
29
  extra_rdoc_files:
30
30
  - LICENSE
31
31
  - README.rdoc
32
- - TODO
33
32
  files:
34
33
  - .gitignore
35
34
  - CHANGELOG
36
35
  - LICENSE
37
36
  - README.rdoc
38
37
  - Rakefile
39
- - TODO
40
38
  - VERSION
41
39
  - authtools.gemspec
42
40
  - lib/authtools.rb
43
41
  - lib/authtools/common.rb
44
42
  - lib/authtools/password.rb
45
43
  - lib/authtools/token.rb
44
+ - spec/authtools_spec.rb
45
+ - spec/spec.opts
46
+ - spec/spec_helper.rb
46
47
  has_rdoc: true
47
48
  homepage: http://github.com/kriss/authtools
48
49
  licenses: []
@@ -73,5 +74,6 @@ rubygems_version: 1.3.6
73
74
  signing_key:
74
75
  specification_version: 3
75
76
  summary: Usefull staff for tokens, passwords and authorization
76
- test_files: []
77
-
77
+ test_files:
78
+ - spec/spec_helper.rb
79
+ - spec/authtools_spec.rb
data/TODO DELETED
@@ -1,3 +0,0 @@
1
- TODO list:
2
-
3
- * Write specs!