el_dap 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  *.gem
2
2
  .bundle
3
+ .idea
3
4
  Gemfile.lock
4
5
  pkg/*
5
6
  test.rb
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ 0.0.4
2
+ =====
3
+
4
+ * Added support for Ruby 1.8, making use of the SystemTimer gem to correctly handle timeouts.
5
+
1
6
  0.0.3
2
7
  =====
3
8
 
@@ -16,11 +16,21 @@ Additionally, users are also able to search the Active Directory.
16
16
  Just add this to your gem file:
17
17
 
18
18
  gem 'el_dap'
19
+
20
+ === Ruby Version Dependencies
21
+
22
+ ElDap will work out of the box with Ruby 1.9.
23
+
24
+ If you are using Ruby 1.8, you will need to manually install the *SystemTimer* gem so that timeout exceptions are handled
25
+ correctly. You will not be able to install ElDap on Ruby 1.8 unless you have this gem.
26
+
27
+ gem install SystemTimer
19
28
 
20
29
  == Features
21
30
 
22
31
  * Easily perform authentication against an Active Directory / LDAP server
23
32
  * Search an Active Directory based on wildcard search criteria
33
+ * Use multiple servers to protect against timeouts
24
34
 
25
35
  == Usage
26
36
 
@@ -1,4 +1,8 @@
1
- # -*- encoding: utf-8 -*-
1
+ #!/usr/bin/env gem build
2
+ # encoding: utf-8
3
+
4
+ require 'base64'
5
+
2
6
  $:.push File.expand_path("../lib", __FILE__)
3
7
  require "el_dap/version"
4
8
 
@@ -7,10 +11,10 @@ Gem::Specification.new do |s|
7
11
  s.version = ElDap::VERSION
8
12
  s.platform = Gem::Platform::RUBY
9
13
  s.authors = ["Ed James"]
10
- s.email = ["ed.james.email@gmail.com"]
14
+ s.email = Base64.decode64("ZWQuamFtZXMuZW1haWxAZ21haWwuY29t\n")
11
15
  s.homepage = "https://github.com/edjames/el_dap"
12
- s.summary = %q{A simple search and authentication tool for Active Directory using LDAP.}
13
- s.description = %q{A simple search and authentication tool for Active Directory using LDAP.}
16
+ s.summary = "Simple search and authentication tool for Active Directory"
17
+ s.description = "#{s.summary}. This included support for both Ruby 1.9 and ruby 1.8 (using the SystemTimer gem)."
14
18
 
15
19
  s.rubyforge_project = "el_dap"
16
20
 
@@ -20,4 +24,15 @@ Gem::Specification.new do |s|
20
24
  s.require_paths = ["lib"]
21
25
 
22
26
  s.add_dependency("net-ldap", "~> 0.2.2")
27
+ s.add_development_dependency "bundler"
28
+
29
+ # If Ruby version is 1.8 then check for SystemTimer gem
30
+ if RUBY_VERSION < "1.9"
31
+ begin
32
+ require 'system_timer'
33
+ rescue LoadError => ex
34
+ warn "WARNING: To use ElDap in Ruby 1.8 you must have the SystemTimer gem installed. Please run: gem install SystemTimer"
35
+ raise ex.message
36
+ end
37
+ end
23
38
  end
@@ -1,11 +1,13 @@
1
1
  require 'net/ldap'
2
- require 'timeout'
3
2
 
3
+
4
+ $: << File.dirname(__FILE__)
4
5
  require 'el_dap/api_methods'
5
6
  require 'el_dap/constants'
6
7
  require 'el_dap/exceptions'
7
8
  require 'el_dap/validator'
8
9
  require 'el_dap/worker'
10
+ require 'el_dap/time_cop'
9
11
  require 'el_dap/base'
10
12
 
11
13
  module ElDap
@@ -1,19 +1,19 @@
1
1
  module ElDap
2
2
  class Base
3
3
  attr_accessor :server_ips, :username, :password, :timeout, :treebase
4
-
4
+
5
5
  def initialize
6
6
  @server_ips = []
7
7
  @timeout = 15
8
8
  yield(self) if block_given?
9
9
  end
10
-
10
+
11
11
  def validate(username, password)
12
12
  return false if Validator.blank?(username, password)
13
-
13
+
14
14
  @server_ips.each do |ip_address|
15
15
  begin
16
- Timeout::timeout(self.timeout) do
16
+ TimeCop.timer.timeout(self.timeout) do
17
17
  worker = Worker.new(:username => username, :password => password, :ip_address => ip_address)
18
18
  return worker.bind
19
19
  end
@@ -22,26 +22,24 @@ module ElDap
22
22
  end
23
23
  end
24
24
  end
25
-
25
+
26
26
  def search(search_string)
27
27
  return nil if Validator.blank?(search_string)
28
-
29
- search_result = []
30
-
28
+
31
29
  @server_ips.each do |ip_address|
32
30
  begin
33
- Timeout::timeout(self.timeout) do
31
+ TimeCop.timer.timeout(self.timeout) do
34
32
  worker = Worker.new(:username => self.username, :password => self.password, :ip_address => ip_address)
35
-
36
33
  raise(InvalidCredentialsError, 'The user credentials provided are invalid') unless worker.bind
37
-
38
34
  return worker.search_directory(search_string, self.treebase)
39
35
  end
40
36
  rescue Timeout::Error
41
37
  next
42
38
  end
43
39
  end
40
+
41
+ false
44
42
  end
45
-
43
+
46
44
  end
47
45
  end
@@ -0,0 +1,29 @@
1
+ module ElDap
2
+ class TimeCop
3
+
4
+ def self.timer
5
+ if ruby_version < "1.9"
6
+ use_system_timer
7
+ else
8
+ use_timeout
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def self.ruby_version
15
+ RUBY_VERSION
16
+ end
17
+
18
+ def self.use_system_timer
19
+ require 'system_timer'
20
+ SystemTimer
21
+ end
22
+
23
+ def self.use_timeout
24
+ require 'timeout'
25
+ Timeout
26
+ end
27
+
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module ElDap
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -3,6 +3,7 @@ require 'spec_helper'
3
3
  module ElDap
4
4
  describe Base do
5
5
  before(:each) do
6
+ allow_message_expectations_on_nil
6
7
  @instance = Base.new do |i|
7
8
  i.username = 'name'
8
9
  i.password = 'password'
@@ -74,6 +75,12 @@ module ElDap
74
75
  @instance.search('name').should == ['result']
75
76
  end
76
77
 
78
+ it "should return false when all servers timeout" do
79
+ @worker.stub(:bind).and_return(true)
80
+ @worker.stub(:search_directory).and_raise(Timeout::Error)
81
+ @instance.search('name').should be_false
82
+ end
83
+
77
84
  it "should throw an exception if the search user credentials are invalid" do
78
85
  @worker.should_receive(:bind).and_return(false)
79
86
  lambda{ @instance.search('name') }.should raise_error(InvalidCredentialsError, 'The user credentials provided are invalid')
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ module ElDap
4
+ describe TimeCop do
5
+
6
+ it "should use the SystemTimer gem when Ruby version is 1.8" do
7
+ TimeCop.should_receive(:ruby_version).and_return('1.8')
8
+ TimeCop.should_receive(:use_system_timer)
9
+ TimeCop.timer
10
+ end
11
+
12
+ it "should use the SystemTimer gem when Ruby version is 1.9" do
13
+ TimeCop.should_receive(:ruby_version).and_return('1.9')
14
+ TimeCop.should_receive(:use_timeout)
15
+ TimeCop.timer
16
+ end
17
+
18
+ end
19
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: el_dap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-04-20 00:00:00.000000000Z
12
+ date: 2011-04-21 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: net-ldap
16
- requirement: &83249460 !ruby/object:Gem::Requirement
16
+ requirement: &79902310 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: 0.2.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *83249460
25
- description: A simple search and authentication tool for Active Directory using LDAP.
26
- email:
27
- - ed.james.email@gmail.com
24
+ version_requirements: *79902310
25
+ - !ruby/object:Gem::Dependency
26
+ name: bundler
27
+ requirement: &79902100 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *79902100
36
+ description: Simple search and authentication tool for Active Directory. This included
37
+ support for both Ruby 1.9 and ruby 1.8 (using the SystemTimer gem).
38
+ email: ed.james.email@gmail.com
28
39
  executables: []
29
40
  extensions: []
30
41
  extra_rdoc_files: []
@@ -40,17 +51,18 @@ files:
40
51
  - TODO.rdoc
41
52
  - el_dap.gemspec
42
53
  - lib/el_dap.rb
43
- - lib/el_dap/.rvmrc
44
54
  - lib/el_dap/api_methods.rb
45
55
  - lib/el_dap/base.rb
46
56
  - lib/el_dap/constants.rb
47
57
  - lib/el_dap/exceptions.rb
58
+ - lib/el_dap/time_cop.rb
48
59
  - lib/el_dap/validator.rb
49
60
  - lib/el_dap/version.rb
50
61
  - lib/el_dap/worker.rb
51
62
  - spec/el_dap/api_methods_spec.rb
52
63
  - spec/el_dap/base_spec.rb
53
64
  - spec/el_dap/constants_spec.rb
65
+ - spec/el_dap/time_cop_spec.rb
54
66
  - spec/el_dap/validator_spec.rb
55
67
  - spec/el_dap/worker_spec.rb
56
68
  - spec/spec_helper.rb
@@ -77,5 +89,5 @@ rubyforge_project: el_dap
77
89
  rubygems_version: 1.7.2
78
90
  signing_key:
79
91
  specification_version: 3
80
- summary: A simple search and authentication tool for Active Directory using LDAP.
92
+ summary: Simple search and authentication tool for Active Directory
81
93
  test_files: []
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env bash
2
- environment_id="ruby-1.9.2-head@el_dap"
3
-
4
- if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
5
- && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]] ; then
6
- \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
7
- else
8
- rvm --create "$environment_id"
9
- fi
10
-