Still a work in progress, closer - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit 384b73e9317c52d227b226504ddc07016da7fa65
(DIR) parent 11e8b26bad69969870b96fa4f730a2873bff1e43
(HTM) Author: HD Moore <hd_moore@rapid7.com>
Date: Wed, 10 Oct 2012 01:29:49 -0500
Still a work in progress, closer
Diffstat:
M web/Gemfile | 34 ++++++++-----------------------
M web/Gemfile.lock | 28 ++++++++++++++++++++++++++++
R web/public/images/balloon.png -> w… | 0
R web/public/images/bluefade.jpg -> … | 0
R web/public/images/close.gif -> web… | 0
R web/public/images/left-round.png -… | 0
R web/public/images/loading.gif -> w… | 0
R web/public/images/logo.png -> web/… | 0
R web/public/images/logo_raw.xcf -> … | 0
R web/public/images/musicplayer.swf … | 0
R web/public/images/rails.png -> web… | 0
R web/public/images/right-round.png … | 0
R web/public/images/round_bot.png ->… | 0
R web/public/images/round_top.png ->… | 0
R web/public/javascripts/FusionChart… | 0
R web/public/javascripts/application… | 0
R web/public/javascripts/controls.js… | 0
R web/public/javascripts/custom.js -… | 0
R web/public/javascripts/dragdrop.js… | 0
R web/public/javascripts/effects.js … | 0
A web/app/assets/javascripts/lightbo… | 426 +++++++++++++++++++++++++++++++
R web/public/javascripts/prototype.j… | 0
R web/public/javascripts/rails.js ->… | 0
A web/app/assets/stylesheets/global.… | 556 ++++++++++++++++++++++++++++++
R web/public/stylesheets/ie7.css -> … | 0
R web/public/stylesheets/lightbox.cs… | 0
R web/public/stylesheets/overlay.png… | 0
R web/public/stylesheets/scaffold.cs… | 0
M web/app/views/analyze/view.html.erb | 4 ++--
M web/app/views/analyze/view_matches… | 8 ++++----
M web/app/views/layouts/warvox.html.… | 10 ++++------
M web/app/views/shared/_header.html.… | 2 +-
M web/config/application.rb | 38 ++++++++++++++++++++++++-------
M web/config/boot.rb | 13 +++----------
M web/config/database.yml | 11 +++++++++++
M web/config/environments/developmen… | 21 ++++++++++++++++-----
M web/config/environments/production… | 49 +++++++++++++++++++++----------
M web/config/initializers/inflection… | 5 +++++
M web/config/initializers/secret_tok… | 6 ------
M web/config/initializers/session_st… | 6 +++---
A web/config/initializers/wrap_param… | 14 ++++++++++++++
M web/db/schema.rb | 24 +++++++-----------------
D web/public/javascripts/lightbox.js | 426 -------------------------------
D web/public/stylesheets/global.css | 556 ------------------------------
44 files changed, 1152 insertions(+), 1085 deletions(-)
---
(DIR) diff --git a/web/Gemfile b/web/Gemfile
@@ -1,33 +1,17 @@
source 'http://rubygems.org'
gem 'rails', '3.2.8'
-
-# Bundle edge Rails instead:
-# gem 'rails', :git => 'git://github.com/rails/rails.git'
-
gem 'pg', '0.11'
-# Use unicorn as the web server
-# gem 'unicorn'
-
-# Deploy with Capistrano
-# gem 'capistrano'
-
-# To use debugger
-# gem 'ruby-debug'
-
-# Bundle the extra gems:
-# gem 'bj'
-# gem 'nokogiri'
-# gem 'sqlite3-ruby', :require => 'sqlite3'
-# gem 'aws-s3', :require => 'aws/s3'
-
-# Bundle gems for the local environment. Make sure to
-# put test-only gems in this group so their generators
-# and rake tasks are available in development mode:
-# group :development, :test do
-# gem 'webrat'
-# end
+# Gems used only for assets and not required
+# in production environments by default.
+group :assets do
+ gem 'sass-rails', '~> 3.2.3'
+ gem 'coffee-rails', '~> 3.2.1'
+ gem 'therubyracer', :platforms => :ruby
+ gem 'uglifier', '>= 1.0.3'
+end
+gem 'jquery-rails'
gem 'will_paginate', '~> 3.0'
gem 'dynamic_form'
(DIR) diff --git a/web/Gemfile.lock b/web/Gemfile.lock
@@ -30,12 +30,25 @@ GEM
multi_json (~> 1.0)
arel (3.0.2)
builder (3.0.3)
+ coffee-rails (3.2.2)
+ coffee-script (>= 2.2.0)
+ railties (~> 3.2.0)
+ coffee-script (2.2.0)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.3.3)
dynamic_form (1.1.4)
erubis (2.7.0)
+ execjs (1.4.0)
+ multi_json (~> 1.0)
hike (1.2.1)
i18n (0.6.1)
journey (1.0.4)
+ jquery-rails (2.1.3)
+ railties (>= 3.1.0, < 5.0)
+ thor (~> 0.14)
json (1.7.5)
+ libv8 (3.3.10.4)
mail (2.4.4)
i18n (>= 0.4.0)
mime-types (~> 1.16)
@@ -69,23 +82,38 @@ GEM
rake (0.9.2.2)
rdoc (3.12)
json (~> 1.4)
+ sass (3.2.1)
+ sass-rails (3.2.5)
+ railties (~> 3.2.0)
+ sass (>= 3.1.10)
+ tilt (~> 1.3)
sprockets (2.1.3)
hike (~> 1.2)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
+ therubyracer (0.10.1)
+ libv8 (~> 3.3.10)
thor (0.16.0)
tilt (1.3.3)
treetop (1.4.11)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.33)
+ uglifier (1.3.0)
+ execjs (>= 0.3.0)
+ multi_json (~> 1.0, >= 1.0.2)
will_paginate (3.0.3)
PLATFORMS
ruby
DEPENDENCIES
+ coffee-rails (~> 3.2.1)
dynamic_form
+ jquery-rails
pg (= 0.11)
rails (= 3.2.8)
+ sass-rails (~> 3.2.3)
+ therubyracer
+ uglifier (>= 1.0.3)
will_paginate (~> 3.0)
(DIR) diff --git a/web/public/images/balloon.png b/web/app/assets/images/balloon.png
Binary files differ.
(DIR) diff --git a/web/public/images/bluefade.jpg b/web/app/assets/images/bluefade.jpg
Binary files differ.
(DIR) diff --git a/web/public/images/close.gif b/web/app/assets/images/close.gif
Binary files differ.
(DIR) diff --git a/web/public/images/left-round.png b/web/app/assets/images/left-round.png
Binary files differ.
(DIR) diff --git a/web/public/images/loading.gif b/web/app/assets/images/loading.gif
Binary files differ.
(DIR) diff --git a/web/public/images/logo.png b/web/app/assets/images/logo.png
Binary files differ.
(DIR) diff --git a/web/public/images/logo_raw.xcf b/web/app/assets/images/logo_raw.xcf
Binary files differ.
(DIR) diff --git a/web/public/images/musicplayer.swf b/web/app/assets/images/musicplayer.swf
Binary files differ.
(DIR) diff --git a/web/public/images/rails.png b/web/app/assets/images/rails.png
Binary files differ.
(DIR) diff --git a/web/public/images/right-round.png b/web/app/assets/images/right-round.png
Binary files differ.
(DIR) diff --git a/web/public/images/round_bot.png b/web/app/assets/images/round_bot.png
Binary files differ.
(DIR) diff --git a/web/public/images/round_top.png b/web/app/assets/images/round_top.png
Binary files differ.
(DIR) diff --git a/web/public/javascripts/FusionCharts.js b/web/app/assets/javascripts/FusionCharts.js
(DIR) diff --git a/web/public/javascripts/application.js b/web/app/assets/javascripts/application.js
(DIR) diff --git a/web/public/javascripts/controls.js b/web/app/assets/javascripts/controls.js
(DIR) diff --git a/web/public/javascripts/custom.js b/web/app/assets/javascripts/custom.js
(DIR) diff --git a/web/public/javascripts/dragdrop.js b/web/app/assets/javascripts/dragdrop.js
(DIR) diff --git a/web/public/javascripts/effects.js b/web/app/assets/javascripts/effects.js
(DIR) diff --git a/web/app/assets/javascripts/lightbox.js b/web/app/assets/javascripts/lightbox.js
@@ -0,0 +1,426 @@
+/*
+ Lightbox JS: Fullsize Image Overlays
+ by Lokesh Dhakar - http://www.huddletogether.com
+
+ For more information on this script, visit:
+ http://huddletogether.com/projects/lightbox/
+
+ Script featured on Dynamic Drive code library Jan 24th, 06':
+ http://www.dynamicdrive.com
+
+ Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
+ (basically, do anything you want, just leave my name and link)
+
+ Table of Contents
+ -----------------
+ Configuration
+
+ Functions
+ - getPageScroll()
+ - getPageSize()
+ - pause()
+ - getKey()
+ - listenKey()
+ - showLightbox()
+ - hideLightbox()
+ - initLightbox()
+ - addLoadEvent()
+
+ Function Calls
+ - addLoadEvent(initLightbox)
+
+*/
+
+
+
+//
+// Configuration
+//
+
+// If you would like to use a custom loading image or close button reference them in the next two lines.
+var loadingImage = '/assets/loading.gif';
+var closeButton = '/assets/close.gif';
+
+
+
+
+
+//
+// getPageScroll()
+// Returns array with x,y page scroll values.
+// Core code from - quirksmode.org
+//
+function getPageScroll(){
+
+ var yScroll;
+
+ if (self.pageYOffset) {
+ yScroll = self.pageYOffset;
+ } else if (document.documentElement && document.documentElement.scrollTop){ // Explorer 6 Strict
+ yScroll = document.documentElement.scrollTop;
+ } else if (document.body) {// all other Explorers
+ yScroll = document.body.scrollTop;
+ }
+
+ arrayPageScroll = new Array('',yScroll)
+ return arrayPageScroll;
+}
+
+
+
+//
+// getPageSize()
+// Returns array with page width, height and window width, height
+// Core code from - quirksmode.org
+// Edit for Firefox by pHaez
+//
+function getPageSize(){
+
+ var xScroll, yScroll;
+
+ if (window.innerHeight && window.scrollMaxY) {
+ xScroll = document.body.scrollWidth;
+ yScroll = window.innerHeight + window.scrollMaxY;
+ } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
+ xScroll = document.body.scrollWidth;
+ yScroll = document.body.scrollHeight;
+ } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
+ xScroll = document.body.offsetWidth;
+ yScroll = document.body.offsetHeight;
+ }
+
+ var windowWidth, windowHeight;
+ if (self.innerHeight) { // all except Explorer
+ windowWidth = self.innerWidth;
+ windowHeight = self.innerHeight;
+ } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
+ windowWidth = document.documentElement.clientWidth;
+ windowHeight = document.documentElement.clientHeight;
+ } else if (document.body) { // other Explorers
+ windowWidth = document.body.clientWidth;
+ windowHeight = document.body.clientHeight;
+ }
+
+ // for small pages with total height less then height of the viewport
+ if(yScroll < windowHeight){
+ pageHeight = windowHeight;
+ } else {
+ pageHeight = yScroll;
+ }
+
+ // for small pages with total width less then width of the viewport
+ if(xScroll < windowWidth){
+ pageWidth = windowWidth;
+ } else {
+ pageWidth = xScroll;
+ }
+
+
+ arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
+ return arrayPageSize;
+}
+
+
+//
+// pause(numberMillis)
+// Pauses code execution for specified time. Uses busy code, not good.
+// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
+//
+function pause(numberMillis) {
+ var now = new Date();
+ var exitTime = now.getTime() + numberMillis;
+ while (true) {
+ now = new Date();
+ if (now.getTime() > exitTime)
+ return;
+ }
+}
+
+//
+// getKey(key)
+// Gets keycode. If 'x' is pressed then it hides the lightbox.
+//
+
+function getKey(e){
+ if (e == null) { // ie
+ keycode = event.keyCode;
+ } else { // mozilla
+ keycode = e.which;
+ }
+ key = String.fromCharCode(keycode).toLowerCase();
+
+ if(key == 'x'){ hideLightbox(); }
+}
+
+
+//
+// listenKey()
+//
+function listenKey () { document.onkeypress = getKey; }
+
+
+//
+// showLightbox()
+// Preloads images. Pleaces new image in lightbox then centers and displays.
+//
+function showLightbox(objLink)
+{
+ // prep objects
+ var objOverlay = document.getElementById('overlay');
+ var objLightbox = document.getElementById('lightbox');
+ var objCaption = document.getElementById('lightboxCaption');
+ var objImage = document.getElementById('lightboxImage');
+ var objLoadingImage = document.getElementById('loadingImage');
+ var objLightboxDetails = document.getElementById('lightboxDetails');
+
+
+ var arrayPageSize = getPageSize();
+ var arrayPageScroll = getPageScroll();
+
+ // center loadingImage if it exists
+ if (objLoadingImage) {
+ objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - objLoadingImage.height) / 2) + 'px');
+ objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoadingImage.width) / 2) + 'px');
+ objLoadingImage.style.display = 'block';
+ }
+
+ // set height of Overlay to take up whole page and show
+ objOverlay.style.height = (arrayPageSize[1] + 'px');
+ objOverlay.style.display = 'block';
+
+ // preload image
+ imgPreload = new Image();
+
+ imgPreload.onload=function(){
+ objImage.src = objLink.href;
+
+ // center lightbox and make sure that the top and left values are not negative
+ // and the image placed outside the viewport
+ var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - imgPreload.height) / 2);
+ var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width) / 2);
+
+ objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTop + "px";
+ objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightboxLeft + "px";
+
+
+ objLightboxDetails.style.width = imgPreload.width + 'px';
+
+ if(objLink.getAttribute('title')){
+ objCaption.style.display = 'block';
+ //objCaption.style.width = imgPreload.width + 'px';
+ objCaption.innerHTML = objLink.getAttribute('title');
+ } else {
+ objCaption.style.display = 'none';
+ }
+
+ // A small pause between the image loading and displaying is required with IE,
+ // this prevents the previous image displaying for a short burst causing flicker.
+ if (navigator.appVersion.indexOf("MSIE")!=-1){
+ pause(250);
+ }
+
+ if (objLoadingImage) { objLoadingImage.style.display = 'none'; }
+ objLightbox.style.display = 'block';
+
+ // After image is loaded, update the overlay height as the new image might have
+ // increased the overall page height.
+ arrayPageSize = getPageSize();
+ objOverlay.style.height = (arrayPageSize[1] + 'px');
+
+ // Check for 'x' keypress
+ listenKey();
+
+ return false;
+ }
+
+ imgPreload.src = objLink.href;
+
+}
+
+
+
+
+
+//
+// hideLightbox()
+//
+function hideLightbox()
+{
+ // get objects
+ objOverlay = document.getElementById('overlay');
+ objLightbox = document.getElementById('lightbox');
+
+ // hide lightbox and overlay
+ objOverlay.style.display = 'none';
+ objLightbox.style.display = 'none';
+
+ // disable keypress listener
+ document.onkeypress = '';
+}
+
+
+
+
+//
+// initLightbox()
+// Function runs on window load, going through link tags looking for rel="lightbox".
+// These links receive onclick events that enable the lightbox display for their targets.
+// The function also inserts html markup at the top of the page which will be used as a
+// container for the overlay pattern and the inline image.
+//
+function initLightbox()
+{
+
+ if (!document.getElementsByTagName){ return; }
+ var anchors = document.getElementsByTagName("a");
+
+ // loop through all anchor tags
+ for (var i=0; i<anchors.length; i++){
+ var anchor = anchors[i];
+
+ if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){
+ anchor.onclick = function () {showLightbox(this); return false;}
+ }
+ }
+
+ // the rest of this code inserts html at the top of the page that looks like this:
+ //
+ // <div id="overlay">
+ // <a href="#" onclick="hideLightbox(); return false;"><img id="loadingImage" /></a>
+ // </div>
+ // <div id="lightbox">
+ // <a href="#" onclick="hideLightbox(); return false;" title="Click anywhere to close image">
+ // <img id="closeButton" />
+ // <img id="lightboxImage" />
+ // </a>
+ // <div id="lightboxDetails">
+ // <div id="lightboxCaption"></div>
+ // <div id="keyboardMsg"></div>
+ // </div>
+ // </div>
+
+ var objBody = document.getElementsByTagName("body").item(0);
+
+ // create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)
+ var objOverlay = document.createElement("div");
+ objOverlay.setAttribute('id','overlay');
+ objOverlay.onclick = function () {hideLightbox(); return false;}
+ objOverlay.style.display = 'none';
+ objOverlay.style.position = 'absolute';
+ objOverlay.style.top = '0';
+ objOverlay.style.left = '0';
+ objOverlay.style.zIndex = '90';
+ objOverlay.style.width = '100%';
+ objBody.insertBefore(objOverlay, objBody.firstChild);
+
+ var arrayPageSize = getPageSize();
+ var arrayPageScroll = getPageScroll();
+
+ // preload and create loader image
+ var imgPreloader = new Image();
+
+ // if loader image found, create link to hide lightbox and create loadingimage
+ imgPreloader.onload=function(){
+
+ var objLoadingImageLink = document.createElement("a");
+ objLoadingImageLink.setAttribute('href','#');
+ objLoadingImageLink.onclick = function () {hideLightbox(); return false;}
+ objOverlay.appendChild(objLoadingImageLink);
+
+ var objLoadingImage = document.createElement("img");
+ objLoadingImage.src = loadingImage;
+ objLoadingImage.setAttribute('id','loadingImage');
+ objLoadingImage.style.position = 'absolute';
+ objLoadingImage.style.zIndex = '150';
+ objLoadingImageLink.appendChild(objLoadingImage);
+
+ imgPreloader.onload=function(){}; // clear onLoad, as IE will flip out w/animated gifs
+
+ return false;
+ }
+
+ imgPreloader.src = loadingImage;
+
+ // create lightbox div, same note about styles as above
+ var objLightbox = document.createElement("div");
+ objLightbox.setAttribute('id','lightbox');
+ objLightbox.style.display = 'none';
+ objLightbox.style.position = 'absolute';
+ objLightbox.style.zIndex = '100';
+ objBody.insertBefore(objLightbox, objOverlay.nextSibling);
+
+ // create link
+ var objLink = document.createElement("a");
+ objLink.setAttribute('href','#');
+ objLink.setAttribute('title','Click to close');
+ objLink.onclick = function () {hideLightbox(); return false;}
+ objLightbox.appendChild(objLink);
+
+ // preload and create close button image
+ var imgPreloadCloseButton = new Image();
+
+ // if close button image found,
+ imgPreloadCloseButton.onload=function(){
+
+ var objCloseButton = document.createElement("img");
+ objCloseButton.src = closeButton;
+ objCloseButton.setAttribute('id','closeButton');
+ objCloseButton.style.position = 'absolute';
+ objCloseButton.style.zIndex = '200';
+ objLink.appendChild(objCloseButton);
+
+ return false;
+ }
+
+ imgPreloadCloseButton.src = closeButton;
+
+ // create image
+ var objImage = document.createElement("img");
+ objImage.setAttribute('id','lightboxImage');
+ objLink.appendChild(objImage);
+
+ // create details div, a container for the caption and keyboard message
+ var objLightboxDetails = document.createElement("div");
+ objLightboxDetails.setAttribute('id','lightboxDetails');
+ objLightbox.appendChild(objLightboxDetails);
+
+ // create caption
+ var objCaption = document.createElement("div");
+ objCaption.setAttribute('id','lightboxCaption');
+ objCaption.style.display = 'none';
+ objLightboxDetails.appendChild(objCaption);
+
+ // create keyboard message
+ var objKeyboardMsg = document.createElement("div");
+ objKeyboardMsg.setAttribute('id','keyboardMsg');
+ objKeyboardMsg.innerHTML = 'press <kbd>x</kbd> to close';
+ objLightboxDetails.appendChild(objKeyboardMsg);
+
+
+}
+
+
+
+
+//
+// addLoadEvent()
+// Adds event to window.onload without overwriting currently assigned onload functions.
+// Function found at Simon Willison's weblog - http://simon.incutio.com/
+//
+function addLoadEvent(func)
+{
+ var oldonload = window.onload;
+ if (typeof window.onload != 'function'){
+ window.onload = func;
+ } else {
+ window.onload = function(){
+ oldonload();
+ func();
+ }
+ }
+
+}
+
+
+
+addLoadEvent(initLightbox); // run initLightbox onLoad
(DIR) diff --git a/web/public/javascripts/prototype.js b/web/app/assets/javascripts/prototype.js
(DIR) diff --git a/web/public/javascripts/rails.js b/web/app/assets/javascripts/rails.js
(DIR) diff --git a/web/app/assets/stylesheets/global.css.erb b/web/app/assets/stylesheets/global.css.erb
@@ -0,0 +1,556 @@
+/* global element overrides */
+
+body {
+ height: 100%;
+ background: #fff;
+ margin: 0;
+ padding: 0;
+ font-family: Tahoma, sans-serif;
+ font-size: 12px;
+ color: #555;
+}
+
+img {
+ border: none;
+}
+
+table {
+ border: none;
+ padding: 0;
+ margin: 0;
+}
+
+a:link, a:visited {
+ color: #003366;
+ text-decoration: none;
+}
+
+a:hover, a:active {
+ color: #cc0033;
+ text-decoration: underline;
+}
+
+h1 {
+ color: #333;
+ margin-top: 0;
+ padding-top: 0;
+ font-weight: normal;
+ font-size: 36px;
+}
+
+h2 {
+ font-size: 1.4em;
+ margin-bottom: 4px;
+}
+
+h3 {
+ font-size: 1.05em;
+ font-weight: normal;
+ font-style: italic;
+}
+
+/* unique elements */
+
+#content {
+ padding: 0;
+ margin: 0 auto;
+ width: 800px;
+ line-height: 1.5;
+}
+
+#main {
+ border: 0;
+ padding: 0;
+ background-color: white;
+ padding-top: 6px;
+ padding-left: 18px;
+ padding-right: 20px;
+ margin-top: -3px;
+ margin-bottom: -3px;
+}
+
+#main img {
+ max-width: 530px;
+}
+
+#footer {
+
+ margin: 0;
+ text-align: center;
+}
+
+#quote {
+ font-size: 12px;
+ padding: 10px;
+ margin: 0 auto;
+ width: 70%;
+ background: #dddddd;
+ margin-bottom: 10px;
+}
+
+#copyright {
+ padding: 10px;
+ text-align: center;
+ font-size: 10px;
+ color: #cccccc;
+}
+
+#header {
+ width: 800px;
+ margin: 0 auto 10px;
+ color: white;
+
+}
+
+#logo {
+ float: left;
+ margin-top: 0px;
+}
+
+
+
+#warvox_stats {
+ margin-top: 5px;
+ border: 1px solid black;
+ font-size: 12px;
+ color: #555;
+}
+
+#warvox_stats td {
+ margin-left: 20px;
+ padding: 0 10px 0px 6px;
+}
+
+
+#warvox_conf {
+ margin-top: 5px;
+ border: 1px solid black;
+ font-size: 12px;
+ color: #555;
+}
+
+#warvox_conf td {
+ margin-left: 20px;
+ padding: 0 10px 0px 6px;
+}
+
+#warvox_blacklist {
+ margin-top: 5px;
+ border: 1px solid black;
+ font-size: 12px;
+ color: #555;
+}
+
+#warvox_blacklist td {
+ margin-left: 20px;
+ padding: 0 10px 0px 6px;
+}
+
+#home_logo {
+ border: 0;
+}
+
+#home_links {
+
+}
+
+#home_intro, #home_intro td {
+ border: 0;
+}
+
+#home_table {
+ border: 0;
+ margin-top: 0px;
+}
+
+#home_table td {
+ border: 0;
+}
+
+#home_text {
+ padding-left: 20px;
+}
+
+#navwrap {
+ margin-top: 10px;
+ padding-top: 10px;
+ text-align: center;
+}
+
+#nav {
+ margin: 0 0 0 0 auto;
+ padding: 10px;
+}
+
+#sections_container {
+ font-size: 14px;
+}
+
+#sections_ul {
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+
+#sections_ul li {
+ display: inline;
+ list-style-type: none;
+}
+
+#sections_container a {
+ padding: 5px 10px 5px 10px;
+ line-height: 28px;
+}
+
+#sections_container a:link, #sections_container a:visited {
+ color: #fff;
+ background: black repeat-x top;
+ text-decoration: none;
+ font-variant: small-caps;
+}
+
+#sections_container a:hover {
+ color: #fff;
+ background: red repeat-x top;
+ text-decoration: none;
+ font-variant: small-caps;
+}
+
+#sections_active {
+ font-weight: bold;
+}
+
+#subsections_active {
+ font-weight: bold;
+}
+
+#subsections_container {
+ font-size: 12px;
+ padding-top: 5px;
+}
+
+#subsections_ul {
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+
+#subsections_ul li {
+ display: inline;
+ list-style-type: none;
+}
+
+#subsections_container a {
+ padding: 5px 10px 5px 10px;
+ line-height: 20px;
+}
+
+#subsections_container a:link, #subsections_container a:visited {
+ color: #fff;
+ background: #333333 repeat-x top;
+ text-decoration: none;
+ font-variant: small-caps;
+}
+
+#subsections_container a:hover {
+ color: #fff;
+ background: #440000 repeat-x top;
+ text-decoration: none;
+ font-variant: small-caps;
+}
+
+
+#calls_pie1 {
+ text-align: center;
+}
+#calls_pie2 {
+ text-align: center;
+}
+#calls_pie3 {
+ text-align: center;
+}
+
+/* non-unique elements */
+
+
+.title {
+ font-size: 20px;
+ font-weight: bold;
+ color: black;
+ font-variant: small-caps;
+}
+
+.active_job_row {
+ background: yellow;
+}
+
+.table_scaffold {
+ margin-top: 5px;
+ border: 1px solid black;
+ font-size: 12px;
+ color: #555;
+}
+
+.table_scaffold th {
+ font-size: 14px;
+ text-decoration: underline;
+}
+
+.table_scaffold td {
+ margin-left: 20px;
+ padding: 0 10px 0px 6px;
+ border: 1px solid #cccccc;
+}
+
+.header_item {
+ font-weight: bold;
+}
+
+.date-header {
+ background: url('<%= asset_path 'bluefade.jpg' %>') #222222 repeat-x top;
+ color: white;
+ padding: 2px;
+ margin: 2px;
+ font-weight: bold;
+ padding-left: 8px;
+ font-variant: small-caps;
+ border: 0;
+}
+
+.date-header-center {
+ background: url('<%= asset_path 'bluefade.jpg' %>') #8c0000 repeat-x top;
+ color: white;
+ padding: 2px;
+ margin: 2px;
+ font-weight: bold;
+ padding-left: 8px;
+ font-variant: small-caps;
+ text-align: center;
+ border: 0;
+}
+
+
+.balloon {
+ background: url('<%= asset_path 'balloon.jpg' %>') repeat-x top;
+ width: 277px;
+ height: 98px;
+ color: white;
+ margin: 40px auto;
+}
+
+.balloon_links {
+ float: left;
+ margin-top: 10px;
+ margin-left: 6px;
+
+}
+
+.balloon_links p {
+ font-size: 14px;
+ font-weight: bold;
+ margin: 0;
+}
+
+.balloon_links a, .balloon_links a:link, .balloon_links a:visited {
+ font-size: 12px;
+ color: white;
+ text-decoration: none;
+ margin-left: 12px;
+}
+
+.balloon_links a:hover, .balloon_links a:active {
+ color: yellow;
+ text-decoration: underline;
+}
+
+.balloon_icon {
+ float: left;
+ padding-top: 25px;
+ padding-left: 14px;
+}
+
+.box_full {
+ position: relative;
+ clear: both;
+ width: 790px;
+}
+
+#round_top {
+ padding: 0;
+ border: 0;
+ margin: 0;
+ height: 9px;
+ margin-bottom: -2px;
+ visibility: hidden;
+}
+
+#round_bot {
+ padding: 0;
+ border: 0;
+ margin-top: -2px;
+ height: 15px;
+ visibility: hidden;
+}
+
+.box_full p {
+ line-height: 1.5em;
+}
+
+
+.intro {
+ font-size: 14px;
+}
+
+.center {
+ text-align: center;
+}
+
+.code {
+ font-family: fixed, courier new;
+ color: black;
+ background: #dddddd;
+ padding: 0.25em 0.25em 0.25em 0.25em;
+}
+
+.fatp {
+ margin: 2.0em 0 0.5em;
+}
+
+.announce {
+ padding: 0px 20px 0px 20px;
+ line-height: 1.5;
+ font-size: 12px;
+ font-weight: bold;
+}
+
+.vulnTitle {
+ font-weight: bold;
+ font-size: 10pt;
+ padding-bottom: 2em;
+}
+
+.vulnHeader {
+ font-weight: bold;
+}
+
+.vulnText {
+ padding-bottom: 1em;
+}
+
+.vulnInfoTable {
+ background: #dddddd;
+
+}
+
+.vulnInfoHeader {
+ font-weight: bold;
+}
+
+.vulnInfoData {
+
+}
+
+.talk_title {
+ font-family: verdana, sans-serif, arial, helvetica;
+ font-size: 9pt;
+ padding: 0.1em 0.5em 0.15em .5em;
+ font-weight: bold;
+}
+
+.materials {
+ background: #dddddd;
+ padding: 10px 10px 10px 10px;
+ border: 1px solid black;
+}
+
+
+
+.level1
+{
+ list-style: none;
+ text-align: left;
+ padding: 0em 0em 1em 0em;
+ font-size: 16px;
+ font-weight: bold;
+}
+.level1 li
+{
+ padding: 1em .25em 0.25em 0.25em;
+}
+
+.level2
+{
+ list-style: circle;
+ text-align: left;
+ padding: 0em 0.25em 0.25em 4em;
+}
+.level2 li
+{
+ padding: 0.25em .25em 0.25em 0.25em;
+ font-size: 14px;
+ font-weight: bold;
+}
+
+.level3
+{
+ list-style: square;
+ text-align: left;
+ padding: 0em 0.25em 0.25em 4em;
+}
+.level3 li
+{
+ padding: 0.25em .25em 0.25em 0.25em;
+}
+
+
+
+.boxTable
+{
+ border-left-style: solid;
+ border-top-style: solid;
+ border-right-style: solid;
+ border-bottom-style: solid;
+ border-color: #dddddd;
+ font-family: verdana, sans-serif;
+ font-size: 8pt;
+ background-color: #dddddd;
+}
+.boxInnerTable
+{
+ font-family: verdana, sans-serif;
+ font-size: 8pt;
+}
+.boxTdHeader
+{
+ border-width: 0 0 0 0;
+ border-color: #dddddd;
+ border-left-style: solid;
+ border-top-style: solid;
+ border-right-style: solid;
+ border-bottom-style: solid;
+ background-color: #dddddd;
+ color: black;
+ height: 20px;
+ font-weight: bold
+}
+.boxTd
+{
+ border-width: 0 0 0 0;
+ border-left-style: solid;
+ border-top-style: solid;
+ border-right-style: solid;
+ border-bottom-style: solid;
+}
+.boxTd1
+{
+ background-color: #eeeeee;
+}
+.boxTd2
+{
+ background-color: #eeeeee;
+}
+.boxTh
+{
+ background-color: #dddddd;
+}
+
(DIR) diff --git a/web/public/stylesheets/ie7.css b/web/app/assets/stylesheets/ie7.css
(DIR) diff --git a/web/public/stylesheets/lightbox.css b/web/app/assets/stylesheets/lightbox.css
(DIR) diff --git a/web/public/stylesheets/overlay.png b/web/app/assets/stylesheets/overlay.png
Binary files differ.
(DIR) diff --git a/web/public/stylesheets/scaffold.css b/web/app/assets/stylesheets/scaffold.css
(DIR) diff --git a/web/app/views/analyze/view.html.erb b/web/app/views/analyze/view.html.erb
@@ -22,12 +22,12 @@
<object
type="application/x-shockwave-flash"
- data="/images/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"
+ data="/assets/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"
width="20"
height="17"
style="margin-bottom: -5px;"
>
- <param name="movie" value="/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"></param>
+ <param name="movie" value="/assets/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"></param>
<param name="wmode" value="transparent"></param>
</object>
<b><%= dial_result.number %></b>
(DIR) diff --git a/web/app/views/analyze/view_matches.html.erb b/web/app/views/analyze/view_matches.html.erb
@@ -13,12 +13,12 @@
<object
type="application/x-shockwave-flash"
- data="/images/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"
+ data="/assets/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"
width="20"
height="17"
style="margin-bottom: -5px;"
>
- <param name="movie" value="/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"></param>
+ <param name="movie" value="/assets/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"></param>
<param name="wmode" value="transparent"></param>
</object>
@@ -66,12 +66,12 @@
<object
type="application/x-shockwave-flash"
- data="/images/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"
+ data="/assets/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"
width="20"
height="17"
style="margin-bottom: -5px;"
>
- <param name="movie" value="/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"></param>
+ <param name="movie" value="/assets/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id, dial_result.id, "mp3")%>"></param>
<param name="wmode" value="transparent"></param>
</object>
(DIR) diff --git a/web/app/views/layouts/warvox.html.erb b/web/app/views/layouts/warvox.html.erb
@@ -2,12 +2,10 @@
<html>
<head>
<title><%= @title || "WarVOX" %></title>
- <%= stylesheet_link_tag :all %>
- <%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
- <%= stylesheet_link_tag 'global', 'lightbox' %>
+ <%= stylesheet_link_tag 'global' %>
<!--[if IE 7]><%= stylesheet_link_tag 'ie7' %><![endif]-->
- <%= javascript_include_tag 'custom', 'prototype', 'effects', 'FusionCharts', 'lightbox' %>
+ <%= javascript_include_tag 'jquery' %>
</head>
<body>
@@ -17,7 +15,7 @@
<div id="content">
<div class="box_full">
- <img src="/images/round_top.png" id="round_top" alt=""/>
+ <img src="<%= asset_path('round_top.png') %>" id="round_top" alt=""/>
<div id="main">
<%= yield %>
<br/><br/>
@@ -27,7 +25,7 @@
</div>
</div>
- <img src="/images/round_bot.png" id="round_bot" alt=""/>
+ <img src="<%= asset_path('round_bot.png') %>" id="round_bot" alt=""/>
</div>
</div>
(DIR) diff --git a/web/app/views/shared/_header.html.erb b/web/app/views/shared/_header.html.erb
@@ -1,7 +1,7 @@
<div id="header">
<span width='50%'>
- <a href="/"><img id="logo" src="/images/logo.png" alt="WarVOX v<%= WarVOX::VERSION %>" border="0"/></a>
+ <a href="/"><img id="logo" src="/assets/logo.png" alt="WarVOX v<%= WarVOX::VERSION %>" border="0"/></a>
</span>
<span width='50%'>
(DIR) diff --git a/web/config/application.rb b/web/config/application.rb
@@ -1,14 +1,16 @@
require File.expand_path('../boot', __FILE__)
+require 'rails/all'
# Bootstrap the WarVOX code base
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
require 'warvox'
-require 'rails/all'
-
-# If you have a Gemfile, require the gems listed there, including any gems
-# you've limited to :test, :development, or :production.
-Bundler.require(:default, Rails.env) if defined?(Bundler)
+if defined?(Bundler)
+ # If you precompile assets before deploying to production, use this line
+ Bundler.require(*Rails.groups(:assets => %w(development test)))
+ # If you want your assets lazily compiled in production, use this line
+ # Bundler.require(:default, :assets, Rails.env)
+end
module Web
class Application < Rails::Application
@@ -34,13 +36,33 @@ module Web
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
- # JavaScript files you want as :defaults (application.js is always included).
- # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
-
# Configure the default encoding used in templates for Ruby 1.9.
config.encoding = "utf-8"
# Configure sensitive parameters which will be filtered from the log file.
+ config.filter_parameters += [:password, :pass]
+
+ # Enable escaping HTML in JSON.
+ config.active_support.escape_html_entities_in_json = true
+
+ # Use SQL instead of Active Record's schema dumper when creating the database.
+ # This is necessary if your schema can't be completely dumped by the schema dumper,
+ # like if you have constraints or database-specific column types
+ # config.active_record.schema_format = :sql
+
+ # Enforce whitelist mode for mass assignment.
+ # This will create an empty whitelist of attributes available for mass-assignment for all models
+ # in your app. As such, your models will need to explicitly whitelist or blacklist accessible
+ # parameters by using an attr_accessible or attr_protected declaration.
+ config.active_record.whitelist_attributes = true
+
+ # Enable the asset pipeline
+ config.assets.enabled = true
+
+ # Version of your assets, change this if you want to expire all your assets
+ config.assets.version = '1.0'
+
+ # Configure sensitive parameters which will be filtered from the log file.
config.filter_parameters += [:password, :pass]
config.session_store :cookie_store, :key => "_warvox"
(DIR) diff --git a/web/config/boot.rb b/web/config/boot.rb
@@ -1,13 +1,6 @@
require 'rubygems'
# Set up gems listed in the Gemfile.
-gemfile = File.expand_path('../../Gemfile', __FILE__)
-begin
- ENV['BUNDLE_GEMFILE'] = gemfile
- require 'bundler'
- Bundler.setup
-rescue Bundler::GemNotFound => e
- STDERR.puts e.message
- STDERR.puts "Try running `bundle install`."
- exit!
-end if File.exist?(gemfile)
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
+
+require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
(DIR) diff --git a/web/config/database.yml b/web/config/database.yml
@@ -8,3 +8,14 @@ production:
pool: 100
timeout: 5
+development:
+ adapter: postgresql
+ database: warvox
+ username: warvox
+ password: "<yourpass>"
+ host: 127.0.0.1
+ port: 5433
+ pool: 100
+ timeout: 5
+
+
(DIR) diff --git a/web/config/environments/development.rb b/web/config/environments/development.rb
@@ -1,9 +1,9 @@
Web::Application.configure do
- # Settings specified here will take precedence over those in config/environment.rb
+ # 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 webserver when you make code changes.
+ # 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
# Log error messages when you accidentally call methods on nil.
@@ -11,7 +11,6 @@ Web::Application.configure do
# Show full error reports and disable caching
config.consider_all_requests_local = true
- config.action_view.debug_rjs = true
config.action_controller.perform_caching = false
# Don't care if the mailer can't send
@@ -22,5 +21,17 @@ Web::Application.configure do
# Only use best-standards-support built into browsers
config.action_dispatch.best_standards_support = :builtin
-end
+ # Raise exception on mass assignment protection for Active Record models
+ config.active_record.mass_assignment_sanitizer = :strict
+
+ # Log the query plan for queries taking more than this (works
+ # with SQLite, MySQL, and PostgreSQL)
+ config.active_record.auto_explain_threshold_in_seconds = 0.5
+
+ # Do not compress assets
+ config.assets.compress = false
+
+ # Expands the lines which load the assets
+ config.assets.debug = true
+end
(DIR) diff --git a/web/config/environments/production.rb b/web/config/environments/production.rb
@@ -1,7 +1,6 @@
Web::Application.configure do
- # Settings specified here will take precedence over those in config/environment.rb
+ # Settings specified here will take precedence over those in config/application.rb
- # The production environment is meant for finished, "live" apps.
# Code is not reloaded between requests
config.cache_classes = true
@@ -9,31 +8,46 @@ Web::Application.configure do
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
- # Specifies the header that your server uses for sending files
- config.action_dispatch.x_sendfile_header = "X-Sendfile"
+ # Disable Rails's static asset server (Apache or nginx will already do this)
+ config.serve_static_assets = true
+
+ # Compress JavaScripts and CSS
+ config.assets.compress = false
+
+ # Don't fallback to assets pipeline if a precompiled asset is missed
+ config.assets.compile = true
- # For nginx:
- # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
+ # Generate digests for assets URLs
+ config.assets.digest = true
+
+ # Defaults to nil and saved in location specified by config.assets.prefix
+ # config.assets.manifest = YOUR_PATH
+
+ # 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
- # If you have no front-end server that supports something like X-Sendfile,
- # just comment this out and Rails will serve the files
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+ # config.force_ssl = true
# See everything in the log (default is :info)
- config.log_level = :error
+ config.log_level = :debug
+
+ # Prepend all log lines with the following tags
+ # config.log_tags = [ :subdomain, :uuid ]
# Use a different logger for distributed setups
- # config.logger = SyslogLogger.new
+ # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
# Use a different cache store in production
# config.cache_store = :mem_cache_store
- # Disable Rails's static asset server
- # In production, Apache or nginx will already do this
- config.serve_static_assets = true
-
- # Enable serving of images, stylesheets, and javascripts from an asset server
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server
# config.action_controller.asset_host = "http://assets.example.com"
+ # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
+ config.assets.precompile += %w( jquery.js prototype.js effects.js FusionCharts.js lightbox.js )
+
# Disable delivery errors, bad email addresses will be ignored
# config.action_mailer.raise_delivery_errors = false
@@ -46,5 +60,8 @@ Web::Application.configure do
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
-end
+ # Log the query plan for queries taking more than this (works
+ # with SQLite, MySQL, and PostgreSQL)
+ # config.active_record.auto_explain_threshold_in_seconds = 0.5
+end
(DIR) diff --git a/web/config/initializers/inflections.rb b/web/config/initializers/inflections.rb
@@ -8,3 +8,8 @@
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )
# end
+#
+# These inflection rules are supported but not enabled by default:
+# ActiveSupport::Inflector.inflections do |inflect|
+# inflect.acronym 'RESTful'
+# end
(DIR) diff --git a/web/config/initializers/secret_token.rb b/web/config/initializers/secret_token.rb
@@ -1,7 +1 @@
-# Be sure to restart your server when you modify this file.
-
-# Your secret key for verifying the integrity of signed cookies.
-# If you change this key, all old signed cookies will become invalid!
-# Make sure the secret is at least 30 characters and all random,
-# no regular words or you'll be exposed to dictionary attacks.
Web::Application.config.secret_token = WarVOX::Config.load_session_key
(DIR) diff --git a/web/config/initializers/session_store.rb b/web/config/initializers/session_store.rb
@@ -1,8 +1,8 @@
# Be sure to restart your server when you modify this file.
-Web::Application.config.session_store :cookie_store, :key => '_web_session'
+Web::Application.config.session_store :cookie_store, key: '_warvox_session'
# Use the database for sessions instead of the cookie-based default,
# which shouldn't be used to store highly confidential information
-# (create the session table with "rake db:sessions:create")
-# Web::Application.config.session_store :active_record_store
+# (create the session table with "rails generate session_migration")
+# Ttt::Application.config.session_store :active_record_store
(DIR) diff --git a/web/config/initializers/wrap_parameters.rb b/web/config/initializers/wrap_parameters.rb
@@ -0,0 +1,14 @@
+# Be sure to restart your server when you modify this file.
+#
+# This file contains settings for ActionController::ParamsWrapper which
+# is enabled by default.
+
+# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
+ActiveSupport.on_load(:action_controller) do
+ wrap_parameters format: [:json]
+end
+
+# Disable root element in JSON by default.
+ActiveSupport.on_load(:active_record) do
+ self.include_root_in_json = false
+end
(DIR) diff --git a/web/db/schema.rb b/web/db/schema.rb
@@ -1,3 +1,4 @@
+# encoding: UTF-8
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
@@ -21,8 +22,8 @@ ActiveRecord::Schema.define(:version => 20110801000003) do
t.datetime "started_at"
t.datetime "completed_at"
t.boolean "processed"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.text "cid_mask"
end
@@ -36,8 +37,8 @@ ActiveRecord::Schema.define(:version => 20110801000003) do
t.integer "ringtime"
t.text "rawfile"
t.boolean "processed"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.datetime "processed_at"
t.text "cid"
t.float "peak_freq"
@@ -65,20 +66,9 @@ ActiveRecord::Schema.define(:version => 20110801000003) do
t.text "user"
t.text "pass"
t.integer "lines"
- t.datetime "created_at"
- t.datetime "updated_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.boolean "enabled"
end
- create_table "signatures", :force => true do |t|
- t.datetime "created_at"
- t.datetime "updated_at"
- t.string "name"
- t.string "category"
- t.text "description"
- t.string "mode"
- t.string "print", :limit => nil
- t.text "rules"
- end
-
end
(DIR) diff --git a/web/public/javascripts/lightbox.js b/web/public/javascripts/lightbox.js
@@ -1,426 +0,0 @@
-/*
- Lightbox JS: Fullsize Image Overlays
- by Lokesh Dhakar - http://www.huddletogether.com
-
- For more information on this script, visit:
- http://huddletogether.com/projects/lightbox/
-
- Script featured on Dynamic Drive code library Jan 24th, 06':
- http://www.dynamicdrive.com
-
- Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
- (basically, do anything you want, just leave my name and link)
-
- Table of Contents
- -----------------
- Configuration
-
- Functions
- - getPageScroll()
- - getPageSize()
- - pause()
- - getKey()
- - listenKey()
- - showLightbox()
- - hideLightbox()
- - initLightbox()
- - addLoadEvent()
-
- Function Calls
- - addLoadEvent(initLightbox)
-
-*/
-
-
-
-//
-// Configuration
-//
-
-// If you would like to use a custom loading image or close button reference them in the next two lines.
-var loadingImage = '/images/loading.gif';
-var closeButton = '/images/close.gif';
-
-
-
-
-
-//
-// getPageScroll()
-// Returns array with x,y page scroll values.
-// Core code from - quirksmode.org
-//
-function getPageScroll(){
-
- var yScroll;
-
- if (self.pageYOffset) {
- yScroll = self.pageYOffset;
- } else if (document.documentElement && document.documentElement.scrollTop){ // Explorer 6 Strict
- yScroll = document.documentElement.scrollTop;
- } else if (document.body) {// all other Explorers
- yScroll = document.body.scrollTop;
- }
-
- arrayPageScroll = new Array('',yScroll)
- return arrayPageScroll;
-}
-
-
-
-//
-// getPageSize()
-// Returns array with page width, height and window width, height
-// Core code from - quirksmode.org
-// Edit for Firefox by pHaez
-//
-function getPageSize(){
-
- var xScroll, yScroll;
-
- if (window.innerHeight && window.scrollMaxY) {
- xScroll = document.body.scrollWidth;
- yScroll = window.innerHeight + window.scrollMaxY;
- } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
- xScroll = document.body.scrollWidth;
- yScroll = document.body.scrollHeight;
- } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
- xScroll = document.body.offsetWidth;
- yScroll = document.body.offsetHeight;
- }
-
- var windowWidth, windowHeight;
- if (self.innerHeight) { // all except Explorer
- windowWidth = self.innerWidth;
- windowHeight = self.innerHeight;
- } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
- windowWidth = document.documentElement.clientWidth;
- windowHeight = document.documentElement.clientHeight;
- } else if (document.body) { // other Explorers
- windowWidth = document.body.clientWidth;
- windowHeight = document.body.clientHeight;
- }
-
- // for small pages with total height less then height of the viewport
- if(yScroll < windowHeight){
- pageHeight = windowHeight;
- } else {
- pageHeight = yScroll;
- }
-
- // for small pages with total width less then width of the viewport
- if(xScroll < windowWidth){
- pageWidth = windowWidth;
- } else {
- pageWidth = xScroll;
- }
-
-
- arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
- return arrayPageSize;
-}
-
-
-//
-// pause(numberMillis)
-// Pauses code execution for specified time. Uses busy code, not good.
-// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
-//
-function pause(numberMillis) {
- var now = new Date();
- var exitTime = now.getTime() + numberMillis;
- while (true) {
- now = new Date();
- if (now.getTime() > exitTime)
- return;
- }
-}
-
-//
-// getKey(key)
-// Gets keycode. If 'x' is pressed then it hides the lightbox.
-//
-
-function getKey(e){
- if (e == null) { // ie
- keycode = event.keyCode;
- } else { // mozilla
- keycode = e.which;
- }
- key = String.fromCharCode(keycode).toLowerCase();
-
- if(key == 'x'){ hideLightbox(); }
-}
-
-
-//
-// listenKey()
-//
-function listenKey () { document.onkeypress = getKey; }
-
-
-//
-// showLightbox()
-// Preloads images. Pleaces new image in lightbox then centers and displays.
-//
-function showLightbox(objLink)
-{
- // prep objects
- var objOverlay = document.getElementById('overlay');
- var objLightbox = document.getElementById('lightbox');
- var objCaption = document.getElementById('lightboxCaption');
- var objImage = document.getElementById('lightboxImage');
- var objLoadingImage = document.getElementById('loadingImage');
- var objLightboxDetails = document.getElementById('lightboxDetails');
-
-
- var arrayPageSize = getPageSize();
- var arrayPageScroll = getPageScroll();
-
- // center loadingImage if it exists
- if (objLoadingImage) {
- objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - objLoadingImage.height) / 2) + 'px');
- objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoadingImage.width) / 2) + 'px');
- objLoadingImage.style.display = 'block';
- }
-
- // set height of Overlay to take up whole page and show
- objOverlay.style.height = (arrayPageSize[1] + 'px');
- objOverlay.style.display = 'block';
-
- // preload image
- imgPreload = new Image();
-
- imgPreload.onload=function(){
- objImage.src = objLink.href;
-
- // center lightbox and make sure that the top and left values are not negative
- // and the image placed outside the viewport
- var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - imgPreload.height) / 2);
- var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width) / 2);
-
- objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTop + "px";
- objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightboxLeft + "px";
-
-
- objLightboxDetails.style.width = imgPreload.width + 'px';
-
- if(objLink.getAttribute('title')){
- objCaption.style.display = 'block';
- //objCaption.style.width = imgPreload.width + 'px';
- objCaption.innerHTML = objLink.getAttribute('title');
- } else {
- objCaption.style.display = 'none';
- }
-
- // A small pause between the image loading and displaying is required with IE,
- // this prevents the previous image displaying for a short burst causing flicker.
- if (navigator.appVersion.indexOf("MSIE")!=-1){
- pause(250);
- }
-
- if (objLoadingImage) { objLoadingImage.style.display = 'none'; }
- objLightbox.style.display = 'block';
-
- // After image is loaded, update the overlay height as the new image might have
- // increased the overall page height.
- arrayPageSize = getPageSize();
- objOverlay.style.height = (arrayPageSize[1] + 'px');
-
- // Check for 'x' keypress
- listenKey();
-
- return false;
- }
-
- imgPreload.src = objLink.href;
-
-}
-
-
-
-
-
-//
-// hideLightbox()
-//
-function hideLightbox()
-{
- // get objects
- objOverlay = document.getElementById('overlay');
- objLightbox = document.getElementById('lightbox');
-
- // hide lightbox and overlay
- objOverlay.style.display = 'none';
- objLightbox.style.display = 'none';
-
- // disable keypress listener
- document.onkeypress = '';
-}
-
-
-
-
-//
-// initLightbox()
-// Function runs on window load, going through link tags looking for rel="lightbox".
-// These links receive onclick events that enable the lightbox display for their targets.
-// The function also inserts html markup at the top of the page which will be used as a
-// container for the overlay pattern and the inline image.
-//
-function initLightbox()
-{
-
- if (!document.getElementsByTagName){ return; }
- var anchors = document.getElementsByTagName("a");
-
- // loop through all anchor tags
- for (var i=0; i<anchors.length; i++){
- var anchor = anchors[i];
-
- if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){
- anchor.onclick = function () {showLightbox(this); return false;}
- }
- }
-
- // the rest of this code inserts html at the top of the page that looks like this:
- //
- // <div id="overlay">
- // <a href="#" onclick="hideLightbox(); return false;"><img id="loadingImage" /></a>
- // </div>
- // <div id="lightbox">
- // <a href="#" onclick="hideLightbox(); return false;" title="Click anywhere to close image">
- // <img id="closeButton" />
- // <img id="lightboxImage" />
- // </a>
- // <div id="lightboxDetails">
- // <div id="lightboxCaption"></div>
- // <div id="keyboardMsg"></div>
- // </div>
- // </div>
-
- var objBody = document.getElementsByTagName("body").item(0);
-
- // create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)
- var objOverlay = document.createElement("div");
- objOverlay.setAttribute('id','overlay');
- objOverlay.onclick = function () {hideLightbox(); return false;}
- objOverlay.style.display = 'none';
- objOverlay.style.position = 'absolute';
- objOverlay.style.top = '0';
- objOverlay.style.left = '0';
- objOverlay.style.zIndex = '90';
- objOverlay.style.width = '100%';
- objBody.insertBefore(objOverlay, objBody.firstChild);
-
- var arrayPageSize = getPageSize();
- var arrayPageScroll = getPageScroll();
-
- // preload and create loader image
- var imgPreloader = new Image();
-
- // if loader image found, create link to hide lightbox and create loadingimage
- imgPreloader.onload=function(){
-
- var objLoadingImageLink = document.createElement("a");
- objLoadingImageLink.setAttribute('href','#');
- objLoadingImageLink.onclick = function () {hideLightbox(); return false;}
- objOverlay.appendChild(objLoadingImageLink);
-
- var objLoadingImage = document.createElement("img");
- objLoadingImage.src = loadingImage;
- objLoadingImage.setAttribute('id','loadingImage');
- objLoadingImage.style.position = 'absolute';
- objLoadingImage.style.zIndex = '150';
- objLoadingImageLink.appendChild(objLoadingImage);
-
- imgPreloader.onload=function(){}; // clear onLoad, as IE will flip out w/animated gifs
-
- return false;
- }
-
- imgPreloader.src = loadingImage;
-
- // create lightbox div, same note about styles as above
- var objLightbox = document.createElement("div");
- objLightbox.setAttribute('id','lightbox');
- objLightbox.style.display = 'none';
- objLightbox.style.position = 'absolute';
- objLightbox.style.zIndex = '100';
- objBody.insertBefore(objLightbox, objOverlay.nextSibling);
-
- // create link
- var objLink = document.createElement("a");
- objLink.setAttribute('href','#');
- objLink.setAttribute('title','Click to close');
- objLink.onclick = function () {hideLightbox(); return false;}
- objLightbox.appendChild(objLink);
-
- // preload and create close button image
- var imgPreloadCloseButton = new Image();
-
- // if close button image found,
- imgPreloadCloseButton.onload=function(){
-
- var objCloseButton = document.createElement("img");
- objCloseButton.src = closeButton;
- objCloseButton.setAttribute('id','closeButton');
- objCloseButton.style.position = 'absolute';
- objCloseButton.style.zIndex = '200';
- objLink.appendChild(objCloseButton);
-
- return false;
- }
-
- imgPreloadCloseButton.src = closeButton;
-
- // create image
- var objImage = document.createElement("img");
- objImage.setAttribute('id','lightboxImage');
- objLink.appendChild(objImage);
-
- // create details div, a container for the caption and keyboard message
- var objLightboxDetails = document.createElement("div");
- objLightboxDetails.setAttribute('id','lightboxDetails');
- objLightbox.appendChild(objLightboxDetails);
-
- // create caption
- var objCaption = document.createElement("div");
- objCaption.setAttribute('id','lightboxCaption');
- objCaption.style.display = 'none';
- objLightboxDetails.appendChild(objCaption);
-
- // create keyboard message
- var objKeyboardMsg = document.createElement("div");
- objKeyboardMsg.setAttribute('id','keyboardMsg');
- objKeyboardMsg.innerHTML = 'press <kbd>x</kbd> to close';
- objLightboxDetails.appendChild(objKeyboardMsg);
-
-
-}
-
-
-
-
-//
-// addLoadEvent()
-// Adds event to window.onload without overwriting currently assigned onload functions.
-// Function found at Simon Willison's weblog - http://simon.incutio.com/
-//
-function addLoadEvent(func)
-{
- var oldonload = window.onload;
- if (typeof window.onload != 'function'){
- window.onload = func;
- } else {
- window.onload = function(){
- oldonload();
- func();
- }
- }
-
-}
-
-
-
-addLoadEvent(initLightbox); // run initLightbox onLoad
(DIR) diff --git a/web/public/stylesheets/global.css b/web/public/stylesheets/global.css
@@ -1,556 +0,0 @@
-/* global element overrides */
-
-body {
- height: 100%;
- background: #fff;
- margin: 0;
- padding: 0;
- font-family: Tahoma, sans-serif;
- font-size: 12px;
- color: #555;
-}
-
-img {
- border: none;
-}
-
-table {
- border: none;
- padding: 0;
- margin: 0;
-}
-
-a:link, a:visited {
- color: #003366;
- text-decoration: none;
-}
-
-a:hover, a:active {
- color: #cc0033;
- text-decoration: underline;
-}
-
-h1 {
- color: #333;
- margin-top: 0;
- padding-top: 0;
- font-weight: normal;
- font-size: 36px;
-}
-
-h2 {
- font-size: 1.4em;
- margin-bottom: 4px;
-}
-
-h3 {
- font-size: 1.05em;
- font-weight: normal;
- font-style: italic;
-}
-
-/* unique elements */
-
-#content {
- padding: 0;
- margin: 0 auto;
- width: 800px;
- line-height: 1.5;
-}
-
-#main {
- border: 0;
- padding: 0;
- background-color: white;
- padding-top: 6px;
- padding-left: 18px;
- padding-right: 20px;
- margin-top: -3px;
- margin-bottom: -3px;
-}
-
-#main img {
- max-width: 530px;
-}
-
-#footer {
-
- margin: 0;
- text-align: center;
-}
-
-#quote {
- font-size: 12px;
- padding: 10px;
- margin: 0 auto;
- width: 70%;
- background: #dddddd;
- margin-bottom: 10px;
-}
-
-#copyright {
- padding: 10px;
- text-align: center;
- font-size: 10px;
- color: #cccccc;
-}
-
-#header {
- width: 800px;
- margin: 0 auto 10px;
- color: white;
-
-}
-
-#logo {
- float: left;
- margin-top: 0px;
-}
-
-
-
-#warvox_stats {
- margin-top: 5px;
- border: 1px solid black;
- font-size: 12px;
- color: #555;
-}
-
-#warvox_stats td {
- margin-left: 20px;
- padding: 0 10px 0px 6px;
-}
-
-
-#warvox_conf {
- margin-top: 5px;
- border: 1px solid black;
- font-size: 12px;
- color: #555;
-}
-
-#warvox_conf td {
- margin-left: 20px;
- padding: 0 10px 0px 6px;
-}
-
-#warvox_blacklist {
- margin-top: 5px;
- border: 1px solid black;
- font-size: 12px;
- color: #555;
-}
-
-#warvox_blacklist td {
- margin-left: 20px;
- padding: 0 10px 0px 6px;
-}
-
-#home_logo {
- border: 0;
-}
-
-#home_links {
-
-}
-
-#home_intro, #home_intro td {
- border: 0;
-}
-
-#home_table {
- border: 0;
- margin-top: 0px;
-}
-
-#home_table td {
- border: 0;
-}
-
-#home_text {
- padding-left: 20px;
-}
-
-#navwrap {
- margin-top: 10px;
- padding-top: 10px;
- text-align: center;
-}
-
-#nav {
- margin: 0 0 0 0 auto;
- padding: 10px;
-}
-
-#sections_container {
- font-size: 14px;
-}
-
-#sections_ul {
- margin: 0;
- padding: 0;
- white-space: nowrap;
-}
-
-#sections_ul li {
- display: inline;
- list-style-type: none;
-}
-
-#sections_container a {
- padding: 5px 10px 5px 10px;
- line-height: 28px;
-}
-
-#sections_container a:link, #sections_container a:visited {
- color: #fff;
- background: black repeat-x top;
- text-decoration: none;
- font-variant: small-caps;
-}
-
-#sections_container a:hover {
- color: #fff;
- background: red repeat-x top;
- text-decoration: none;
- font-variant: small-caps;
-}
-
-#sections_active {
- font-weight: bold;
-}
-
-#subsections_active {
- font-weight: bold;
-}
-
-#subsections_container {
- font-size: 12px;
- padding-top: 5px;
-}
-
-#subsections_ul {
- margin: 0;
- padding: 0;
- white-space: nowrap;
-}
-
-#subsections_ul li {
- display: inline;
- list-style-type: none;
-}
-
-#subsections_container a {
- padding: 5px 10px 5px 10px;
- line-height: 20px;
-}
-
-#subsections_container a:link, #subsections_container a:visited {
- color: #fff;
- background: #333333 repeat-x top;
- text-decoration: none;
- font-variant: small-caps;
-}
-
-#subsections_container a:hover {
- color: #fff;
- background: #440000 repeat-x top;
- text-decoration: none;
- font-variant: small-caps;
-}
-
-
-#calls_pie1 {
- text-align: center;
-}
-#calls_pie2 {
- text-align: center;
-}
-#calls_pie3 {
- text-align: center;
-}
-
-/* non-unique elements */
-
-
-.title {
- font-size: 20px;
- font-weight: bold;
- color: black;
- font-variant: small-caps;
-}
-
-.active_job_row {
- background: yellow;
-}
-
-.table_scaffold {
- margin-top: 5px;
- border: 1px solid black;
- font-size: 12px;
- color: #555;
-}
-
-.table_scaffold th {
- font-size: 14px;
- text-decoration: underline;
-}
-
-.table_scaffold td {
- margin-left: 20px;
- padding: 0 10px 0px 6px;
- border: 1px solid #cccccc;
-}
-
-.header_item {
- font-weight: bold;
-}
-
-.date-header {
- background: url('/images/bluefade.jpg') #222222 repeat-x top;
- color: white;
- padding: 2px;
- margin: 2px;
- font-weight: bold;
- padding-left: 8px;
- font-variant: small-caps;
- border: 0;
-}
-
-.date-header-center {
- background: url('/images/bluefade.jpg') #8c0000 repeat-x top;
- color: white;
- padding: 2px;
- margin: 2px;
- font-weight: bold;
- padding-left: 8px;
- font-variant: small-caps;
- text-align: center;
- border: 0;
-}
-
-
-.balloon {
- background: url('/images/balloon.png') repeat-x top;
- width: 277px;
- height: 98px;
- color: white;
- margin: 40px auto;
-}
-
-.balloon_links {
- float: left;
- margin-top: 10px;
- margin-left: 6px;
-
-}
-
-.balloon_links p {
- font-size: 14px;
- font-weight: bold;
- margin: 0;
-}
-
-.balloon_links a, .balloon_links a:link, .balloon_links a:visited {
- font-size: 12px;
- color: white;
- text-decoration: none;
- margin-left: 12px;
-}
-
-.balloon_links a:hover, .balloon_links a:active {
- color: yellow;
- text-decoration: underline;
-}
-
-.balloon_icon {
- float: left;
- padding-top: 25px;
- padding-left: 14px;
-}
-
-.box_full {
- position: relative;
- clear: both;
- width: 790px;
-}
-
-#round_top {
- padding: 0;
- border: 0;
- margin: 0;
- height: 9px;
- margin-bottom: -2px;
- visibility: hidden;
-}
-
-#round_bot {
- padding: 0;
- border: 0;
- margin-top: -2px;
- height: 15px;
- visibility: hidden;
-}
-
-.box_full p {
- line-height: 1.5em;
-}
-
-
-.intro {
- font-size: 14px;
-}
-
-.center {
- text-align: center;
-}
-
-.code {
- font-family: fixed, courier new;
- color: black;
- background: #dddddd;
- padding: 0.25em 0.25em 0.25em 0.25em;
-}
-
-.fatp {
- margin: 2.0em 0 0.5em;
-}
-
-.announce {
- padding: 0px 20px 0px 20px;
- line-height: 1.5;
- font-size: 12px;
- font-weight: bold;
-}
-
-.vulnTitle {
- font-weight: bold;
- font-size: 10pt;
- padding-bottom: 2em;
-}
-
-.vulnHeader {
- font-weight: bold;
-}
-
-.vulnText {
- padding-bottom: 1em;
-}
-
-.vulnInfoTable {
- background: #dddddd;
-
-}
-
-.vulnInfoHeader {
- font-weight: bold;
-}
-
-.vulnInfoData {
-
-}
-
-.talk_title {
- font-family: verdana, sans-serif, arial, helvetica;
- font-size: 9pt;
- padding: 0.1em 0.5em 0.15em .5em;
- font-weight: bold;
-}
-
-.materials {
- background: #dddddd;
- padding: 10px 10px 10px 10px;
- border: 1px solid black;
-}
-
-
-
-.level1
-{
- list-style: none;
- text-align: left;
- padding: 0em 0em 1em 0em;
- font-size: 16px;
- font-weight: bold;
-}
-.level1 li
-{
- padding: 1em .25em 0.25em 0.25em;
-}
-
-.level2
-{
- list-style: circle;
- text-align: left;
- padding: 0em 0.25em 0.25em 4em;
-}
-.level2 li
-{
- padding: 0.25em .25em 0.25em 0.25em;
- font-size: 14px;
- font-weight: bold;
-}
-
-.level3
-{
- list-style: square;
- text-align: left;
- padding: 0em 0.25em 0.25em 4em;
-}
-.level3 li
-{
- padding: 0.25em .25em 0.25em 0.25em;
-}
-
-
-
-.boxTable
-{
- border-left-style: solid;
- border-top-style: solid;
- border-right-style: solid;
- border-bottom-style: solid;
- border-color: #dddddd;
- font-family: verdana, sans-serif;
- font-size: 8pt;
- background-color: #dddddd;
-}
-.boxInnerTable
-{
- font-family: verdana, sans-serif;
- font-size: 8pt;
-}
-.boxTdHeader
-{
- border-width: 0 0 0 0;
- border-color: #dddddd;
- border-left-style: solid;
- border-top-style: solid;
- border-right-style: solid;
- border-bottom-style: solid;
- background-color: #dddddd;
- color: black;
- height: 20px;
- font-weight: bold
-}
-.boxTd
-{
- border-width: 0 0 0 0;
- border-left-style: solid;
- border-top-style: solid;
- border-right-style: solid;
- border-bottom-style: solid;
-}
-.boxTd1
-{
- background-color: #eeeeee;
-}
-.boxTd2
-{
- background-color: #eeeeee;
-}
-.boxTh
-{
- background-color: #dddddd;
-}
-