opener-webservice 1.0.0 → 1.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.
- checksums.yaml +4 -4
- data/lib/opener/webservice/opt_parser.rb +103 -0
- data/lib/opener/webservice/version.rb +1 -1
- data/lib/opener/webservice.rb +54 -2
- metadata +45 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f0bbd6c49b5e68d01232c20dc174073ac66997b
|
4
|
+
data.tar.gz: 236c4398bfd4c39c509aca78844f6ffa293f8401
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86c9a155b512a6a682e8ecea0a646be4ed7f83fee8ca6805c98a2b71f134144474a4e8046267a433a323e5846fa7827934196245d1c397a9edb5651aeefd749b
|
7
|
+
data.tar.gz: 8d2725e610d1ecb603e64a3225a05d43db5de10e62cc3e2bf7cc4ee029579385b15ceb44e4d78c445d9fa586cd5cbbc9bcc24c09c4b750a2763380b6a7e20a9c
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require 'optparse'
|
3
|
+
|
4
|
+
module Opener
|
5
|
+
class Webservice < Sinatra::Base
|
6
|
+
class OptParser
|
7
|
+
attr_accessor :option_parser, :options
|
8
|
+
|
9
|
+
def initialize(&block)
|
10
|
+
@options = {}
|
11
|
+
@option_parser = construct_option_parser(options, &block)
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse(args)
|
15
|
+
process(:parse, args)
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse!(args)
|
19
|
+
process(:parse!, args)
|
20
|
+
end
|
21
|
+
|
22
|
+
def pre_parse!(args)
|
23
|
+
delete_double_dash = false
|
24
|
+
process(:parse!, args, delete_double_dash)
|
25
|
+
end
|
26
|
+
|
27
|
+
def pre_parse(args)
|
28
|
+
delete_double_dash = false
|
29
|
+
process(:parse, args, delete_double_dash)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.parse(args)
|
33
|
+
new.parse(args)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.parse!(args)
|
37
|
+
new.parse!(args)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.pre_parse!(args)
|
41
|
+
new.pre_parse!(args)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.pre_parse(args)
|
45
|
+
new.pre_parse(args)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def process(call, args, delete_double_dash=true)
|
51
|
+
args.delete("--") if delete_double_dash
|
52
|
+
option_parser.send(call, args)
|
53
|
+
return options
|
54
|
+
end
|
55
|
+
|
56
|
+
def construct_option_parser(options, &block)
|
57
|
+
script_name = File.basename($0, ".rb")
|
58
|
+
|
59
|
+
OptionParser.new do |opts|
|
60
|
+
if block_given?
|
61
|
+
opts.banner = "Usage: #{script_name} <start> [server_options] -- [authentication_options]"
|
62
|
+
else
|
63
|
+
opts.banner = "Usage: #{script_name} <start> [options]"
|
64
|
+
end
|
65
|
+
|
66
|
+
opts.separator ""
|
67
|
+
|
68
|
+
if block_given?
|
69
|
+
opts.separator "Component Specific options:"
|
70
|
+
opts.separator ""
|
71
|
+
yield opts, options
|
72
|
+
opts.separator ""
|
73
|
+
end
|
74
|
+
|
75
|
+
opts.separator "Authentication options:"
|
76
|
+
|
77
|
+
opts.on("--authentication", "--authentication AUTHENTICATION_ENDPOINT", "Endpoint for authenticating requests") do |v|
|
78
|
+
options[:authentication] = v
|
79
|
+
end
|
80
|
+
|
81
|
+
opts.on("--secret", "--secret SECRET_VARIABLE", "Accepted parameter variable for secret.") do |v|
|
82
|
+
options[:secret] = v
|
83
|
+
end
|
84
|
+
|
85
|
+
opts.on("--token", "--secret TOKEN_VARIABLE", "Accepted parameter variable for token.") do |v|
|
86
|
+
options[:token] = v
|
87
|
+
end
|
88
|
+
|
89
|
+
opts.separator ""
|
90
|
+
|
91
|
+
opts.separator "Common options:"
|
92
|
+
|
93
|
+
# No argument, shows at tail. This will print an options summary.
|
94
|
+
# Try it and see!
|
95
|
+
opts.on_tail("-h", "--help", "Show this message. Usage: #{script_name} -h") do
|
96
|
+
puts opts
|
97
|
+
exit
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/lib/opener/webservice.rb
CHANGED
@@ -2,17 +2,33 @@ require "uuidtools"
|
|
2
2
|
require "sinatra/base"
|
3
3
|
require "json"
|
4
4
|
require "opener/webservice/version"
|
5
|
+
require "opener/webservice/opt_parser"
|
5
6
|
|
6
7
|
module Opener
|
7
8
|
class Webservice < Sinatra::Base
|
8
9
|
configure do
|
9
10
|
enable :logging
|
11
|
+
if ARGV && pos = ARGV.index("--")
|
12
|
+
ws_options = ARGV[pos..-1]
|
13
|
+
else
|
14
|
+
ws_options = []
|
15
|
+
end
|
16
|
+
options = OptParser.parse!(ws_options)
|
17
|
+
|
18
|
+
options.each do |k,v|
|
19
|
+
Sinatra::Application.set k.to_sym, v
|
20
|
+
end
|
10
21
|
end
|
11
22
|
|
12
23
|
configure :development do
|
13
24
|
set :raise_errors, true
|
14
25
|
set :dump_errors, true
|
15
26
|
end
|
27
|
+
|
28
|
+
before %r{^((?!.css|.jpg|.png|.js|.ico).)+$} do
|
29
|
+
extract_params
|
30
|
+
authenticate! if Sinatra::Application.respond_to?(:authentication)
|
31
|
+
end
|
16
32
|
|
17
33
|
##
|
18
34
|
# Presents a simple form that can be used for getting the NER of a KAF
|
@@ -94,6 +110,7 @@ module Opener
|
|
94
110
|
else
|
95
111
|
@accepted_params = array
|
96
112
|
end
|
113
|
+
@accepted_params.concat([secret_symbol, token_symbol]) if Sinatra::Application.respond_to?(:authentication)
|
97
114
|
end
|
98
115
|
|
99
116
|
##
|
@@ -221,14 +238,16 @@ module Opener
|
|
221
238
|
# Airbrake during the hackathon. For whatever reason somebody is posting
|
222
239
|
# internal server errors from *somewhere*. Validation? What's that?
|
223
240
|
return if text =~ /^internal server error/i
|
224
|
-
|
241
|
+
|
225
242
|
output = {
|
226
243
|
:input => text,
|
227
244
|
:request_id => request_id,
|
228
245
|
:'callbacks[]' => callbacks,
|
229
246
|
:error_callback => error_callback
|
230
247
|
}
|
231
|
-
|
248
|
+
|
249
|
+
extract_params
|
250
|
+
|
232
251
|
http_client.post_async(
|
233
252
|
url,
|
234
253
|
:body => filtered_params.merge(output)
|
@@ -270,5 +289,38 @@ module Opener
|
|
270
289
|
def http_client
|
271
290
|
return self.class.http_client
|
272
291
|
end
|
292
|
+
|
293
|
+
def authenticate!
|
294
|
+
credentials = {
|
295
|
+
secret_symbol => params[secret_symbol.to_s],
|
296
|
+
token_symbol => params[token_symbol.to_s]
|
297
|
+
}
|
298
|
+
response = http_client.get(Sinatra::Application.authentication, credentials)
|
299
|
+
halt response.body unless response.ok?
|
300
|
+
end
|
301
|
+
|
302
|
+
def extract_params
|
303
|
+
if request.referrer
|
304
|
+
uri = URI.parse(request.referrer)
|
305
|
+
extracted = Rack::Utils.parse_nested_query(uri.query)
|
306
|
+
params.merge!(extracted)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
def self.secret_symbol
|
311
|
+
Sinatra::Application.respond_to?(:secret)? Sinatra::Application.secret.to_sym : :secret
|
312
|
+
end
|
313
|
+
|
314
|
+
def self.token_symbol
|
315
|
+
Sinatra::Application.respond_to?(:token)? Sinatra::Application.token.to_sym : :token
|
316
|
+
end
|
317
|
+
|
318
|
+
def secret_symbol
|
319
|
+
return self.class.secret_symbol
|
320
|
+
end
|
321
|
+
|
322
|
+
def token_symbol
|
323
|
+
return self.class.token_symbol
|
324
|
+
end
|
273
325
|
end
|
274
326
|
end
|
metadata
CHANGED
@@ -1,131 +1,131 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opener-webservice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- development@olery.com
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
|
-
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
|
-
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirement: !ruby/object:Gem::Requirement
|
23
21
|
requirements:
|
24
|
-
- -
|
22
|
+
- - ~>
|
25
23
|
- !ruby/object:Gem::Version
|
26
24
|
version: '1.3'
|
25
|
+
prerelease: false
|
26
|
+
type: :development
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
29
34
|
requirement: !ruby/object:Gem::Requirement
|
30
35
|
requirements:
|
31
|
-
- -
|
36
|
+
- - '>='
|
32
37
|
- !ruby/object:Gem::Version
|
33
38
|
version: '0'
|
34
|
-
type: :development
|
35
39
|
prerelease: false
|
40
|
+
type: :development
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
36
43
|
version_requirements: !ruby/object:Gem::Requirement
|
37
44
|
requirements:
|
38
|
-
- -
|
45
|
+
- - '>='
|
39
46
|
- !ruby/object:Gem::Version
|
40
47
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: pry
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
44
49
|
requirements:
|
45
|
-
- -
|
50
|
+
- - '>='
|
46
51
|
- !ruby/object:Gem::Version
|
47
52
|
version: '0'
|
48
|
-
type: :development
|
49
53
|
prerelease: false
|
54
|
+
type: :development
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sinatra
|
50
57
|
version_requirements: !ruby/object:Gem::Requirement
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: sinatra
|
61
|
+
version: 1.4.3
|
57
62
|
requirement: !ruby/object:Gem::Requirement
|
58
63
|
requirements:
|
59
|
-
- -
|
64
|
+
- - ~>
|
60
65
|
- !ruby/object:Gem::Version
|
61
66
|
version: 1.4.3
|
62
|
-
type: :runtime
|
63
67
|
prerelease: false
|
68
|
+
type: :runtime
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: uuidtools
|
64
71
|
version_requirements: !ruby/object:Gem::Requirement
|
65
72
|
requirements:
|
66
|
-
- -
|
73
|
+
- - '>='
|
67
74
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: uuidtools
|
75
|
+
version: '0'
|
71
76
|
requirement: !ruby/object:Gem::Requirement
|
72
77
|
requirements:
|
73
|
-
- -
|
78
|
+
- - '>='
|
74
79
|
- !ruby/object:Gem::Version
|
75
80
|
version: '0'
|
76
|
-
type: :runtime
|
77
81
|
prerelease: false
|
82
|
+
type: :runtime
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: json
|
78
85
|
version_requirements: !ruby/object:Gem::Requirement
|
79
86
|
requirements:
|
80
|
-
- -
|
87
|
+
- - '>='
|
81
88
|
- !ruby/object:Gem::Version
|
82
89
|
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: json
|
85
90
|
requirement: !ruby/object:Gem::Requirement
|
86
91
|
requirements:
|
87
|
-
- -
|
92
|
+
- - '>='
|
88
93
|
- !ruby/object:Gem::Version
|
89
94
|
version: '0'
|
90
|
-
type: :runtime
|
91
95
|
prerelease: false
|
92
|
-
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
96
|
+
type: :runtime
|
97
97
|
description: Basic webservice hooks for the opener toolchain
|
98
|
-
email:
|
98
|
+
email:
|
99
99
|
executables: []
|
100
100
|
extensions: []
|
101
101
|
extra_rdoc_files: []
|
102
102
|
files:
|
103
103
|
- README.md
|
104
104
|
- lib/opener/webservice.rb
|
105
|
+
- lib/opener/webservice/opt_parser.rb
|
105
106
|
- lib/opener/webservice/version.rb
|
106
107
|
- opener-webservice.gemspec
|
107
|
-
homepage:
|
108
|
+
homepage:
|
108
109
|
licenses: []
|
109
110
|
metadata: {}
|
110
|
-
post_install_message:
|
111
|
+
post_install_message:
|
111
112
|
rdoc_options: []
|
112
113
|
require_paths:
|
113
114
|
- lib
|
114
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
115
116
|
requirements:
|
116
|
-
- -
|
117
|
+
- - '>='
|
117
118
|
- !ruby/object:Gem::Version
|
118
119
|
version: '0'
|
119
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
121
|
requirements:
|
121
|
-
- -
|
122
|
+
- - '>='
|
122
123
|
- !ruby/object:Gem::Version
|
123
124
|
version: '0'
|
124
125
|
requirements: []
|
125
|
-
rubyforge_project:
|
126
|
+
rubyforge_project:
|
126
127
|
rubygems_version: 2.2.2
|
127
|
-
signing_key:
|
128
|
+
signing_key:
|
128
129
|
specification_version: 4
|
129
130
|
summary: Basic webservice hooks for the opener toolchain
|
130
131
|
test_files: []
|
131
|
-
has_rdoc:
|