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.
- 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
|