axon-http 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f5a53ca4dea9eec60072d21cb516d49d619dd781
4
+ data.tar.gz: 785309e83f85bba2d1424bc86236033edee526ae
5
+ SHA512:
6
+ metadata.gz: 305025fed42d7bd7ed67c64fc6554a1ea14ef058df6d9d7efc6fdeb238582429dfaa1bf81932d7dab50c75405c668872b21b770be4dbb84795e9b99099617140
7
+ data.tar.gz: 9869040126715c501aba088228dc17d46c47cbada41d66f8c0b91ea3937373a7d930ffb36cef722d6f1a9c4d267164614695ee0b96a3809ee234a548de471b0e
Binary file
@@ -0,0 +1,40 @@
1
+ # Created by https://www.gitignore.io/api/ruby
2
+
3
+ ### Ruby ###
4
+ *.gem
5
+ *.rbc
6
+ /.config
7
+ /coverage/
8
+ /InstalledFiles
9
+ /pkg/
10
+ /spec/reports/
11
+ /spec/examples.txt
12
+ /test/tmp/
13
+ /test/version_tmp/
14
+ /tmp/
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+
21
+ ## Documentation cache and generated files:
22
+ /.yardoc/
23
+ /_yardoc/
24
+ /doc/
25
+ /rdoc/
26
+
27
+ ## Environment normalisation:
28
+ /.bundle/
29
+ /vendor/bundle
30
+ /lib/bundler/man/
31
+
32
+ # for a library or gem, you might want to ignore these files since the code is
33
+ # intended to run in multiple environments; otherwise, check them in:
34
+ # Gemfile.lock
35
+ # .ruby-version
36
+ # .ruby-gemset
37
+
38
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
39
+ .rvmrc
40
+
@@ -0,0 +1,33 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'axon-http/version'
4
+
5
+ GEM_NAME = 'axon-http'
6
+
7
+ task :build do
8
+ system "gem build #{GEM_NAME}.gemspec"
9
+ end
10
+
11
+ task :install => [:build] do
12
+ system "gem install #{GEM_NAME}-#{AxonHttp::VERSION}.gem"
13
+ end
14
+
15
+ task :release => [:build] do
16
+ system "gem push #{GEM_NAME}-#{AxonHttp::VERSION}.gem"
17
+ end
18
+
19
+ task :bump do
20
+ version_file_path = "./lib/#{GEM_NAME}/version.rb"
21
+ version_file_text = File.read(version_file_path)
22
+ new_text = version_file_text.gsub(/VERSION = \"(\d+).(\d+).(\d+)\"/) {
23
+ old_version = "#{$1}.#{$2}.#{$3}"
24
+ new_version = "#{$1}.#{$2}.#{$3.to_i + 1}"
25
+ puts "#{old_version} -> #{new_version}"
26
+ "VERSION = \"#{new_version}\""
27
+ }
28
+ File.write(version_file_path, new_text)
29
+ end
30
+
31
+ task :clean do
32
+ system "rm *.gem"
33
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'axon-http/version'
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'axon-http'
7
+ spec.version = AxonHttp::VERSION
8
+ spec.authors = ["Josh Glendenning"]
9
+ spec.email = ["joshglendenning@gmail.com"]
10
+
11
+ spec.summary = %q{Axon/NATS HTTP bridge.}
12
+ spec.homepage = "https://github.com/joshglendenning/axon-http"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.require_paths = ['lib']
17
+
18
+ spec.bindir = 'bin'
19
+ spec.executables = ['axon-http']
20
+
21
+ spec.add_dependency 'thin', '~> 1.6'
22
+ spec.add_dependency 'sinatra', '~> 1.4'
23
+ spec.add_dependency 'async_sinatra', '~> 1.2'
24
+ spec.add_dependency 'axon-nats', '~> 0.2'
25
+ end
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'thin'
4
+ require 'sinatra'
5
+ require 'sinatra/async'
6
+ require 'axon-nats'
7
+ require 'json'
8
+
9
+ register Sinatra::Async
10
+
11
+ $axon_token = ENV['AXON_TOKEN']
12
+ if $axon_token.nil?
13
+ raise 'environment variable AXON_TOKEN not defined'
14
+ end
15
+
16
+ ENV['NATS_URI'] = ENV['AXON_URI'] if !ENV['AXON_URI'].nil?
17
+ if ENV['NATS_URI'].nil?
18
+ puts 'WARNING: environment variable NATS_URI undefined, will default to localhost'
19
+ end
20
+
21
+ ## Sinatra Conf ------------------------------------------------------------
22
+
23
+ enable :run
24
+ set :port, 8000
25
+ set :server, 'thin'
26
+ set :environment, :production
27
+
28
+ # CORS:
29
+ before do
30
+ headers 'Access-Control-Allow-Origin' => '*'
31
+ headers 'Access-Control-Allow-Methods' => [
32
+ 'OPTIONS', 'GET', 'POST', 'PUT', 'DELETE'
33
+ ]
34
+ headers 'Access-Control-Allow-Headers' => [
35
+ 'X-Requested-With', 'X-HTTP-Method-Override', 'Content-Type',
36
+ 'Cache-Control', 'Accept', 'Upgrade', 'Connection',
37
+ 'X-Token'
38
+ ]
39
+ end
40
+ options "*" do
41
+ 200
42
+ end
43
+
44
+ ## Methods ------------------------------------------------------------
45
+
46
+ def ensure_permission(subject, &block)
47
+ content_type :json
48
+ token = request.env['HTTP_X_TOKEN']
49
+ if !token.nil?
50
+ #Axon.request('auth.user.verify', {
51
+ #:token => token, :permissions => [subject]
52
+ #}) { |auth_resp|
53
+ #unless auth_resp.error?
54
+ if token == $axon_token
55
+ block.call
56
+ else
57
+ status 401
58
+ body AxonMsg.new({}, "Bad token").to_s
59
+ end
60
+ #}
61
+ else
62
+ status 400
63
+ body AxonMsg.new({}, "X-Token header must be present").to_s
64
+ end
65
+ end
66
+
67
+ apost '/request/:subject' do |subject|
68
+ ensure_permission subject do
69
+ Axon.request(subject, JSON.parse(request.body.read)) { |resp|
70
+ status 500 if resp.error?
71
+ body resp.to_s
72
+ }
73
+ end
74
+ end
75
+
76
+ apost '/publish/:subject' do |subject|
77
+ ensure_permission subject do
78
+ Axon.publish(subject, JSON.parse(request.body.read))
79
+ body AxonMsg.new({}).to_s
80
+ end
81
+ end
@@ -0,0 +1,3 @@
1
+ module AxonHttp
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1 @@
1
+ NATS_URI="nats://admin:LBuDwnwLRt4b@asgard.isobit.io:4222" AXON_TOKEN="LBuDwnwLRt4b" ruby axon-http.rb
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: axon-http
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Josh Glendenning
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thin
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sinatra
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: async_sinatra
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: axon-nats
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.2'
69
+ description:
70
+ email:
71
+ - joshglendenning@gmail.com
72
+ executables:
73
+ - axon-http
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".DS_Store"
78
+ - ".gitignore"
79
+ - Rakefile
80
+ - axon-http.gemspec
81
+ - bin/axon-http
82
+ - lib/axon-http/version.rb
83
+ - start.sh
84
+ homepage: https://github.com/joshglendenning/axon-http
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.4.5.1
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: Axon/NATS HTTP bridge.
108
+ test_files: []