rack-basic_path 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/basic_path.rb +58 -0
  3. metadata +73 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e1357af74644d9988ff924885a862e2849de9f8122310d830009a111b85e6add
4
+ data.tar.gz: 979ac6b45e4060db65eb8259203a6d5fffd8372a04a7fe2085accc7634ccaf8c
5
+ SHA512:
6
+ metadata.gz: 073534b6ab227ec537df5c8f0ee03211be4a59a3f4d2da87b48b07dbfda58bb79f3cb52d2720fc03e91f85fa7b7fda459febc74e952a83e971c464e926b6725c
7
+ data.tar.gz: 1d86c1d40dbaa305f7dd59220b6dee8070c5dcee2c0a1e3ca6470be6f5e737128980ef3dfec081cf1922964669d9d1a4cbffd42a56a3178bf99cd0d82d6f3300
data/lib/basic_path.rb ADDED
@@ -0,0 +1,58 @@
1
+ require 'rack/auth/abstract/handler'
2
+ require 'rack/auth/abstract/request'
3
+
4
+ module Rack
5
+ module Auth
6
+ class BasicPath < AbstractHandler
7
+ def initialize(app, username, password, *paths)
8
+ @app = app
9
+ @username = username
10
+ @password = password
11
+ @path_regex = Regexp.union(paths)
12
+ end
13
+
14
+ def call(env)
15
+ return @app.call(env) unless env['PATH_INFO'].match(@path_regex)
16
+
17
+ auth = BasicPath::Request.new(env)
18
+
19
+ return unauthorized unless auth.provided?
20
+
21
+ return bad_request unless auth.basic?
22
+
23
+ if valid?(auth)
24
+ env['REMOTE_USER'] = auth.username
25
+
26
+ return @app.call(env)
27
+ end
28
+
29
+ unauthorized
30
+ end
31
+
32
+ private
33
+
34
+ def challenge
35
+ 'Basic realm="%s"' % realm
36
+ end
37
+
38
+ def valid?(auth)
39
+ [@username, @password] == auth.credentials
40
+ end
41
+
42
+ class Request < Auth::AbstractRequest
43
+ def basic?
44
+ "basic" == scheme
45
+ end
46
+
47
+ def credentials
48
+ @credentials ||= params.unpack("m*").first.split(/:/, 2)
49
+ end
50
+
51
+ def username
52
+ credentials.first
53
+ end
54
+ end
55
+
56
+ end
57
+ end
58
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-basic_path
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jesse Curry
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ description:
42
+ email:
43
+ - jesse@jessecurry.net
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/basic_path.rb
49
+ homepage: https://github.com/HandRolled/rack-basic_path
50
+ licenses:
51
+ - MIT
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.7.3
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Regex constrained Basic Auth
73
+ test_files: []