oa-pubcookie 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ require 'omniauth/pubcookie'
@@ -0,0 +1,13 @@
1
+ require 'omniauth/core'
2
+
3
+ module OmniAuth
4
+ module Pubcookie
5
+ autoload :VERSION, 'omniauth/pubcookie/version'
6
+ autoload :CMULdap, 'omniauth/pubcookie/cmu_ldap'
7
+ end
8
+
9
+ module Strategies
10
+ autoload :CMU, 'omniauth/strategies/cmu'
11
+ autoload :Pubcookie, 'omniauth/strategies/pubcookie'
12
+ end
13
+ end
@@ -0,0 +1,32 @@
1
+ require 'net/ldap'
2
+
3
+ module OmniAuth
4
+ module Pubcookie
5
+ module CMULdap
6
+ # Thanks to Marshall Roch for the original jump start for this code.
7
+
8
+ def lookup_andrew_id username
9
+ ldap = Net::LDAP.new :host => 'ldap.andrew.cmu.edu', :port => 389
10
+
11
+ filter = Net::LDAP::Filter.eq('cmuAndrewID', username)
12
+ attrs = ['givenName', 'sn', 'nickname', 'eduPersonSchoolCollegeName',
13
+ 'cmuStudentClass', 'mail', 'cmuPreferredMail',
14
+ 'cmuPersonPrincipalName']
15
+
16
+ ldap.search(:base => 'ou=Person,dc=cmu,dc=edu',
17
+ :filter => filter, :return_result => true) do |entry|
18
+ results = {}
19
+
20
+ entry.each do |attribute, values|
21
+ results[attribute] = values.first
22
+ end
23
+
24
+ return results
25
+ end
26
+
27
+ nil
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ module OmniAuth
2
+ module Pubcookie
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1,38 @@
1
+ require 'omniauth/strategies/pubcookie'
2
+
3
+ module OmniAuth
4
+ module Strategies
5
+ class CMU < Pubcookie
6
+
7
+ include OmniAuth::Pubcookie::CMULdap
8
+
9
+ def pubcookie_options= options
10
+ options[:login_server] ||= 'webiso.andrew.cmu.edu'
11
+ super
12
+ end
13
+
14
+ def auth_hash username
15
+ andrew_id = username.match(/^(.*)@/)[1]
16
+
17
+ attrs = lookup_andrew_id(andrew_id)
18
+
19
+ OmniAuth::Utils.deep_merge(super, {
20
+ 'uid' => andrew_id,
21
+ 'provider' => 'cmu',
22
+ 'user_info' => {
23
+ 'name' => attrs[:cn],
24
+ 'email' => attrs[:mail],
25
+ 'nickname' => attrs[:nickname],
26
+ 'first_name' => attrs[:givenname],
27
+ 'last_name' => attrs[:sn],
28
+ 'class' => attrs[:cmustudentclass],
29
+ 'department' => attrs[:cmudepartment],
30
+ 'location' => attrs[:cmucampus]
31
+ },
32
+ 'extra' => {'user_hash' => attrs}
33
+ })
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,50 @@
1
+ require 'omniauth/strategy'
2
+ require 'rack/pubcookie'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ class Pubcookie
7
+
8
+ include OmniAuth::Strategy
9
+ include Rack::Pubcookie::Auth
10
+
11
+ def initialize app, options, &block
12
+ self.pubcookie_options = options
13
+ super app, :pubcookie, &block
14
+ end
15
+
16
+ def request_phase
17
+ Rack::Response.new(login_page_html).finish
18
+ end
19
+
20
+ def callback_phase
21
+ username = extract_username request
22
+ request.env['REMOTE_USER'] = username # Part of the pubcookie spec
23
+
24
+ if username
25
+ request.env['omniauth.auth'] = auth_hash(username)
26
+ request.env['REQUEST_METHOD'] = 'GET'
27
+
28
+ status, headers, body = call_app!
29
+
30
+ # Set the actual cookie for pubcookie, as per its spec
31
+ response = Rack::Response.new body, status, headers
32
+ set_pubcookie! request, response
33
+
34
+ response.finish
35
+ else
36
+ fail! :login_failed
37
+ end
38
+ end
39
+
40
+ def auth_hash username
41
+ OmniAuth::Utils.deep_merge(super(), {
42
+ 'uid' => username,
43
+ 'provider' => 'pubcookie',
44
+ 'user_info' => {'name' => username}
45
+ })
46
+ end
47
+
48
+ end
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oa-pubcookie
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Alex Crichton
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-19 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rack-pubcookie
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 0
31
+ - 3
32
+ version: 0.0.3
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: oa-core
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: net-ldap
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ type: :runtime
60
+ version_requirements: *id003
61
+ description: Omniauth strategy using pubcookie with special additions for CMU students where information is fetched via LDAP
62
+ email:
63
+ - alex@crichton.co
64
+ executables: []
65
+
66
+ extensions: []
67
+
68
+ extra_rdoc_files: []
69
+
70
+ files:
71
+ - lib/oa-pubcookie.rb
72
+ - lib/omniauth/pubcookie.rb
73
+ - lib/omniauth/pubcookie/cmu_ldap.rb
74
+ - lib/omniauth/pubcookie/version.rb
75
+ - lib/omniauth/strategies/cmu.rb
76
+ - lib/omniauth/strategies/pubcookie.rb
77
+ has_rdoc: true
78
+ homepage: https://github.com/alexcrichton/oa-pubcookie
79
+ licenses: []
80
+
81
+ post_install_message:
82
+ rdoc_options: []
83
+
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ requirements: []
103
+
104
+ rubyforge_project:
105
+ rubygems_version: 1.3.7
106
+ signing_key:
107
+ specification_version: 3
108
+ summary: Omniauth strategy using pubcookie
109
+ test_files: []
110
+