redirect_engine 0.0.1 → 0.0.2

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