redirect_engine 0.0.2 → 0.0.4
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/Rakefile +24 -0
- data/bin/deploy_caller +68 -0
- data/bin/red_eng +50 -0
- data/lib/redirect_engine.rb +5 -60
- data/lib/redirect_engine/engine.rb +55 -19
- data/lib/redirect_engine/support.rb +142 -0
- data/lib/redirect_engine/version.rb +1 -1
- metadata +7 -4
- data/bin/.redirect_engine.swp +0 -0
data/Rakefile
CHANGED
@@ -1 +1,25 @@
|
|
1
|
+
tool_name = 'redirect_engine'
|
2
|
+
|
1
3
|
require "bundler/gem_tasks"
|
4
|
+
require File.expand_path("../lib/#{tool_name}/version", __FILE__)
|
5
|
+
|
6
|
+
# task :default => :it
|
7
|
+
task :default => 'ctraut:qwe'
|
8
|
+
|
9
|
+
namespace :ctraut do
|
10
|
+
desc 'Some experiments by ctraut'
|
11
|
+
task :qwe do
|
12
|
+
puts 'Hello rake world.'
|
13
|
+
puts "Version = #{RedirectEngine::VERSION}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
task :ready_for_the_day => [:turn_off_alarm, :groom_myself, :make_coffee, :walk_dog] do
|
18
|
+
puts 'Ready for the day!'
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'make it all'
|
22
|
+
task :it do
|
23
|
+
system "gem build #{tool_name}.gemspec"
|
24
|
+
system "gem push #{tool_name}-#{RedirectEngine::VERSION}.gem"
|
25
|
+
end
|
data/bin/deploy_caller
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/bin/bash -l
|
2
|
+
# /export/home/ctraut/Projekte/tuifly/deployment_engine/bin/deploy_caller -c ctraut/entwicklungen/samba_test_recipe.rb -e ctraut
|
3
|
+
|
4
|
+
VERSION_RUBY=1.9.2
|
5
|
+
WORKSPACE=.
|
6
|
+
DE=`dirname $0`/de
|
7
|
+
rvm_path="$HOME/Projekte/tuifly/rvm"
|
8
|
+
RECIPE=./recipe/deploy.rb
|
9
|
+
CDB=../db
|
10
|
+
|
11
|
+
VERSION=0.0.1
|
12
|
+
|
13
|
+
usage=$(
|
14
|
+
cat <<EOF
|
15
|
+
$0 [OPTION]
|
16
|
+
-b VALUE set cdb path to VALUE
|
17
|
+
-c VALUE set recipe name to VALUE
|
18
|
+
-e VALUE set env to VALUE
|
19
|
+
-v VALUE set project software version to VALUE
|
20
|
+
-r VALUE set rvm_path to VALUE
|
21
|
+
-d VALUE set de executable to VALUE
|
22
|
+
-g VALUE set deployment engine version to VALUE
|
23
|
+
EOF
|
24
|
+
)
|
25
|
+
|
26
|
+
while getopts "b:c:e:v:r:d:" OPTION; do
|
27
|
+
case "$OPTION" in
|
28
|
+
b)
|
29
|
+
CDB="$OPTARG"
|
30
|
+
;;
|
31
|
+
c)
|
32
|
+
RECIPE="$OPTARG"
|
33
|
+
;;
|
34
|
+
e)
|
35
|
+
ENVIRONMENT="$OPTARG"
|
36
|
+
;;
|
37
|
+
v)
|
38
|
+
VERSION="$OPTARG"
|
39
|
+
;;
|
40
|
+
r)
|
41
|
+
rvm_path="$OPTARG"
|
42
|
+
;;
|
43
|
+
d)
|
44
|
+
DE="$OPTARG"
|
45
|
+
;;
|
46
|
+
g)
|
47
|
+
VERSION_DEPENGINE="_$OPTARG_"
|
48
|
+
;;
|
49
|
+
*)
|
50
|
+
echo "unrecognized option"
|
51
|
+
echo "$usage"
|
52
|
+
exit 1
|
53
|
+
;;
|
54
|
+
esac
|
55
|
+
done
|
56
|
+
|
57
|
+
if [ "$rvm_path" = "unset" ]; then
|
58
|
+
echo "$usage"
|
59
|
+
exit 1
|
60
|
+
fi
|
61
|
+
|
62
|
+
export rvm_path
|
63
|
+
source $rvm_path/scripts/rvm
|
64
|
+
rvm reload
|
65
|
+
rvm use $VERSION_RUBY
|
66
|
+
# type "$DE"
|
67
|
+
# echo "$DE" $VERSION_DEPENGINE --recipe "$RECIPE" --deployhome "$WORKSPACE" --env "$ENVIRONMENT" --version "$VERSION"
|
68
|
+
exec "$DE" $VERSION_DEPENGINE --recipe "$RECIPE" --deployhome "$WORKSPACE" --env "$ENVIRONMENT" --version "$VERSION" --cdb "$CDB"
|
data/bin/red_eng
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
### BEGIN INIT INFO
|
4
|
+
# Provides: redirect_engine
|
5
|
+
# Required-Start: $local_fs $remote_fs
|
6
|
+
# Required-Stop:
|
7
|
+
# X-Start-Before:
|
8
|
+
# Default-Start: 2 3 4 5
|
9
|
+
# Default-Stop:
|
10
|
+
# Short-Description: Start redirect_engine daemon
|
11
|
+
# Description: Start redirect_engine daemon
|
12
|
+
### END INIT INFO
|
13
|
+
|
14
|
+
# source /usr/local/rvm/scripts/rvm
|
15
|
+
# rvm use 1.9.2
|
16
|
+
# RUBYDIR=/usr/local/rvm/gems/ruby-1.9.2-p290
|
17
|
+
|
18
|
+
# Vorher
|
19
|
+
# gem install thin
|
20
|
+
# gem install sinatra
|
21
|
+
|
22
|
+
# rvm use 1.9.3
|
23
|
+
# RUBYDIR=/usr/local/rvm/gems/ruby-1.9.3-p194
|
24
|
+
|
25
|
+
MYNAME=`basename $0`
|
26
|
+
|
27
|
+
set -e
|
28
|
+
|
29
|
+
TOOLROOT=/home/trautw/Projekte/redirect_engine
|
30
|
+
|
31
|
+
case "$1" in
|
32
|
+
start)
|
33
|
+
# start-stop-daemon --start --quiet --user cdb --chdir /srv/cdb --exec $RUBYDIR/bin/thin -- -e production -P /var/run/$MYNAME.pid -d start
|
34
|
+
start-stop-daemon --start --quiet --background --chdir "$TOOLROOT" --exec "$TOOLROOT/bin/redirect_engine" --
|
35
|
+
;;
|
36
|
+
stop)
|
37
|
+
start-stop-daemon --stop --retry=INT/10/TERM/5/KILL/2 --name redirect_engine
|
38
|
+
;;
|
39
|
+
restart)
|
40
|
+
$0 stop
|
41
|
+
sleep 5
|
42
|
+
$0 start
|
43
|
+
;;
|
44
|
+
*)
|
45
|
+
echo "Usage: $MYNAME {start|stop|restart}" >&2
|
46
|
+
exit 1
|
47
|
+
;;
|
48
|
+
esac
|
49
|
+
|
50
|
+
exit 0
|
data/lib/redirect_engine.rb
CHANGED
@@ -1,64 +1,9 @@
|
|
1
1
|
require 'redirect_engine/version'
|
2
|
-
require 'redirect_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
|
+
require 'redirect_engine/support'
|
61
3
|
|
62
4
|
module RedirectEngine
|
63
|
-
|
5
|
+
|
6
|
+
rc_file = File.join(ENV["HOME"] , ".redirect_engine.yaml")
|
7
|
+
Support::ServerInitializer.new(rc_file)
|
8
|
+
|
64
9
|
end
|
@@ -1,72 +1,108 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler/setup'
|
3
|
+
require 'json'
|
4
|
+
require 'yaml/store'
|
3
5
|
|
4
6
|
class RedirectEngine::Engine
|
5
7
|
|
6
8
|
$config = Hash.new
|
9
|
+
$logger = nil
|
7
10
|
|
8
11
|
def start()
|
9
|
-
|
10
|
-
print "Hello from Engine\n"
|
11
|
-
end
|
12
|
+
puts "puts: Hello from Engine\n"
|
12
13
|
end
|
13
14
|
|
14
15
|
def redirect_for(sina, request, params)
|
15
16
|
original_host = request.env["HTTP_X_FORWARDED_HOST"]
|
16
|
-
|
17
|
-
|
17
|
+
$logger.info "=================== Redirecting for #{original_host} #{params[:query]}"
|
18
|
+
$logger.info "Querystring = #{request.query_string}\n"
|
18
19
|
|
19
20
|
redirect_config = get_redirect_config(original_host)
|
20
21
|
|
21
|
-
|
22
|
+
$logger.info "Redirect Config = #{redirect_config}"
|
22
23
|
return_code = redirect_config["default"]["return_code"]
|
23
24
|
redirect_url = redirect_config["default"]["target"]
|
24
25
|
|
25
|
-
|
26
|
+
$logger.info "Redirecting #{params[:query]}\n"
|
26
27
|
|
27
28
|
request_uri = "/#{params[:query]}"
|
28
29
|
request_params = "#{request.query_string}"
|
29
30
|
|
30
31
|
redirect_config["redirect"].each do |redirect|
|
31
|
-
|
32
|
-
|
32
|
+
$logger.info "Checking regexp #{redirect['source']}"
|
33
|
+
$logger.info "Request URI = #{request_uri}"
|
33
34
|
if request_uri.match(redirect['source'])
|
34
|
-
|
35
|
+
$logger.info "Hit!!"
|
35
36
|
redirect_url = "http://#{original_host}#{redirect['target']}"
|
36
37
|
return_code = redirect["return_code"] if redirect["return_code"]
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
40
|
-
|
41
|
+
$logger.info "Redirect to #{redirect_url}"
|
41
42
|
sina.redirect redirect_url, return_code
|
42
43
|
# return "Danke"
|
43
44
|
end
|
44
45
|
|
46
|
+
def get_config(logger, host)
|
47
|
+
$logger = logger
|
48
|
+
get_redirect_config(host).to_json
|
49
|
+
end
|
50
|
+
|
51
|
+
def set_config(host, configuration)
|
52
|
+
$logger.info "Setting config for host #{host} to \n#{configuration.to_json}"
|
53
|
+
$logger.info "TODO: VALIDATION!!"
|
54
|
+
put_redirect_config(host, configuration)
|
55
|
+
$config[host] = nil
|
56
|
+
configuration.to_json
|
57
|
+
end
|
58
|
+
|
45
59
|
# --- private functions ---
|
46
60
|
private
|
47
61
|
|
48
62
|
def get_redirect_config(host)
|
49
63
|
if ! $config[host]
|
50
|
-
|
64
|
+
$logger.info "LOADING #{host}.yaml"
|
51
65
|
$config[host] = load_yaml "#{host}.yaml"
|
52
66
|
end
|
53
67
|
$config[host]
|
54
68
|
end
|
55
69
|
|
70
|
+
def put_redirect_config(host, data)
|
71
|
+
begin
|
72
|
+
filename = "#{host}.yaml"
|
73
|
+
store = YAML::Store.new( filename, :Indent => 2)
|
74
|
+
$logger.info "Updating: #{File.expand_path(filename)}"
|
75
|
+
store.transaction do
|
76
|
+
data.each_pair do |key, value|
|
77
|
+
if store.nil?
|
78
|
+
$logger.error "Error: no valid yaml #{File.expand_path(filename)}"
|
79
|
+
else
|
80
|
+
store[key] = value
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
true
|
85
|
+
rescue Exception => e
|
86
|
+
$logger.error "Error: while writing back yaml file #{filename}"
|
87
|
+
$logger.error e.message
|
88
|
+
false
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
56
92
|
def load_yaml(filename)
|
57
93
|
if File.file? filename
|
58
94
|
begin
|
59
95
|
YAML::load_file(filename)
|
60
96
|
rescue StringIndexOutOfBoundsException => e
|
61
|
-
|
62
|
-
|
63
|
-
|
97
|
+
$logger.error "Error: YAML parsing in #{filename}"
|
98
|
+
$logger.error "Error: YAML parsing in #{filename}"
|
99
|
+
$logger.error e.message
|
64
100
|
raise "YAML not parsable"
|
65
101
|
false
|
66
102
|
rescue Exception => e
|
67
103
|
puts "Error: YAML parsing in #{filename}"
|
68
|
-
|
69
|
-
|
104
|
+
$logger.error "Error: YAML parsing in #{filename}"
|
105
|
+
$logger.error e.message
|
70
106
|
raise "YAML not parsable"
|
71
107
|
false
|
72
108
|
end
|
@@ -75,8 +111,8 @@ private
|
|
75
111
|
end
|
76
112
|
end
|
77
113
|
|
78
|
-
def
|
79
|
-
|
114
|
+
def write_log_disabled(message)
|
115
|
+
$logger.info message
|
80
116
|
end
|
81
117
|
|
82
118
|
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'redirect_engine/engine'
|
2
|
+
|
3
|
+
require 'webrick'
|
4
|
+
require 'webrick/https'
|
5
|
+
|
6
|
+
use Rack::Logger
|
7
|
+
|
8
|
+
set :run, false
|
9
|
+
|
10
|
+
module Support
|
11
|
+
|
12
|
+
$engine = nil
|
13
|
+
$engine_config = nil
|
14
|
+
$logger = nil
|
15
|
+
|
16
|
+
class MyServer < Sinatra::Base
|
17
|
+
configure :production, :development do
|
18
|
+
enable :logging
|
19
|
+
end
|
20
|
+
|
21
|
+
# --- private functions ---
|
22
|
+
private
|
23
|
+
|
24
|
+
# ---------------------------------------------------
|
25
|
+
before do
|
26
|
+
content_type :html, 'charset' => 'utf-8'
|
27
|
+
# See http://rack.rubyforge.org/doc/classes/Rack/Request.html
|
28
|
+
|
29
|
+
if request.env["HTTP_X_FORWARDED_HOST"]
|
30
|
+
request.path_info = "/redirector#{request.path_info}"
|
31
|
+
end
|
32
|
+
# write_log "Querystring = #{request.query_string}\n"
|
33
|
+
# write_log "Param source = #{request["source"]}\n"
|
34
|
+
# http://stackoverflow.com/questions/6317705/rackrequest-how-do-i-get-all-headers
|
35
|
+
# headers = env.select {|k,v| k.start_with? 'HTTP_'}
|
36
|
+
# write_log "Headers = #{headers}\n"
|
37
|
+
# write_log "Host = #{request.env["HTTP_HOST"]}\n"
|
38
|
+
# write_log "Host = #{headers["HTTP_HOST"]}\n"
|
39
|
+
# write_log "Original Host = #{request.env["HTTP_X_FORWARDED_HOST"]}\n"
|
40
|
+
end
|
41
|
+
|
42
|
+
after do
|
43
|
+
# puts "Response status = #{response.status}"
|
44
|
+
end
|
45
|
+
|
46
|
+
helpers do
|
47
|
+
include Rack::Utils
|
48
|
+
alias_method :h, :escape_html
|
49
|
+
end
|
50
|
+
|
51
|
+
get '/redirector/:query' do
|
52
|
+
$engine.redirect_for(self, request, params)
|
53
|
+
end
|
54
|
+
|
55
|
+
# e.g. http://ubutu.chtw.de/config/trautwein.homeip.net
|
56
|
+
get '/config/:host' do
|
57
|
+
headers "Access-Control-Allow-Origin" => $engine_config["allow_origin"]
|
58
|
+
# $logger.info("KHJKHJKHKJHKJH")
|
59
|
+
# $logger.error("cwmbmnbmnbmnbmnbmbmnb")
|
60
|
+
# $logger.debug("GGGGGGGGGGGGGGGGGGGG")
|
61
|
+
$engine.get_config($logger,params[:host])
|
62
|
+
end
|
63
|
+
|
64
|
+
# e.g. http://ubutu.chtw.de/config/trautwein.hoeip.net
|
65
|
+
post '/config/:host' do
|
66
|
+
headers "Access-Control-Allow-Origin" => "http://ubuntu.chtw.de:4567"
|
67
|
+
$engine.set_config(params[:host], params[:json])
|
68
|
+
end
|
69
|
+
|
70
|
+
get '/*' do
|
71
|
+
# write_log "Error: Request doesn't match a valid route!"
|
72
|
+
$logger.error "Error: Request #{params[:splat]} doesn't match a valid route!\n"
|
73
|
+
return "@@ERROR@@" + "Error: Request doesn't match a valid route!\n"
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
class ServerInitializer
|
80
|
+
def initialize(config_file)
|
81
|
+
puts "Initializing Server from #{config_file}"
|
82
|
+
$engine_config = load_yaml(config_file)
|
83
|
+
$logger = WEBrick::Log::new($engine_config["logfile"], WEBrick::Log::DEBUG)
|
84
|
+
|
85
|
+
$engine = RedirectEngine::Engine.new
|
86
|
+
$engine.start()
|
87
|
+
|
88
|
+
access_log_stream = File.open($engine_config["access_log"], 'w')
|
89
|
+
access_log = [ [ access_log_stream, WEBrick::AccessLog::COMBINED_LOG_FORMAT ] ]
|
90
|
+
|
91
|
+
webrick_options = {
|
92
|
+
:Port => $engine_config["port"] || 8443,
|
93
|
+
:Host => $engine_config["ip"] || "127.0.0.1",
|
94
|
+
# :Logger => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG),
|
95
|
+
:Logger => $logger,
|
96
|
+
:AccessLog => access_log,
|
97
|
+
:DocumentRoot => File.dirname(__FILE__) + '/../public',
|
98
|
+
:SSLEnable => true,
|
99
|
+
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
|
100
|
+
:SSLCertificate => OpenSSL::X509::Certificate.new( File.open(File.join($engine_config["cert_path"], $engine_config["hostname"] + ".cert")).read),
|
101
|
+
:SSLPrivateKey => OpenSSL::PKey::RSA.new( File.open(File.join($engine_config["cert_path"], $engine_config["hostname"] + ".key")).read),
|
102
|
+
:SSLCertName => [ [ "CN",WEBrick::Utils::getservername ] ],
|
103
|
+
:app => MyServer
|
104
|
+
}
|
105
|
+
|
106
|
+
Rack::Server.start webrick_options
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
private
|
111
|
+
def load_yaml(filename)
|
112
|
+
if File.file? filename
|
113
|
+
begin
|
114
|
+
YAML::load_file(filename)
|
115
|
+
rescue StringIndexOutOfBoundsException => e
|
116
|
+
puts "Error: YAML parsing in #{filename}"
|
117
|
+
write_log "Error: YAML parsing in #{filename}"
|
118
|
+
write_log e.message
|
119
|
+
raise "YAML not parsable"
|
120
|
+
false
|
121
|
+
rescue Exception => e
|
122
|
+
puts "Error: YAML parsing in #{filename}"
|
123
|
+
write_log "Error: YAML parsing in #{filename}"
|
124
|
+
write_log e.message
|
125
|
+
raise "YAML not parsable"
|
126
|
+
false
|
127
|
+
end
|
128
|
+
else
|
129
|
+
raise "File not found: #{filename}"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def write_log_disabled(message)
|
134
|
+
# logger.info(message)
|
135
|
+
# puts message
|
136
|
+
$logger.info(message)
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
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.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -31,7 +31,8 @@ description: Generates http redirects
|
|
31
31
|
email:
|
32
32
|
- trautwein@scienitst.com
|
33
33
|
executables:
|
34
|
-
-
|
34
|
+
- deploy_caller
|
35
|
+
- red_eng
|
35
36
|
- redirect_engine
|
36
37
|
extensions: []
|
37
38
|
extra_rdoc_files: []
|
@@ -41,10 +42,12 @@ files:
|
|
41
42
|
- LICENSE.txt
|
42
43
|
- README.md
|
43
44
|
- Rakefile
|
44
|
-
- bin
|
45
|
+
- bin/deploy_caller
|
46
|
+
- bin/red_eng
|
45
47
|
- bin/redirect_engine
|
46
48
|
- lib/redirect_engine.rb
|
47
49
|
- lib/redirect_engine/engine.rb
|
50
|
+
- lib/redirect_engine/support.rb
|
48
51
|
- lib/redirect_engine/version.rb
|
49
52
|
- redirect_engine.gemspec
|
50
53
|
homepage: http://chtw.de/redirector
|
data/bin/.redirect_engine.swp
DELETED
Binary file
|