dandelion_s1 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e9ff3cb5efdc68ee7385d5c1b8d975202d96526
4
- data.tar.gz: 52f232490fdfdf27eeb3ddb9a875545a9710971e
3
+ metadata.gz: defb22aa3bc5c08f20627b62117b79956d26fae9
4
+ data.tar.gz: f05f2b8d594b2d71d824d69c47e96ed5ef657a96
5
5
  SHA512:
6
- metadata.gz: f54b7004459dfd27f7c62ca188bfea688a1035c9707cc3f5c6b45a7bfcd71e1c8acfd5c31f6f1aeadbd2f0b01a32ade832fcb9db2a434b9479ae89ccad9d368d
7
- data.tar.gz: 7dd3280337401fe36b4d6834508b622b801cbfaef7749e582f3790f128d6f216f332a44adc26cf99e6252d2db331c20173a0ba851764916083cc35d631ebad7b
6
+ metadata.gz: c0c8aa85c39e7bdfbcd5a5bbe40dc299de87b50d21021dac0fccaefc4042e72f1fb2940357303f57eea9a054ae655ea780d1cbdbda575322c0aee71f79ad7896
7
+ data.tar.gz: 6ea4b45538e936120c85c2db335898b88ade4b3acff7dbad93d242908a8c0a990b053307ab1d917d5e64f3bf4f7de920a24c847a3ac6d73bd1e90da86c19e0d5
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/dandelion_s1.rb CHANGED
@@ -2,94 +2,129 @@
2
2
 
3
3
  # file: dandelion_s1.rb
4
4
 
5
+ require 'martile'
5
6
  require 'rack-rscript'
6
7
  require 'simple-config'
7
8
 
8
9
 
9
10
  class DandelionS1 < RackRscript
10
11
 
11
- def initialize(h={})
12
+ def initialize(opts={})
12
13
 
13
- raw_opts = {root: 'www', access: {}, static: [], log: nil}.merge h
14
+ h = {root: 'www', static: []}.merge(opts)
15
+
16
+ access_list = h[:access]
14
17
  @app_root = Dir.pwd
15
18
 
16
- @static = raw_opts[:static]
17
- @root = raw_opts[:root]
18
-
19
19
  #@access_list = {'/do/r/hello3' => 'user'}
20
- access_list = raw_opts[:access]
21
20
 
22
- h2 = SimpleConfig.new(access_list).to_h
23
- conf_access = h2[:body] || h2
24
- @access_list = conf_access.inject({}) \
25
- {|r,x| k,v = x; r.merge(k.to_s => v.split)}
21
+ if access_list then
22
+
23
+ h2 = SimpleConfig.new(access_list).to_h
24
+ conf_access = h2[:body] || h2
25
+ @access_list = conf_access.inject({}) \
26
+ {|r,x| k,v = x; r.merge(k.to_s => v.split)}
27
+
28
+ end
29
+
30
+ h3 = %i(log pkg_src rsc_host rsc_package_src root static debug)\
31
+ .inject({}) {|r,x| r.merge(x => h[x])}
32
+
33
+ super(h3)
26
34
 
27
- super(log: h[:log], pkg_src: h[:pkg_src], rsc_host: h[:rsc_host],
28
- rsc_package_src: h[:rsc_package_src])
29
35
  end
30
36
 
31
37
  def call(e)
32
38
 
33
39
  request = e['REQUEST_PATH']
34
- r = @access_list.detect {|k,v| request =~ Regexp.new(k)}
40
+
41
+ return super(e) if request == '/login'
42
+ r = @access_list.detect {|k,v| request =~ Regexp.new(k)} if @access_list
35
43
  private_user = r ? r.last : nil
36
44
 
37
- if private_user.nil? then
38
- super(e)
39
- elsif private_user.is_a? String and private_user == e['REMOTE_USER']
45
+ req = Rack::Request.new(e)
46
+ user = req.session[:username]
47
+ #return [status_code=401, {"Content-Type" => 'text/plain'}, [user.inspect]]
48
+ return jumpto '/login' unless user
49
+
50
+ if private_user.nil? then
40
51
  super(e)
41
- elsif private_user.is_a? Array and
42
- private_user.any? {|x| x == e['REMOTE_USER']}
52
+ elsif (private_user.is_a? String and private_user == user) \
53
+ or (private_user.is_a? Array and private_user.any? {|x| x == user})
43
54
  super(e)
44
55
  else
45
- request = '/unauthorised/'
46
- content, content_type, status_code = run_route(request)
47
- content_type ||= 'text/html'
48
- [status_code=401, {"Content-Type" => content_type}, [content]]
56
+ jumpto '/unauthorised'
49
57
  end
50
58
 
51
59
  end
60
+
61
+ protected
62
+
63
+ def default_routes(env, params)
64
+
65
+ get '/login' do
66
+
67
+ s=<<EOF
68
+ login
69
+ username: [ ]
70
+ password: [ ]
71
+
72
+ [login]('/login')
73
+ EOF
74
+
75
+ Martile.new(s).to_html
76
+ end
77
+
78
+ post '/login' do
79
+
80
+ h = @req.params
81
+ @req.session[:username] = h['username']
52
82
 
53
- def default_routes(env, params)
54
-
55
- super(env, params)
56
-
57
- get /^(\/(?:#{@static.join('|')}).*)/ do |path|
58
-
59
- filepath = File.join(@app_root, @root, path)
60
-
61
- if @log then
62
- @log.info 'DandelionS1/default_routes: ' +
63
- "root: %s path: %s" % [@root, path]
64
- end
65
-
66
- if path.length < 1 or path[-1] == '/' then
67
- path += 'index.html'
68
- File.read filepath
69
- elsif File.directory? filepath then
70
- Redirect.new (path + '/')
71
- elsif File.exists? filepath then
72
- h = {xml: 'application/xml', html: 'text/html', png: 'image/png',
73
- jpg: 'image/jpeg', txt: 'text/plain', css: 'text/css',
74
- xsl: 'application/xml', svg: 'image/svg+xml'}
75
- content_type = h[filepath[/\w+$/].to_sym]
76
- [File.read(filepath), content_type || 'text/plain']
77
- else
78
- 'oops, file ' + filepath + ' not found'
79
- end
80
-
83
+ 'you are now logged in as ' + h['username']
84
+
81
85
  end
82
-
83
- get /^\/$/ do
84
-
85
- file = File.join(@root, 'index.html')
86
- File.read file
86
+
87
+ get '/logout' do
88
+
89
+ @req.session.clear
90
+ 'you are now logged out'
91
+
92
+ end
93
+
94
+ get '/session' do
95
+
96
+ #@req.session.expires
97
+ #@req.session.options[:expire_after] = 1
98
+ @req.session.options.inspect
99
+
100
+ end
101
+
102
+ get '/user' do
103
+
104
+ if @req.session[:username] then
105
+ 'You are ' + @req.session[:username]
106
+ else
107
+ 'you need to log in to view this page'
108
+ end
109
+
87
110
  end
88
111
 
89
- get '/unauthorised/' do
112
+ get '/unauthorised' do
90
113
  'unauthorised user'
91
114
  end
115
+
116
+ super(env, params)
92
117
 
93
- end
118
+ end
119
+
120
+ private
121
+
122
+ def jumpto(request)
123
+
124
+ content, content_type, status_code = run_route(request)
125
+ content_type ||= 'text/html'
126
+ [status_code=401, {"Content-Type" => content_type}, [content]]
127
+
128
+ end
94
129
 
95
130
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dandelion_s1
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,28 +10,27 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
- YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
- 8ixkARkWAmV1MB4XDTE3MDQyNzIyMTQ1NVoXDTE4MDQyNzIyMTQ1NVowSDESMBAG
16
- A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
- EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
- ggEBAMGzM9MfeWs/zGWaupPrKUpsL4tUz7UkqTJVVcWGDTFIg7SsbLHz+POGHkOh
19
- z6ay9LNH0ua0yvajLi9q41DMIzSdL8gclpnbeYHdx/elFVB8NSRJFBTVhXaUVyyh
20
- +1eATgtt6jJoUW0sHrew7L1qBRS8NqcWy/Yg/nbovuTTf3yniCm2l8A5JFChuvy7
21
- CQeefZuh2gNuGGhRf61XQIKlo5AOLQ9cR/yFjrh4A4psrV9P70dgIbE+zsshGbwy
22
- YlJOSCvFkoxKvQ9JREZNXi8SPZ32u6Lr+zB4x/4f3St32buJ6T+RxfHnwo3XPijp
23
- 1MpA6OohLaZdOzEm0owUp9fiMj8CAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
- DwQEAwIEsDAdBgNVHQ4EFgQULcvDrOBooFEE5msfBetruFE5RYIwJgYDVR0RBB8w
25
- HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAD6Vf1puc
27
- sn1e05khsZW3OVSiIEznQg5o33Xi2KhIK58XrMFhnaJS1FOZEsjksW4xebJO+j2c
28
- pjeQas8LorRauB2wVDEaH/aHR38VY38GIuVTP1pA4CKeryyAIhN4qy+bRs3rFSl4
29
- CgdxFOj2YDkZdxY8DVLXgN+i2Bbkk1SkcLDCtAS1EN5CVVIdM/vT2OX+k/itvHzB
30
- KL2u5yhtxl3lhBYKtN0iV/B9zRRjHgkZdKt4oNnv0DMG4d7FCZNoF2QuUCt3BwbT
31
- pyJm5LdEycjtTNHCuWHnBmZ5AVetwku2PZdaJAb5ygezNQbu5ynq/HBIMWdTabUY
32
- Zfqb8EuDqrBL9w==
13
+ MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwNzIzMTAxNzM3WhcN
15
+ MTkwNzIzMTAxNzM3WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMwm/h
17
+ 0TYNxdxPLtVz83GYuCvgJLLBEhsSR1N3/k5grBT5A7npXECtoLAupTK7xMbG6EuJ
18
+ g0wmw6NI+T7dKYmpRJtqHwDM7h2iMIyJq5/NjYfuz/V2Xqc2GkAtLsMT2iBnHTkV
19
+ frKevCxAKfEwYLgvll2wnXcYfFBRngjPW8hhvQ91A3lHxib9SqtSPiNZmX79C3/M
20
+ p+zngMCEEWyaD9JZCaVY/lsj/hzGorx0qL0neUJn0oIvQzPClTyZ1nn2kYEid2qF
21
+ d7DSS0OQKb2kh8xEP9P5+IAL6mtGrpkFmN+LweELNPzH7UjQXcNQz70YTC5PygAI
22
+ EFguH9qMJd7p/2dLAgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
+ HQYDVR0OBBYEFG56mGI2GWi6FXxJ0CytmQqp8sWwMCYGA1UdEQQfMB2BG2dlbW1h
24
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTAmBgNVHRIEHzAdgRtnZW1tYXN0ZXJAamFt
25
+ ZXNyb2JlcnRzb24uZXUwDQYJKoZIhvcNAQEFBQADggEBAIr04+kPDkeFOt37EuGX
26
+ E0d+iUC8LPKUEANDVOFt/zPU8IAtu/a46Yt9TQ950rjmfzofw/jxt0d5f2uCGotP
27
+ LbGymxJUCmP04wFjVZFlEeM8KUt8T2lsS2c+3EnECKV3YX/bNmaQvrDYtS1+spE1
28
+ 2hTRNOG6EjJFGgjd15MCsQk+CMhhc6/EqQHV2QmqbQPcHcZM55dvyNANG/JWheBn
29
+ 2QZIQKcP2zU4/Vha3btUrOKjLdL48mFpU5W1JmHVcGalvG12WPInaxSNhcldbbNK
30
+ 1N8hBgTHd/hcz/i08u1weglfL0QBkOx9HzswCq9Iuesya/Zb40PJIbW4/A2pKm0o
31
+ eek=
33
32
  -----END CERTIFICATE-----
34
- date: 2017-11-13 00:00:00.000000000 Z
33
+ date: 2018-07-23 00:00:00.000000000 Z
35
34
  dependencies:
36
35
  - !ruby/object:Gem::Dependency
37
36
  name: rack-rscript
@@ -39,20 +38,20 @@ dependencies:
39
38
  requirements:
40
39
  - - "~>"
41
40
  - !ruby/object:Gem::Version
42
- version: '1.0'
41
+ version: '1.1'
43
42
  - - ">="
44
43
  - !ruby/object:Gem::Version
45
- version: 1.0.2
44
+ version: 1.1.2
46
45
  type: :runtime
47
46
  prerelease: false
48
47
  version_requirements: !ruby/object:Gem::Requirement
49
48
  requirements:
50
49
  - - "~>"
51
50
  - !ruby/object:Gem::Version
52
- version: '1.0'
51
+ version: '1.1'
53
52
  - - ">="
54
53
  - !ruby/object:Gem::Version
55
- version: 1.0.2
54
+ version: 1.1.2
56
55
  - !ruby/object:Gem::Dependency
57
56
  name: simple-config
58
57
  requirement: !ruby/object:Gem::Requirement
@@ -62,7 +61,7 @@ dependencies:
62
61
  version: '0.6'
63
62
  - - ">="
64
63
  - !ruby/object:Gem::Version
65
- version: 0.6.3
64
+ version: 0.6.4
66
65
  type: :runtime
67
66
  prerelease: false
68
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -72,7 +71,27 @@ dependencies:
72
71
  version: '0.6'
73
72
  - - ">="
74
73
  - !ruby/object:Gem::Version
75
- version: 0.6.3
74
+ version: 0.6.4
75
+ - !ruby/object:Gem::Dependency
76
+ name: martile
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.9'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 0.9.1
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '0.9'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 0.9.1
76
95
  description:
77
96
  email: james@jamesrobertson.eu
78
97
  executables: []
@@ -103,6 +122,6 @@ rubyforge_project:
103
122
  rubygems_version: 2.6.13
104
123
  signing_key:
105
124
  specification_version: 4
106
- summary: A kind of Rack-Rscript web server which facilitates static files, basic authentication,
107
- and private pages.
125
+ summary: A kind of Rack-Rscript web server which facilitates static files, cookie
126
+ based authentication, and private pages.
108
127
  test_files: []
metadata.gz.sig CHANGED
Binary file