rack-basic_path 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.
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: []