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.
- data/bin/.redirect_engine.swp +0 -0
- data/bin/redirect_engine +20 -0
- data/lib/redirect_engine/engine.rb +82 -0
- data/lib/redirect_engine/version.rb +1 -1
- data/lib/redirect_engine.rb +60 -1
- data/redirect_engine.gemspec +2 -0
- metadata +24 -3
Binary file
|
data/bin/redirect_engine
ADDED
@@ -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
|
data/lib/redirect_engine.rb
CHANGED
@@ -1,4 +1,63 @@
|
|
1
|
-
require
|
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...
|
data/redirect_engine.gemspec
CHANGED
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.
|
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
|