axon-http 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []