dandelion_s1 0.2.0 → 0.3.0

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.
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