Commit c083df0570d6fa83e6e302feff67ab65db15fe04
Committed by
vsizov
1 parent
b4cc04d7
Exists in
master
and in
4 other branches
LDAP BASE IMPLEMENRTATION
Showing
12 changed files
with
80 additions
and
2 deletions
Show diff stats
Gemfile
Gemfile.lock
... | ... | @@ -115,6 +115,7 @@ GEM |
115 | 115 | haml (~> 3.0) |
116 | 116 | railties (~> 3.0) |
117 | 117 | hashery (1.4.0) |
118 | + hashie (1.2.0) | |
118 | 119 | hike (1.2.1) |
119 | 120 | httparty (0.8.1) |
120 | 121 | multi_json |
... | ... | @@ -141,12 +142,22 @@ GEM |
141 | 142 | mime-types (1.17.2) |
142 | 143 | multi_json (1.0.3) |
143 | 144 | multi_xml (0.4.1) |
145 | + net-ldap (0.2.2) | |
144 | 146 | nokogiri (1.5.0) |
147 | + omniauth (1.0.2) | |
148 | + hashie (~> 1.2) | |
149 | + rack | |
150 | + omniauth-ldap (1.0.2) | |
151 | + net-ldap (~> 0.2.2) | |
152 | + omniauth (~> 1.0) | |
153 | + pyu-ruby-sasl (~> 0.0.3.1) | |
154 | + rubyntlm (~> 0.1.1) | |
145 | 155 | orm_adapter (0.0.5) |
146 | 156 | polyglot (0.3.3) |
147 | 157 | posix-spawn (0.3.6) |
148 | 158 | pygments.rb (0.2.4) |
149 | 159 | rubypython (~> 0.5.3) |
160 | + pyu-ruby-sasl (0.0.3.3) | |
150 | 161 | rack (1.3.5) |
151 | 162 | rack-cache (1.1) |
152 | 163 | rack (>= 0.4) |
... | ... | @@ -210,6 +221,7 @@ GEM |
210 | 221 | ruby-debug-base19 (>= 0.11.19) |
211 | 222 | ruby_core_source (0.1.5) |
212 | 223 | archive-tar-minitar (>= 0.5.2) |
224 | + rubyntlm (0.1.1) | |
213 | 225 | rubypython (0.5.3) |
214 | 226 | blankslate (>= 2.1.2.3) |
215 | 227 | ffi (~> 1.0.7) |
... | ... | @@ -306,6 +318,7 @@ DEPENDENCIES |
306 | 318 | kaminari |
307 | 319 | launchy |
308 | 320 | letter_opener |
321 | + omniauth-ldap | |
309 | 322 | pygments.rb (= 0.2.4) |
310 | 323 | rails (= 3.1.1) |
311 | 324 | rails-footnotes (~> 3.7.5) | ... | ... |
app/assets/javascripts/users/omniauth_callbacks.js.coffee
0 → 100644
app/assets/stylesheets/users/omniauth_callbacks.css.scss
0 → 100644
... | ... | @@ -0,0 +1,22 @@ |
1 | +class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController | |
2 | + | |
3 | + def ldap | |
4 | + # We only find ourselves here if the authentication to LDAP was successful. | |
5 | + ldap = request.env["omniauth.auth"]["extra"]["raw_info"] | |
6 | + username = ldap.sAMAccountName[0].to_s | |
7 | + email = ldap.proxyaddresses[0][5..-1].to_s | |
8 | + | |
9 | + if @user = User.find_by_email(email) | |
10 | + sign_in_and_redirect root_path | |
11 | + else | |
12 | + password = User.generate_random_password | |
13 | + @user = User.create(:name => username, | |
14 | + :email => email, | |
15 | + :password => password, | |
16 | + :password_confirmation => password | |
17 | + ) | |
18 | + sign_in_and_redirect @user | |
19 | + end | |
20 | + end | |
21 | + | |
22 | +end | ... | ... |
app/models/user.rb
... | ... | @@ -2,7 +2,7 @@ class User < ActiveRecord::Base |
2 | 2 | # Include default devise modules. Others available are: |
3 | 3 | # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable |
4 | 4 | devise :database_authenticatable, :token_authenticatable, |
5 | - :recoverable, :rememberable, :trackable, :validatable | |
5 | + :recoverable, :rememberable, :trackable, :validatable, :omniauthable | |
6 | 6 | |
7 | 7 | # Setup accessible (or protected) attributes for your model |
8 | 8 | attr_accessible :email, :password, :password_confirmation, :remember_me, |
... | ... | @@ -62,6 +62,10 @@ class User < ActiveRecord::Base |
62 | 62 | def last_activity_project |
63 | 63 | projects.first |
64 | 64 | end |
65 | + | |
66 | + def self.generate_random_password | |
67 | + (0...8).map{ ('a'..'z').to_a[rand(26)] }.join | |
68 | + end | |
65 | 69 | end |
66 | 70 | # == Schema Information |
67 | 71 | # | ... | ... |
app/views/devise/sessions/new.html.erb
config/initializers/devise.rb
... | ... | @@ -199,6 +199,15 @@ Devise.setup do |config| |
199 | 199 | # up on your models and hooks. |
200 | 200 | # config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo' |
201 | 201 | |
202 | + #config.omniauth :ldap, | |
203 | + # :host => 'YOUR_LDAP_SERVER', | |
204 | + # :base => 'THE_BASE_WHERE_YOU_SEARCH_FOR_USERS', | |
205 | + # :uid => 'sAMAccountName', | |
206 | + # :port => 389, | |
207 | + # :method => :plain, | |
208 | + # :bind_dn => 'THE_FULL_DN_OF_THE_USER_YOU_WILL_BIND_WITH', | |
209 | + # :password => 'THE_PASSWORD_OF_THE_BIND_USER' | |
210 | + | |
202 | 211 | # ==> Warden configuration |
203 | 212 | # If you want to use other strategies, that are not supported by Devise, or |
204 | 213 | # change the failure app, you can configure them inside the config.warden block. | ... | ... |
config/routes.rb
... | ... | @@ -39,7 +39,7 @@ Gitlab::Application.routes.draw do |
39 | 39 | resources :projects, :constraints => { :id => /[^\/]+/ }, :only => [:new, :create, :index] |
40 | 40 | resources :keys |
41 | 41 | |
42 | - devise_for :users | |
42 | + devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } | |
43 | 43 | |
44 | 44 | resources :projects, :constraints => { :id => /[^\/]+/ }, :except => [:new, :create, :index], :path => "/" do |
45 | 45 | member do | ... | ... |
spec/controllers/users/omniauth_callbacks_controller_spec.rb
0 → 100644
... | ... | @@ -0,0 +1,15 @@ |
1 | +require 'spec_helper' | |
2 | + | |
3 | +# Specs in this file have access to a helper object that includes | |
4 | +# the Users::OmniauthCallbacksHelper. For example: | |
5 | +# | |
6 | +# describe Users::OmniauthCallbacksHelper do | |
7 | +# describe "string concat" do | |
8 | +# it "concats two strings with spaces" do | |
9 | +# helper.concat_strings("this","that").should == "this that" | |
10 | +# end | |
11 | +# end | |
12 | +# end | |
13 | +describe Users::OmniauthCallbacksHelper do | |
14 | + pending "add some examples to (or delete) #{__FILE__}" | |
15 | +end | ... | ... |