redirect_engine 0.0.1 → 0.0.2

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.
Binary file
@@ -0,0 +1,20 @@
1
+ #!/root/ruby
2
+ # encoding: UTF-8
3
+
4
+ # setcap 'cap_net_bind_service=+ep' /home/trautw/.rvm/rubies/ruby-1.9.3-p327/bin/ruby
5
+
6
+ # resolve bin path, ignoring symlinks
7
+ require "pathname"
8
+ bin_file = Pathname.new(__FILE__).realpath
9
+
10
+ # add self to libpath
11
+ $:.unshift File.expand_path("../../lib", bin_file)
12
+
13
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
14
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
15
+
16
+ require 'rubygems'
17
+ require 'bundler/setup'
18
+
19
+ require 'sinatra'
20
+ require 'redirect_engine'
@@ -0,0 +1,82 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ class RedirectEngine::Engine
5
+
6
+ $config = Hash.new
7
+
8
+ def start()
9
+ begin
10
+ print "Hello from Engine\n"
11
+ end
12
+ end
13
+
14
+ def redirect_for(sina, request, params)
15
+ original_host = request.env["HTTP_X_FORWARDED_HOST"]
16
+ write_log "=================== Redirecting for #{original_host} #{params[:query]}"
17
+ write_log "Querystring = #{request.query_string}\n"
18
+
19
+ redirect_config = get_redirect_config(original_host)
20
+
21
+ write_log "Redirect Config = #{redirect_config}"
22
+ return_code = redirect_config["default"]["return_code"]
23
+ redirect_url = redirect_config["default"]["target"]
24
+
25
+ write_log "Redirecting #{params[:query]}\n"
26
+
27
+ request_uri = "/#{params[:query]}"
28
+ request_params = "#{request.query_string}"
29
+
30
+ redirect_config["redirect"].each do |redirect|
31
+ write_log "Checking regexp #{redirect['source']}"
32
+ write_log "Request URI = #{request_uri}"
33
+ if request_uri.match(redirect['source'])
34
+ write_log "Hit!!"
35
+ redirect_url = "http://#{original_host}#{redirect['target']}"
36
+ return_code = redirect["return_code"] if redirect["return_code"]
37
+ end
38
+ end
39
+
40
+ write_log "Redirect to #{redirect_url}"
41
+ sina.redirect redirect_url, return_code
42
+ # return "Danke"
43
+ end
44
+
45
+ # --- private functions ---
46
+ private
47
+
48
+ def get_redirect_config(host)
49
+ if ! $config[host]
50
+ write_log "LOADING #{host}.yaml"
51
+ $config[host] = load_yaml "#{host}.yaml"
52
+ end
53
+ $config[host]
54
+ end
55
+
56
+ def load_yaml(filename)
57
+ if File.file? filename
58
+ begin
59
+ YAML::load_file(filename)
60
+ rescue StringIndexOutOfBoundsException => e
61
+ puts "Error: YAML parsing in #{filename}"
62
+ write_log "Error: YAML parsing in #{filename}"
63
+ write_log e.message
64
+ raise "YAML not parsable"
65
+ false
66
+ rescue Exception => e
67
+ puts "Error: YAML parsing in #{filename}"
68
+ write_log "Error: YAML parsing in #{filename}"
69
+ write_log e.message
70
+ raise "YAML not parsable"
71
+ false
72
+ end
73
+ else
74
+ raise "File not found: #{filename}"
75
+ end
76
+ end
77
+
78
+ def write_log(message)
79
+ puts message
80
+ end
81
+
82
+ end
@@ -1,3 +1,3 @@
1
1
  module RedirectEngine
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,4 +1,63 @@
1
- require "redirect_engine/version"
1
+ require 'redirect_engine/version'
2
+ require 'redirect_engine/engine'
3
+
4
+ # set :public_felder, File.dirname(__FILE__) + '/public'
5
+
6
+ # See http://www.sinatrarb.com/intro
7
+ # set :environment, :development
8
+ set :environment, :development
9
+ set :port, 80
10
+ # set :bind, "2001:6f8:966:ac10::106"
11
+ # set :bind, "ubuntu.chtw.de"
12
+ set :bind, "2001:470:1f15:5a8:20c:29ff:fe21:87aa"
13
+
14
+ engine = RedirectEngine::Engine.new
15
+ engine.start()
16
+
17
+ # See http://www.sinatrarb.com/intro
18
+ # set :environment, :development
19
+ set :environment, :development
20
+ set :port, 80
21
+ # set :bind, "2001:6f8:966:ac10::106"
22
+ # set :bind, "ubuntu.chtw.de"
23
+ set :bind, "2001:470:1f15:5a8:20c:29ff:fe21:87aa"
24
+
25
+ # ---------------------------------------------------
26
+ before do
27
+ content_type :html, 'charset' => 'utf-8'
28
+ # See http://rack.rubyforge.org/doc/classes/Rack/Request.html
29
+
30
+ if request.env["HTTP_X_FORWARDED_HOST"]
31
+ request.path_info = "/redirector#{request.path_info}"
32
+ end
33
+ # write_log "Querystring = #{request.query_string}\n"
34
+ # write_log "Param source = #{request["source"]}\n"
35
+ # http://stackoverflow.com/questions/6317705/rackrequest-how-do-i-get-all-headers
36
+ # headers = env.select {|k,v| k.start_with? 'HTTP_'}
37
+ # write_log "Headers = #{headers}\n"
38
+ # write_log "Host = #{request.env["HTTP_HOST"]}\n"
39
+ # write_log "Host = #{headers["HTTP_HOST"]}\n"
40
+ # write_log "Original Host = #{request.env["HTTP_X_FORWARDED_HOST"]}\n"
41
+ end
42
+
43
+ after do
44
+ puts "Response status = #{response.status}"
45
+ end
46
+
47
+ helpers do
48
+ include Rack::Utils
49
+ alias_method :h, :escape_html
50
+ end
51
+
52
+ get '/redirector/:query' do
53
+ engine.redirect_for(self, request, params)
54
+ end
55
+
56
+ get '/*' do
57
+ # write_log "Error: Request doesn't match a valid route!"
58
+ print "Error: Request #{params[:splat]} doesn't match a valid route!\n"
59
+ return "@@ERROR@@" + "Error: Request doesn't match a valid route!\n"
60
+ end
2
61
 
3
62
  module RedirectEngine
4
63
  # Your code goes here...
@@ -16,4 +16,6 @@ Gem::Specification.new do |gem|
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency "sinatra"
19
21
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redirect_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,29 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2013-02-11 00:00:00.000000000 Z
13
- dependencies: []
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
14
30
  description: Generates http redirects
15
31
  email:
16
32
  - trautwein@scienitst.com
17
- executables: []
33
+ executables:
34
+ - .redirect_engine.swp
35
+ - redirect_engine
18
36
  extensions: []
19
37
  extra_rdoc_files: []
20
38
  files:
@@ -23,7 +41,10 @@ files:
23
41
  - LICENSE.txt
24
42
  - README.md
25
43
  - Rakefile
44
+ - bin/.redirect_engine.swp
45
+ - bin/redirect_engine
26
46
  - lib/redirect_engine.rb
47
+ - lib/redirect_engine/engine.rb
27
48
  - lib/redirect_engine/version.rb
28
49
  - redirect_engine.gemspec
29
50
  homepage: http://chtw.de/redirector