synapse_ldap_user 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6aa0877c5ac444d0d39dd7ad5c5aaf6f4abb4c5d
4
+ data.tar.gz: 8b02fbdfc701e41d723fa9df1acc9cf45c5a2240
5
+ SHA512:
6
+ metadata.gz: c7890f3e85860ffc6476b0b5bfb167739c788e7c3dee0fd3b75771344050562c1371ced2247a6e3ea612bb4509f7646a9f91485b8c1635eb55bdc3bad00f92a0
7
+ data.tar.gz: 2ca1042c419ae3486d4152eeac46d340f5bbbd99365a30dd845736a3686839d70fe0ce19f9f249d493d3dcb8676170928fbcc1fabf3d9f67bd997d0c6a24f98c
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
@@ -0,0 +1 @@
1
+ synapse_ldap_user
@@ -0,0 +1 @@
1
+ 2.0.0-p451
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source "http://rubygems.org"
2
+ gem "net-ldap", { git: "https://github.com/ruby-ldap/ruby-net-ldap.git" }
3
+
4
+ # Add dependencies to develop your gem here.
5
+ # Include everything needed to run rake, tests, features, etc.
6
+ group :development do
7
+ gem "shoulda", ">= 0"
8
+ gem "rdoc", "~> 3.12"
9
+ gem "bundler", "~> 1.0"
10
+ gem "jeweler", "~> 2.0.1"
11
+ gem "simplecov", ">= 0"
12
+ end
@@ -0,0 +1,88 @@
1
+ GIT
2
+ remote: https://github.com/ruby-ldap/ruby-net-ldap.git
3
+ revision: 210585e458ef809b949c25b1c4592fbd78a1222f
4
+ specs:
5
+ net-ldap (0.5.0)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activesupport (4.0.2)
11
+ i18n (~> 0.6, >= 0.6.4)
12
+ minitest (~> 4.2)
13
+ multi_json (~> 1.3)
14
+ thread_safe (~> 0.1)
15
+ tzinfo (~> 0.3.37)
16
+ addressable (2.3.5)
17
+ atomic (1.1.14)
18
+ builder (3.2.2)
19
+ descendants_tracker (0.0.3)
20
+ docile (1.1.2)
21
+ faraday (0.9.0)
22
+ multipart-post (>= 1.2, < 3)
23
+ git (1.2.6)
24
+ github_api (0.11.2)
25
+ addressable (~> 2.3)
26
+ descendants_tracker (~> 0.0.1)
27
+ faraday (~> 0.8, < 0.10)
28
+ hashie (>= 1.2)
29
+ multi_json (>= 1.7.5, < 2.0)
30
+ nokogiri (~> 1.6.0)
31
+ oauth2
32
+ hashie (2.0.5)
33
+ highline (1.6.20)
34
+ i18n (0.6.9)
35
+ jeweler (2.0.1)
36
+ builder
37
+ bundler (>= 1.0)
38
+ git (>= 1.2.5)
39
+ github_api
40
+ highline (>= 1.6.15)
41
+ nokogiri (>= 1.5.10)
42
+ rake
43
+ rdoc
44
+ json (1.8.1)
45
+ jwt (0.1.11)
46
+ multi_json (>= 1.5)
47
+ mini_portile (0.5.2)
48
+ minitest (4.7.5)
49
+ multi_json (1.8.4)
50
+ multi_xml (0.5.5)
51
+ multipart-post (2.0.0)
52
+ nokogiri (1.6.1)
53
+ mini_portile (~> 0.5.0)
54
+ oauth2 (0.9.3)
55
+ faraday (>= 0.8, < 0.10)
56
+ jwt (~> 0.1.8)
57
+ multi_json (~> 1.3)
58
+ multi_xml (~> 0.5)
59
+ rack (~> 1.2)
60
+ rack (1.5.2)
61
+ rake (10.1.1)
62
+ rdoc (3.12.2)
63
+ json (~> 1.4)
64
+ shoulda (3.5.0)
65
+ shoulda-context (~> 1.0, >= 1.0.1)
66
+ shoulda-matchers (>= 1.4.1, < 3.0)
67
+ shoulda-context (1.1.6)
68
+ shoulda-matchers (2.5.0)
69
+ activesupport (>= 3.0.0)
70
+ simplecov (0.8.2)
71
+ docile (~> 1.1.0)
72
+ multi_json
73
+ simplecov-html (~> 0.8.0)
74
+ simplecov-html (0.8.0)
75
+ thread_safe (0.1.3)
76
+ atomic
77
+ tzinfo (0.3.38)
78
+
79
+ PLATFORMS
80
+ ruby
81
+
82
+ DEPENDENCIES
83
+ bundler (~> 1.0)
84
+ jeweler (~> 2.0.1)
85
+ net-ldap!
86
+ rdoc (~> 3.12)
87
+ shoulda
88
+ simplecov
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 Adam Saegebarth
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,19 @@
1
+ = synapse_ldap_user
2
+
3
+ Description goes here.
4
+
5
+ == Contributing to synapse_ldap_user
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
9
+ * Fork the project.
10
+ * Start a feature/bugfix branch.
11
+ * Commit and push until you are happy with your contribution.
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2014 Adam Saegebarth. See LICENSE.txt for
18
+ further details.
19
+
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "synapse_ldap_user"
18
+ gem.homepage = "http://github.com/saegey/synapse_ldap_user"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{The Synapse Ldap User library}
21
+ gem.description = %Q{The Synapse Ldap User library}
22
+ gem.email = "adams@synapse.com"
23
+ gem.authors = ["Adam Saegebarth"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ desc "Code coverage detail"
36
+ task :simplecov do
37
+ ENV['COVERAGE'] = "true"
38
+ Rake::Task['test'].execute
39
+ end
40
+
41
+ task :default => :test
42
+
43
+ require 'rdoc/task'
44
+ Rake::RDocTask.new do |rdoc|
45
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
46
+
47
+ rdoc.rdoc_dir = 'rdoc'
48
+ rdoc.title = "synapse_ldap_user #{version}"
49
+ rdoc.rdoc_files.include('README*')
50
+ rdoc.rdoc_files.include('lib/**/*.rb')
51
+ end
52
+
53
+ task :console do
54
+ sh "irb -rubygems -I lib -r active_directory.rb -r configuration.rb"
55
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,15 @@
1
+ require 'net/ldap'
2
+ require 'active_directory/errors'
3
+
4
+ module ActiveDirectory
5
+ autoload :Configuration, 'active_directory/configuration'
6
+ autoload :User, 'active_directory/user'
7
+ autoload :Client, 'active_directory/client'
8
+ autoload :Utils, 'active_directory/utils'
9
+ autoload :DirectoryObject, 'active_directory/directory_object'
10
+ autoload :Group, 'active_directory/group'
11
+
12
+ def self.configure(&block)
13
+ ActiveDirectory::Configuration.instance_eval(&block)
14
+ end
15
+ end
@@ -0,0 +1,112 @@
1
+ module ActiveDirectory
2
+ class Client
3
+ def self.connection
4
+ ldap = Net::LDAP.new(
5
+ host: ActiveDirectory::Configuration.ldap_host,
6
+ port: ActiveDirectory::Configuration.ldap_port,
7
+ encryption: :simple_tls
8
+ )
9
+ ldap.authenticate(
10
+ ActiveDirectory::Configuration.username,
11
+ ActiveDirectory::Configuration.password
12
+ )
13
+ ldap
14
+ end
15
+
16
+ def self.search(filter, attrs, treebase = nil)
17
+ treebase ||= ActiveDirectory::Configuration.ldap_treebase
18
+ connection.search(base: treebase, filter: filter, attributes: attrs )
19
+ end
20
+
21
+ def self.update_attribute(dn, field, value)
22
+ if connection.replace_attribute(dn, field, value)
23
+ true
24
+ else
25
+ raise StandardError, "LDAP-Attribute #{field} was not updated for \
26
+ [#{dn}]. Error #{connection.get_operation_result}"
27
+ end
28
+ end
29
+
30
+ def self.modify(dn, operations)
31
+ if connection.modify(dn: dn, operations: operations)
32
+ true
33
+ else
34
+ false
35
+ end
36
+ end
37
+
38
+ def self.rename(old_dn, new_dn)
39
+ connection.rename(
40
+ olddn: old_dn,
41
+ newrdn: new_dn,
42
+ delete_attributes: true,
43
+ new_superior: "OU=Automated Groups,OU=Groups,DC=synapsedev,DC=com"
44
+ )
45
+ end
46
+
47
+ def self.delete_attribute(dn, field)
48
+ if connection.delete_attribute(dn, field.to_sym)
49
+ # remove_instance_variable("@#{field}".to_sym)
50
+ true
51
+ else
52
+ raise StandardError, "LDAP-Attribute #{field} was not deleted for [#{dn}]"
53
+ end
54
+ end
55
+
56
+ def self.modify_unicode_pwd(dn, old_password, new_password)
57
+ ops = [
58
+ [:delete, :unicodePwd, old_password],
59
+ [:add, :unicodePwd, new_password]
60
+ ]
61
+ if connection.modify(dn: dn, operations: ops)
62
+ true
63
+ else
64
+ raise StandardError, "LDAP-Attribute password for #{dn} was not \
65
+ updated. Error: #{connection.get_operation_result}"
66
+ end
67
+ end
68
+
69
+ def self.add_attribute(dn, field, value)
70
+ if connection.add_attribute(dn, field, value)
71
+ true
72
+ else
73
+ raise StandardError, "LDAP-Attribute (#{field}) wasnt added for \
74
+ #{dn}. Error: #{connection.get_operation_result}"
75
+ end
76
+ end
77
+
78
+ def self.add(dn, attrs)
79
+ puts dn
80
+ puts attrs
81
+ result = connection.add(:dn => dn, :attributes => attrs)
82
+ if result
83
+ message = "LDAP-Object #{dn} was created"
84
+ return result, message
85
+ else
86
+ mesage = "LDAP-Object #{dn} was not created. \
87
+ Error: #{connection.get_operation_result}"
88
+ return result, message
89
+ end
90
+
91
+ # DirectoryUser.add(
92
+ # "CN=Test Dude,OU=Testing,OU=Accounts,DC=synapsedev,DC=com",
93
+ # {
94
+ # name: "Test dude",
95
+ # samaccountname: "test_dude_123",
96
+ # objectclass:["top", "user"],
97
+ # sn: "Dude",
98
+ # cn: "Test Dude",
99
+ # givenname: "Test"
100
+ # }
101
+ # )
102
+ end
103
+
104
+ def self.delete(dn)
105
+ if connection.delete(dn: dn)
106
+ true
107
+ else
108
+ raise StandardError, "LDAP-Object #{dn} was not deleted. Error: #{connection.get_operation_result}"
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,96 @@
1
+ module ActiveDirectory
2
+ module Configuration
3
+ extend self
4
+
5
+ def reset!
6
+ attributes.clear
7
+ end
8
+
9
+ def attributes
10
+ @attributes ||= {}
11
+ end
12
+
13
+ def ldap_treebase(ldap_treebase=nil)
14
+ if ldap_treebase
15
+ self.ldap_treebase = ldap_treebase
16
+ else
17
+ attributes[:ldap_treebase] ||
18
+ raise(ConfigurationError,
19
+ '#ldap_treebase is a required configuration value.')
20
+ end
21
+ end
22
+
23
+ def ldap_treebase=(ldap_treebase)
24
+ attributes[:ldap_treebase] = ldap_treebase
25
+ end
26
+
27
+ def ldap_host(ldap_host=nil)
28
+ if ldap_host
29
+ self.ldap_host = ldap_host
30
+ else
31
+ attributes[:ldap_host] ||
32
+ raise(ConfigurationError,
33
+ '#ldap_host is a required configuration value.')
34
+ end
35
+ end
36
+
37
+ def ldap_host=(ldap_host)
38
+ attributes[:ldap_host] = ldap_host
39
+ end
40
+
41
+ def ldap_port(ldap_port=nil)
42
+ if ldap_port
43
+ self.ldap_port = ldap_port
44
+ else
45
+ attributes[:ldap_port] ||
46
+ raise(ConfigurationError,
47
+ '#ldap_port is a required configuration value.')
48
+ end
49
+ end
50
+
51
+ def ldap_port=(ldap_port)
52
+ attributes[:ldap_port] = ldap_port
53
+ end
54
+
55
+ def username(username=nil)
56
+ if username
57
+ self.username = username
58
+ else
59
+ attributes[:username] ||
60
+ raise(ConfigurationError,
61
+ '#username is a required configuration value.')
62
+ end
63
+ end
64
+
65
+ def username=(username)
66
+ attributes[:username] = username
67
+ end
68
+
69
+ def password(password=nil)
70
+ if password
71
+ self.password = password
72
+ else
73
+ attributes[:password] ||
74
+ raise(ConfigurationError,
75
+ '#password is a required configuration value.')
76
+ end
77
+ end
78
+
79
+ def password=(password)
80
+ attributes[:password] = password
81
+ end
82
+
83
+ def log(path = nil)
84
+ self.log = path if path
85
+ attributes[:log]
86
+ end
87
+
88
+ def log=(path)
89
+ attributes[:log] = path
90
+ end
91
+
92
+ def logger
93
+ attributes[:logger] ||= ::Logger.new (log && !log.empty?) ? log : $stdout
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,40 @@
1
+ module ActiveDirectory
2
+ class DirectoryObject
3
+
4
+ def initialize(options={})
5
+ self.class.fields.each do |k, v|
6
+ self.class.__send__(:attr_accessor, v)
7
+ if options[k.to_sym].kind_of?(Array)
8
+ self.__send__("#{v}=", options[k.to_sym].first)
9
+ else
10
+ self.__send__("#{v}=", options[k.to_sym])
11
+ end
12
+ end
13
+ end
14
+
15
+ def update
16
+ self.class.fields.each do |k, v|
17
+ # puts k, instance_variable_get("@#{v}")
18
+ Client.update_attribute(@dn, k, instance_variable_get("@#{v}"))
19
+ end
20
+ end
21
+
22
+ def rename(new_dn)
23
+ Client.rename(@dn, new_dn)
24
+ #puts "test"
25
+ end
26
+
27
+ def create
28
+ puts build_create_data
29
+ Client.add(@dn, build_create_data)
30
+ end
31
+
32
+ def delete
33
+ Client.delete(@dn)
34
+ end
35
+
36
+ def self.fields(fields = {})
37
+ fields
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,10 @@
1
+ module ActiveDirectory
2
+ class RecordNotFound < StandardError; end
3
+ class InitializationError < StandardError; end
4
+ class ConfigurationError < StandardError; end
5
+ class ReadError < StandardError; end
6
+ class LoginError < StandardError; end
7
+ class AuthError < StandardError; end
8
+ class UnknownError < StandardError; end
9
+ class CreateUserError < StandardError; end
10
+ end
@@ -0,0 +1,59 @@
1
+ module ActiveDirectory
2
+ class Group < DirectoryObject
3
+ def initialize(options={})
4
+ super
5
+ @object_class = ["top", "group"]
6
+ end
7
+
8
+ def self.find_by_email(email, treebase=nil)
9
+ filter = "(&(objectClass=group)(mail=#{email}))"
10
+ results = Client.search(filter, self.fields.keys, treebase).first
11
+ if results
12
+ self.new(results)
13
+ else
14
+ return false, "LDAP-Error - The group with #{email} does not exist"
15
+ end
16
+ end
17
+
18
+ def self.find_by_object_guid(object_guid, treebase=nil)
19
+ filter = Net::LDAP::Filter.bineq("objectGUID", object_guid)
20
+ results = Client.search(filter, self.fields.keys, treebase).first
21
+ end
22
+
23
+ def self.find_by_cn(cn, treebase=nil)
24
+ filter = "(&(objectClass=group)(cn=#{cn}))"
25
+ results = Client.search(filter, self.fields.keys, treebase).first
26
+ if results
27
+ self.new(results)
28
+ else
29
+ return false, "LDAP-Error - The group with #{cn} does not exist"
30
+ end
31
+ end
32
+
33
+ def self.fields
34
+ {
35
+ cn: "common_name",
36
+ dn: "dn",
37
+ info: "info",
38
+ description: "description",
39
+ mail: "email",
40
+ member: "member",
41
+ sAMAccountName: "username",
42
+ objectClass: "object_class",
43
+ groupType: "group_type",
44
+ objectGUID: "object_guid"
45
+ }
46
+ end
47
+
48
+ def build_create_data
49
+ data = {}
50
+ self.class.fields.each do |k, v|
51
+ if instance_variable_get("@#{v}")
52
+ data[k.to_sym] = instance_variable_get("@#{v}")
53
+ end
54
+ end
55
+ data.delete(:dn)
56
+ data
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,81 @@
1
+ module ActiveDirectory
2
+ class User < DirectoryObject
3
+
4
+ def change_password(old_password, new_password)
5
+ result = Client.modify_unicode_pwd(
6
+ @dn,
7
+ Utils::microsoft_encode_password(old_password),
8
+ Utils::microsoft_encode_password(new_password),
9
+ )
10
+ end
11
+
12
+ def password(new_password)
13
+ result = Client.update_attribute(
14
+ @dn,
15
+ 'unicodePwd',
16
+ Utils::microsoft_encode_password(new_password)
17
+ )
18
+ end
19
+
20
+ def remove_from_group(group_dn)
21
+ Client.modify(group_dn.to_s, [[:delete, :member, @dn]])
22
+ end
23
+
24
+ def add_to_group(group_dn)
25
+ Client.add_attribute(group_dn, :member, @dn)
26
+ end
27
+
28
+ def self.add(dn, attrs = {})
29
+ #todo
30
+ end
31
+
32
+ def groups
33
+ groups = []
34
+ filter = "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=#{@dn}))"
35
+ results = Client.search(filter, Group.fields.keys)
36
+ if results
37
+ results.each do |r|
38
+ groups << Group.new(r)
39
+ end
40
+ groups
41
+ else
42
+ false
43
+ end
44
+ end
45
+
46
+ def self.find_by_username(username, treebase=nil)
47
+ filter = "(&(objectCategory=person)(objectClass=user)(samaccountname=#{username}))"
48
+ results = Client.search(filter, self.fields.keys, treebase).first
49
+ if results
50
+ self.new(results)
51
+ else
52
+ false
53
+ end
54
+ end
55
+
56
+ def self.find_by_email(email, treebase=nil)
57
+ filter = "(&(objectCategory=person)(objectClass=user)(mail=#{email}))"
58
+ results = Client.search(filter, self.fields.keys, treebase).first
59
+ if results
60
+ self.new(results)
61
+ else
62
+ false
63
+ end
64
+ end
65
+
66
+ def self.fields
67
+ {
68
+ mail: "email",
69
+ title: "title",
70
+ sn: "last_name",
71
+ givenName: "first_name",
72
+ department: "department",
73
+ employeeType: "employee_type",
74
+ sAMAccountName: "username",
75
+ l: "location",
76
+ dn: "dn"
77
+ }
78
+ end
79
+
80
+ end
81
+ end
@@ -0,0 +1,28 @@
1
+ module ActiveDirectory
2
+ class Utils
3
+ def self.microsoft_encode_password(pwd)
4
+ ret = ""
5
+ pwd = "\"" + pwd + "\""
6
+ pwd.length.times{|i| ret+= "#{pwd[i..i]}\000" }
7
+ ret
8
+ end
9
+
10
+ def self.ldap_18_date(datetime)
11
+ if datetime && datetime.to_i != 9223372036854775807 && datetime.to_i != 0
12
+ base = Date.new(1601, 1, 1)
13
+ base += datetime.to_i / (60 * 10000000 * 1440)
14
+ if base != 0
15
+ base
16
+ else
17
+ false
18
+ end
19
+ else
20
+ false
21
+ end
22
+ end
23
+
24
+ def self.ldap_datetime(datetime)
25
+ datetime.utc.strftime("%Y%m%d%H%M%S.0Z")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,74 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "synapse_ldap_user"
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Adam Saegebarth"]
12
+ s.date = "2014-03-19"
13
+ s.description = "The Synapse Ldap User library"
14
+ s.email = "adams@synapse.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rbenv-gemsets",
22
+ ".ruby-version",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE.txt",
26
+ "README.rdoc",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "lib/active_directory.rb",
30
+ "lib/active_directory/client.rb",
31
+ "lib/active_directory/configuration.rb",
32
+ "lib/active_directory/directory_object.rb",
33
+ "lib/active_directory/errors.rb",
34
+ "lib/active_directory/group.rb",
35
+ "lib/active_directory/user.rb",
36
+ "lib/active_directory/utils.rb",
37
+ "synapse_ldap_user.gemspec",
38
+ "test/helper.rb",
39
+ "test/test_synapse_ldap_user.rb"
40
+ ]
41
+ s.homepage = "http://github.com/saegey/synapse_ldap_user"
42
+ s.licenses = ["MIT"]
43
+ s.require_paths = ["lib"]
44
+ s.rubygems_version = "2.0.14"
45
+ s.summary = "The Synapse Ldap User library"
46
+
47
+ if s.respond_to? :specification_version then
48
+ s.specification_version = 4
49
+
50
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
+ s.add_runtime_dependency(%q<net-ldap>, [">= 0"])
52
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
53
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
54
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
55
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
56
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
57
+ else
58
+ s.add_dependency(%q<net-ldap>, [">= 0"])
59
+ s.add_dependency(%q<shoulda>, [">= 0"])
60
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
61
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
62
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
63
+ s.add_dependency(%q<simplecov>, [">= 0"])
64
+ end
65
+ else
66
+ s.add_dependency(%q<net-ldap>, [">= 0"])
67
+ s.add_dependency(%q<shoulda>, [">= 0"])
68
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
69
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
70
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
71
+ s.add_dependency(%q<simplecov>, [">= 0"])
72
+ end
73
+ end
74
+
@@ -0,0 +1,34 @@
1
+ require 'simplecov'
2
+
3
+ module SimpleCov::Configuration
4
+ def clean_filters
5
+ @filters = []
6
+ end
7
+ end
8
+
9
+ SimpleCov.configure do
10
+ clean_filters
11
+ load_adapter 'test_frameworks'
12
+ end
13
+
14
+ ENV["COVERAGE"] && SimpleCov.start do
15
+ add_filter "/.rvm/"
16
+ end
17
+ require 'rubygems'
18
+ require 'bundler'
19
+ begin
20
+ Bundler.setup(:default, :development)
21
+ rescue Bundler::BundlerError => e
22
+ $stderr.puts e.message
23
+ $stderr.puts "Run `bundle install` to install missing gems"
24
+ exit e.status_code
25
+ end
26
+ require 'test/unit'
27
+ require 'shoulda'
28
+
29
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
30
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
31
+ require 'synapse_ldap_user'
32
+
33
+ class Test::Unit::TestCase
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestSynapseLdapUser < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,149 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: synapse_ldap_user
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Saegebarth
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: net-ldap
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: shoulda
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '3.12'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.12'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: jeweler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 2.0.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 2.0.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: The Synapse Ldap User library
98
+ email: adams@synapse.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files:
102
+ - LICENSE.txt
103
+ - README.rdoc
104
+ files:
105
+ - .document
106
+ - .rbenv-gemsets
107
+ - .ruby-version
108
+ - Gemfile
109
+ - Gemfile.lock
110
+ - LICENSE.txt
111
+ - README.rdoc
112
+ - Rakefile
113
+ - VERSION
114
+ - lib/active_directory.rb
115
+ - lib/active_directory/client.rb
116
+ - lib/active_directory/configuration.rb
117
+ - lib/active_directory/directory_object.rb
118
+ - lib/active_directory/errors.rb
119
+ - lib/active_directory/group.rb
120
+ - lib/active_directory/user.rb
121
+ - lib/active_directory/utils.rb
122
+ - synapse_ldap_user.gemspec
123
+ - test/helper.rb
124
+ - test/test_synapse_ldap_user.rb
125
+ homepage: http://github.com/saegey/synapse_ldap_user
126
+ licenses:
127
+ - MIT
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - '>='
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 2.0.14
146
+ signing_key:
147
+ specification_version: 4
148
+ summary: The Synapse Ldap User library
149
+ test_files: []