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