rack-ntlm-test-service 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ .DS_Store
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
5
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,28 @@
1
+ # rack-ntlm-test-service
2
+
3
+ Test that your HTTP client supports NTLM authentication.
4
+
5
+ ## Usage
6
+
7
+ Rack middleware: <pre>Rack::Ntlm</pre>
8
+
9
+ Arguments:
10
+
11
+ <pre>
12
+ {
13
+ :uri_pattern => /\/login/,
14
+ :auth => {
15
+ :username => 'user',
16
+ :password => 'secret'
17
+ }
18
+ }
19
+ </pre>
20
+
21
+
22
+ # Credit to dtsato and lukefx for the original rack-ntlm gem on which this is based.
23
+
24
+ <h1>Temporary word of caution</h1>
25
+
26
+ <p>until my changes have been merged and pushed, you need to use the 'rubyntlm' gem from my github.</p>
27
+
28
+ <a href="https://github.com/johncant/rubyntlm">https://github.com/johncant/rubyntlm</a>
@@ -0,0 +1,3 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
@@ -0,0 +1 @@
1
+ require 'rack-ntlm/ntlm'
@@ -0,0 +1,53 @@
1
+ require 'net/ntlm'
2
+
3
+ module Rack
4
+ class Ntlm
5
+
6
+ def initialize(app, config = {})
7
+ @app = app
8
+ @config = config
9
+ end
10
+
11
+ def auth(username)
12
+ # Ignore the password. We should probably do something about this
13
+ begin
14
+ if @config[:auth]
15
+ username == @config[:auth][:username]
16
+ else
17
+ true
18
+ end
19
+ rescue => e
20
+ false
21
+ end
22
+ end
23
+
24
+ def call(env)
25
+ if env['PATH_INFO'] =~ @config[:uri_pattern] && (env['HTTP_AUTHORIZATION'].nil? || env['HTTP_AUTHORIZATION'] == "")
26
+ return [401, {'WWW-Authenticate' => "NTLM"}, []]
27
+ end
28
+
29
+ if /^(NTLM|Negotiate) (.+)/ =~ env["HTTP_AUTHORIZATION"]
30
+
31
+ message = Net::NTLM::Message.decode64($2)
32
+
33
+ if message.type == 1
34
+ type2 = Net::NTLM::Message::Type2.new
35
+ return [401, {"WWW-Authenticate" => "NTLM " + type2.encode64}, []]
36
+ end
37
+
38
+ if message.type == 3 && env['PATH_INFO'] =~ @config[:uri_pattern]
39
+ user = Net::NTLM::decode_utf16le(message.user)
40
+ if auth(user)
41
+ env['REMOTE_USER'] = user
42
+ else
43
+ return [401, {}, ["You are not authorized to see this page"]]
44
+ end
45
+ end
46
+ end
47
+
48
+ @app.call(env)
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,5 @@
1
+ module Rack
2
+ class Ntlm
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rack-ntlm/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rack-ntlm-test-service"
7
+ s.version = Rack::Ntlm::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Luca Simone", "John Cant"]
10
+ s.email = ["info@lucasimone.info"]
11
+ s.homepage = "https://github.com/johncant/rack-ntlm-test-service"
12
+ s.summary = %q{Rack module for testing NTLM Authentication in an HTTP client}
13
+ s.description = %q{a Rack module for testing NTLM Authentication in an HTTP client}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_dependency "rubyntlm"
21
+
22
+ s.add_development_dependency "pry"
23
+
24
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class Rack-ntlmTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/test_case'
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-ntlm-test-service
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Luca Simone
9
+ - John Cant
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-03-01 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rubyntlm
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: pry
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ description: a Rack module for testing NTLM Authentication in an HTTP client
48
+ email:
49
+ - info@lucasimone.info
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - .gitignore
55
+ - Gemfile
56
+ - README.markdown
57
+ - Rakefile
58
+ - lib/rack-ntlm.rb
59
+ - lib/rack-ntlm/ntlm.rb
60
+ - lib/rack-ntlm/version.rb
61
+ - rack-ntlm.gemspec
62
+ - test/rack_ntlm_test.rb
63
+ - test/test_helper.rb
64
+ homepage: https://github.com/johncant/rack-ntlm-test-service
65
+ licenses: []
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 1.8.24
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Rack module for testing NTLM Authentication in an HTTP client
88
+ test_files: []
89
+ has_rdoc: