Merge pull request #51 from beardyjay/master - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
DIR Log
DIR Files
DIR Refs
DIR README
---
DIR commit b0e8be647833bd0c24df2e27b620767dce088d69
DIR parent e367620aeabc5bf63187b4c92c7c0588f1ebe6b4
HTML Author: HD Moore <x@hdm.io>
Date: Thu, 20 Oct 2016 13:21:44 -0500
Merge pull request #51 from beardyjay/master
Updates to bin/warvox.rb
Diffstat:
A .dockerignore | 3 +++
M .gitignore | 1 +
M Gemfile | 2 +-
M Gemfile.lock | 10 +++-------
M README.md | 78 ++++++++++++++++++++++---------
A bin/warvox | 102 +++++++++++++++++++++++++++++++
D bin/warvox.rb | 104 -------------------------------
M bin/worker_manager.rb | 4 ++--
M config/environments/production.rb | 99 +++++++++++++++++++------------
9 files changed, 229 insertions(+), 174 deletions(-)
---
DIR diff --git a/.dockerignore b/.dockerignore
@@ -0,0 +1,3 @@
+.git
+.env
+.dockerignore
DIR diff --git a/.gitignore b/.gitignore
@@ -31,3 +31,4 @@ playbook.retry
TODO.md
/public/assets
+.env
DIR diff --git a/Gemfile b/Gemfile
@@ -1,6 +1,6 @@
source 'https://rubygems.org'
-gem 'unicorn'
+gem 'puma'
gem 'rails', '~> 5.0', '>= 5.0.0.1'
gem 'pg', '~> 0.18'
DIR diff --git a/Gemfile.lock b/Gemfile.lock
@@ -163,7 +163,6 @@ GEM
jsobfu (0.4.1)
rkelly-remix (= 0.0.6)
json (2.0.2)
- kgio (2.10.0)
kissfft (0.0.2)
launchy (2.4.3)
addressable (~> 2.3)
@@ -200,6 +199,7 @@ GEM
method_source (~> 0.8.1)
slop (~> 3.4)
psych_shield (0.0.4)
+ puma (3.6.0)
rack (2.0.1)
rack-test (0.6.3)
rack (>= 1.0)
@@ -229,7 +229,6 @@ GEM
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
- raindrops (0.17.0)
rake (11.2.2)
rb-fsevent (0.9.7)
rb-inotify (0.9.7)
@@ -305,9 +304,6 @@ GEM
thread_safe (~> 0.1)
uglifier (3.0.2)
execjs (>= 0.3.0, < 3)
- unicorn (5.1.0)
- kgio (~> 2.6)
- raindrops (~> 0.7)
web-console (3.3.1)
actionview (>= 5.0)
activemodel (>= 5.0)
@@ -353,6 +349,7 @@ DEPENDENCIES
pg (~> 0.18)
pry
psych_shield
+ puma
rails (~> 5.0, >= 5.0.0.1)
rails-settings-cached (>= 0.4.1)
rails_layout
@@ -366,10 +363,9 @@ DEPENDENCIES
therubyracer
tzinfo-data
uglifier (>= 1.3.0)
- unicorn
web-console
will_paginate (~> 3.0)
will_paginate-bootstrap
BUNDLED WITH
- 1.12.5
+ 1.13.4
DIR diff --git a/README.md b/README.md
@@ -9,45 +9,52 @@ Questions and suggestions can be sent to:
- [Installing](#installing)
-##installing
+## Installing
WarVOX requires a Linux operating system, preferably Ubuntu or Debian.
WarVOX requires PostgreSQL 9.1 or newer with the "contrib" package installed for integer array support.
To get started, install the OS-level dependencies:
-
- $ sudo apt-get install gnuplot lame build-essential libssl-dev libcurl4-openssl-dev \
+```
+ $ sudo apt-get install gnuplot lame build-essential libssl-dev libcurl4-openssl-dev \
postgresql postgresql-contrib postgresql-common git-core curl libpq-dev sox
+```
Install RVM to obtain Ruby 2.2.5 or later
-
+```
$ \curl -L https://get.rvm.io | bash -s stable --autolibs=3 --rails
+```
After RVM is installed you need to run the rvm script provided
-
+```
$ source /usr/local/rvm/scripts/rvm
+```
In case you have not installed Ruby 2.2.5 or later by now, do so using RVM.
-
+```
$ rvm install ruby-2.2.5
-
-Clone this repository to the location you want to install WarVOX:
+```
+Clone this repository to the location you want to install WarVOX:
+```
$ git clone git://github.com/rapid7/warvox.git /opt/warvox
+```
Configure WarVOX:
-
+```
$ cd /opt/warvox
$ bundle install
$ make
+```
Verify your installation:
-
+```
$ bin/verify_install.rb
+```
Configure the PostgreSQL account for WarVOX:
-
+```
$ sudo su - postgres
$ createuser -s warvox
$ createdb warvox -O warvox
@@ -55,38 +62,63 @@ Configure the PostgreSQL account for WarVOX:
psql> alter user warvox with password 'randompass';
psql> exit
$ exit
+```
Copy the example database configuration to database.yml:
-
+```
$ cp config/database.yml.example config/database.yml
+```
Copy the example secrets configuration to secrets.yml:
-
+```
$ cp config/secrets.yml.example config/secrets.yml
-
-Create a new secrect token:
-
+```
+Create a new secrect token:
+```
$ rake secret > config/session.key
-
+```
Modify config/database.yml to include the password set previously
Initialize the WarVOX database:
-
+```
$ make database
+```
Add an admin account to WarVOX
-
+```
$ bin/adduser admin randompass
+```
Start the WarVOX daemons:
-
- $ bin/warvox.rb
+```
+ $ bin/warvox
+```
or to bind WarVox to all interfaces:
-
- $ bin/warvox.rb --address 0.0.0.0
+```
+ $ bin/warvox --address 0.0.0.0
+```
Access the web interface at http://127.0.0.1:7777/
At this point you can configure a new IAX2 provider, create a project, and start making calls.
+## Assets
+
+To get assets to show up, you need to first compile assets in production environment:
+
+```
+RAILS_ENV=production bundle exec rake assets:precompile
+```
+This will compile all static assets into `public` folder.
+
+Next, you need to enable the `RAILS_SERVE_STATIC_FILES` environment variable through the terminal:
+
+```
+export RAILS_SERVE_STATIC_FILES=true
+```
+or wrap the above in a `.env` file and run source:
+
+```
+source .env
+```
DIR diff --git a/bin/warvox b/bin/warvox
@@ -0,0 +1,102 @@
+#!/usr/bin/env ruby
+###################
+
+require 'getoptlong'
+require 'open3'
+
+#
+# Load the library path
+#
+base = __FILE__
+while File.symlink?(base)
+ base = File.expand_path(File.readlink(base), File.dirname(base))
+end
+
+$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
+
+voxroot = File.expand_path(File.join(File.dirname(base), '..'))
+manager = File.expand_path(File.join(File.dirname(base), 'worker_manager.rb'))
+
+require 'warvox'
+
+
+Dir.chdir(voxroot)
+
+def stop
+ $stderr.puts "[-] Interrupt received, shutting down workers and web server..."
+ Process.kill("TERM", @manager_pid) if @manager_pid
+ exit(0)
+end
+
+def usage
+ $stderr.puts "#{$0} [--address IP] [--port PORT] --background"
+ exit(0)
+end
+
+opts =
+{
+ 'ServerPort' => 7777,
+ 'ServerHost' => '127.0.0.1',
+ 'Background' => false,
+}
+
+args = GetoptLong.new(
+ ["--address", "-a", GetoptLong::REQUIRED_ARGUMENT ],
+ ["--port", "-p", GetoptLong::REQUIRED_ARGUMENT ],
+ ["--daemon", "-d", GetoptLong::NO_ARGUMENT ],
+ ["--help", "-h", GetoptLong::NO_ARGUMENT]
+)
+
+args.each do |opt,arg|
+ case opt
+ when '--address'
+ opts['ServerHost'] = arg
+ when '--port'
+ opts['ServerPort'] = arg
+ when '--daemon'
+ opts['Background'] = true
+ when '--help'
+ usage()
+ end
+end
+
+args = [
+ 'server',
+ '-p', opts['ServerPort'].to_s,
+ '-b', opts['ServerHost'],
+ '-e', 'production',
+]
+
+if opts['Background']
+ args.push("-d")
+end
+
+
+trap("SIGINT") { Thread.new{ stop } }
+
+$browser_url = "http://#{opts['ServerHost']}:#{opts['ServerPort']}/"
+
+WarVOX::Log.info("")
+WarVOX::Log.info("[*] Starting WarVOX on #{$browser_url}")
+WarVOX::Log.info("")
+WarVOX::Log.info("WarVOX is starting up...")
+
+@manager_pid = Process.fork()
+if not @manager_pid
+ while ARGV.shift do
+ end
+ load(manager)
+ exit(0)
+end
+
+WarVOX::Log.info("Worker Manager has PID #{@manager_pid}")
+
+@webserver_pid = $$
+
+WarVOX::Log.info("Web Server has PID #{@webserver_pid}")
+
+while(ARGV.length > 0); ARGV.shift; end
+args.each {|arg| ARGV.push(arg) }
+
+# need to pass config opts above into the system command below
+system "bin/rails", *args
DIR diff --git a/bin/warvox.rb b/bin/warvox.rb
@@ -1,104 +0,0 @@
-#!/usr/bin/env ruby
-###################
-
-require 'getoptlong'
-require 'open3'
-
-#
-# Load the library path
-#
-base = __FILE__
-while File.symlink?(base)
- base = File.expand_path(File.readlink(base), File.dirname(base))
-end
-
-$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
-
-voxroot = File.expand_path(File.join(File.dirname(base), '..'))
-voxserv = File.expand_path(File.join(File.expand_path(voxroot), 'bin', 'rails'))
-manager = File.expand_path(File.join(File.dirname(base), 'worker_manager.rb'))
-
-require 'warvox'
-
-
-Dir.chdir(voxroot)
-
-def stop
- $stderr.puts "[-] Interrupt received, shutting down workers and web server..."
- Process.kill("TERM", @manager_pid) if @manager_pid
- exit(0)
-end
-
-def usage
- $stderr.puts "#{$0} [--address IP] [--port PORT] --background"
- exit(0)
-end
-
-opts =
-{
- 'ServerPort' => 7777,
- 'ServerHost' => '127.0.0.1',
- 'Background' => false,
-}
-
-args = GetoptLong.new(
- ["--address", "-a", GetoptLong::REQUIRED_ARGUMENT ],
- ["--port", "-p", GetoptLong::REQUIRED_ARGUMENT ],
- ["--daemon", "-d", GetoptLong::NO_ARGUMENT ],
- ["--help", "-h", GetoptLong::NO_ARGUMENT]
-)
-
-args.each do |opt,arg|
- case opt
- when '--address'
- opts['ServerHost'] = arg
- when '--port'
- opts['ServerPort'] = arg
- when '--daemon'
- opts['Background'] = true
- when '--help'
- usage()
- end
-end
-
-args = [
- 'server',
- '-p', opts['ServerPort'].to_s,
- '-b', opts['ServerHost'],
- '-e', 'production',
-]
-
-if opts['Background']
- args.push("-d")
-end
-
-
-trap("SIGINT") { stop() }
-
-$browser_url = "http://#{opts['ServerHost']}:#{opts['ServerPort']}/"
-
-$stderr.puts ""
-$stderr.puts "[*] Starting WarVOX on #{$browser_url}"
-$stderr.puts ""
-
-
-WarVOX::Log.info("WarVOX is starting up...")
-
-@manager_pid = Process.fork()
-if not @manager_pid
- while ARGV.shift do
- end
- load(manager)
- exit(0)
-end
-
-WarVOX::Log.info("Worker Manager has PID #{@manager_pid}")
-
-@webserver_pid = $$
-
-WarVOX::Log.info("Web Server has PID #{@manager_pid}")
-
-while(ARGV.length > 0); ARGV.shift; end
-args.each {|arg| ARGV.push(arg) }
-
-load(voxserv)
DIR diff --git a/bin/worker_manager.rb b/bin/worker_manager.rb
@@ -161,8 +161,8 @@ end
# Main
#
-trap("SIGINT") { stop() }
-trap("SIGTERM") { stop() }
+trap("SIGINT") { Thread.new{ stop } }
+trap("SIGTERM") { Thread.new{ stop } }
@cookie = Socket.gethostname + "^" + $$.to_s + "^" + sprintf("%.8x", rand(0x100000000))
@max_jobs = 3
DIR diff --git a/config/environments/production.rb b/config/environments/production.rb
@@ -1,56 +1,81 @@
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
- # In the development environment your application's code is reloaded on
- # every request. This slows down response time but is perfect for development
- # since you don't have to restart the web server when you make code changes.
- config.cache_classes = false
+ # Code is not reloaded between requests.
+ config.cache_classes = true
- # Do not eager load code on boot.
- config.eager_load = false
+ # Eager load code on boot. This eager loads most of Rails and
+ # your application in memory, allowing both threaded web servers
+ # and those relying on copy on write to perform better.
+ # Rake tasks automatically ignore this option for performance.
+ config.eager_load = true
- # Show full error reports and disable caching.
- config.consider_all_requests_local = true
+ # Full error reports are disabled and caching is turned on.
+ config.consider_all_requests_local = false
+ config.action_controller.perform_caching = true
- # Enable/disable caching. By default caching is disabled.
- if Rails.root.join('tmp/caching-dev.txt').exist?
- config.action_controller.perform_caching = true
+ # Disable serving static files from the `/public` folder by default since
+ # Apache or NGINX already handles this.
+ config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
- config.cache_store = :memory_store
- config.public_file_server.headers = {
- 'Cache-Control' => 'public, max-age=172800'
- }
- else
- config.action_controller.perform_caching = false
+ # Compress JavaScripts and CSS.
+ config.assets.js_compressor = :uglifier
+ # config.assets.css_compressor = :sass
- config.cache_store = :null_store
- end
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
+ config.assets.compile = false
- # Don't care if the mailer can't send.
- config.action_mailer.raise_delivery_errors = false
+ # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
- config.action_mailer.perform_caching = false
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+ # config.action_controller.asset_host = 'http://assets.example.com'
- # Print deprecation notices to the Rails logger.
- config.active_support.deprecation = :log
+ # Specifies the header that your server uses for sending files.
+ # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
- # Raise an error on page load if there are pending migrations.
- config.active_record.migration_error = :page_load
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+ # config.force_ssl = true
+ # Use the lowest log level to ensure availability of diagnostic information
+ # when problems arise.
config.log_level = :debug
- # Debug mode disables concatenation and preprocessing of assets.
- # This option may cause significant delays in view rendering with a large
- # number of complex assets.
- config.assets.debug = false
+ # Prepend all log lines with the following tags.
+ config.log_tags = [ :request_id ]
+
+ # Use a different cache store in production.
+ # config.cache_store = :mem_cache_store
+
+ # Use a real queuing backend for Active Job (and separate queues per environment)
+ # config.active_job.queue_adapter = :resque
+ # config.active_job.queue_name_prefix = "barerails5app_#{Rails.env}"
+ config.action_mailer.perform_caching = false
+
+ # Ignore bad email addresses and do not raise email delivery errors.
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+ # config.action_mailer.raise_delivery_errors = false
+
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+ # the I18n.default_locale when a translation cannot be found).
+ config.i18n.fallbacks = true
+
+ # Send deprecation notices to registered listeners.
+ config.active_support.deprecation = :notify
- # Suppress logger output for asset requests.
- config.assets.quiet = true
+ # Use default logging formatter so that PID and timestamp are not suppressed.
+ config.log_formatter = ::Logger::Formatter.new
- # Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
+ # Use a different logger for distributed setups.
+ # require 'syslog/logger'
+ # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
+
+ if ENV["RAILS_LOG_TO_STDOUT"].present?
+ logger = ActiveSupport::Logger.new(STDOUT)
+ logger.formatter = config.log_formatter
+ config.logger = ActiveSupport::TaggedLogging.new(logger)
+ end
- # Use an evented file watcher to asynchronously detect changes in source code,
- # routes, locales, etc. This feature depends on the listen gem.
- # config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+ # Do not dump schema after migrations.
+ config.active_record.dump_schema_after_migration = false
end