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 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
@@ -1,64 +1,9 @@
1
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
+ require 'redirect_engine/support'
61
3
 
62
4
  module RedirectEngine
63
- # Your code goes here...
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
- begin
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
- write_log "=================== Redirecting for #{original_host} #{params[:query]}"
17
- write_log "Querystring = #{request.query_string}\n"
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
- write_log "Redirect Config = #{redirect_config}"
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
- write_log "Redirecting #{params[:query]}\n"
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
- write_log "Checking regexp #{redirect['source']}"
32
- write_log "Request URI = #{request_uri}"
32
+ $logger.info "Checking regexp #{redirect['source']}"
33
+ $logger.info "Request URI = #{request_uri}"
33
34
  if request_uri.match(redirect['source'])
34
- write_log "Hit!!"
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
- write_log "Redirect to #{redirect_url}"
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
- write_log "LOADING #{host}.yaml"
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
- puts "Error: YAML parsing in #{filename}"
62
- write_log "Error: YAML parsing in #{filename}"
63
- write_log e.message
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
- write_log "Error: YAML parsing in #{filename}"
69
- write_log e.message
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 write_log(message)
79
- puts message
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
+
@@ -1,3 +1,3 @@
1
1
  module RedirectEngine
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.4"
3
3
  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.2
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-02-11 00:00:00.000000000 Z
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
- - .redirect_engine.swp
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/.redirect_engine.swp
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
Binary file