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