Skip to content

Commit

Permalink
Merge pull request #23 from adulau/master
Browse files Browse the repository at this point in the history
Updates and bug fixes
  • Loading branch information
adulau committed Jan 23, 2015
2 parents d4ab304 + 65d4d00 commit c8b1305
Show file tree
Hide file tree
Showing 12 changed files with 105 additions and 193 deletions.
3 changes: 3 additions & 0 deletions configuration.ini
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ Host: 127.0.0.1
Port: 5000
Debug: True
PageLength: 50
SSL: True
Certificate: ssl/cve-search.crt
Key: ssl/cve-search.key
[CVE]
DefaultCVSS: 5
StartYear: 2002
21 changes: 18 additions & 3 deletions lib/Config.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ class Configuration():
'mongoDB': "cvedb",
'flaskHost': "127.0.0.1", 'flaskPort': 5000,
'flaskDebug': True, 'pageLength': 50,
'ssl': False, 'sslCertificate': "ssl/cve-search.crt",
'sslKey': "ssl/cve-search.crt",
'defaultCVSS': 5, 'CVEStartYear':2002,
'vFeedurl': "http://www.toolswatch.org/vfeed/vfeed.db.tgz",
'vFeedstatus': "http://www.toolswatch.org/update.dat",
Expand All @@ -41,9 +43,12 @@ class Configuration():
def readSetting(cls, section, item, default):
result = default
try:
answer = cls.ConfigParser.get(section, item)
if type(answer) == type(default):
result = answer
if type(default) == bool:
result = cls.ConfigParser.getboolean(section, item)
elif type(default) == int:
result = cls.ConfigParser.getint(section, item)
else:
result = cls.ConfigParser.get(section, item)
except:
pass
return result
Expand Down Expand Up @@ -96,6 +101,16 @@ def getFlaskDebug(cls):
def getPageLength(cls):
return cls.readSetting("Webserver", "PageLength", cls.default['pageLength'])

# SSL
@classmethod
def useSSL(cls):
return cls.readSetting("Webserver", "SSL", cls.default['ssl'])
@classmethod
def getSSLCert(cls):
return cls.readSetting("Webserver", "Certificate", cls.default['sslCertificate'])
@classmethod
def getSSLKey(cls):
return cls.readSetting("Webserver", "Key", cls.default['sslKey'])
# CVE
@classmethod
def getCVEStartYear(cls):
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ python-dateutil
flask
flask-login
flask-pymongo
tornado
https://github.com/marianoguerra/feedformatter/archive/master.zip
48 changes: 47 additions & 1 deletion web/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
sys.path.append(os.path.join(_runPath, "../lib/"))
sys.path.append(os.path.join(_runPath, ".."))

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from flask import Flask
from flask import render_template, url_for, request, redirect
from flask.ext.pymongo import PyMongo
Expand All @@ -34,6 +37,7 @@
import urllib
import hashlib
import random
import signal

from User import User
from Config import Configuration
Expand Down Expand Up @@ -686,8 +690,50 @@ def htmlDedode(string):
def htmlEncode(string):
return urllib.parse.quote_plus(string).lower()

def sig_handler(sig, frame):
print('Caught signal: %s', sig)
tornado.ioloop.IOLoop.instance().add_callback(shutdown)

def shutdown():
MAX_WAIT_SECONDS_BEFORE_SHUTDOWN = 3
print('Stopping http server')
server.stop()

print('Will shutdown in %s seconds ...', MAX_WAIT_SECONDS_BEFORE_SHUTDOWN)
io_loop = tornado.ioloop.IOLoop.instance()
deadline = time.time() + MAX_WAIT_SECONDS_BEFORE_SHUTDOWN

def stop_loop():
now = time.time()
if now < deadline and (io_loop._callbacks or io_loop._timeouts):
io_loop.add_timeout(now + 1, stop_loop)
else:
io_loop.stop()
print('Shutdown')
stop_loop()

if __name__ == '__main__':
# get properties
flaskHost = Configuration.getFlaskHost()
flaskPort = Configuration.getFlaskPort()
flaskDebug = Configuration.getFlaskDebug()
app.run(host=flaskHost, port=flaskPort, debug=flaskDebug)
if flaskDebug:
# start debug flask server
app.run(host=flaskHost, port=flaskPort, debug=flaskDebug)
else:
# start asynchronous server using tornado wrapper for flask
# ssl connection
print("Server starting...")
if Configuration.useSSL():
cert = os.path.join(_runPath,"../", Configuration.getSSLCert())
key = os.path.join(_runPath,"../", Configuration.getSSLKey())
ssl_options = {"certfile": cert,
"keyfile": key}
else:
ssl_options = None
http_server = HTTPServer(WSGIContainer(app), ssl_options=ssl_options )
http_server.bind(flaskPort, address=flaskHost)
signal.signal(signal.SIGTERM, sig_handler)
signal.signal(signal.SIGINT, sig_handler)
http_server.start(0) # Forks multiple sub-processes
IOLoop.instance().start()
28 changes: 1 addition & 27 deletions web/templates/admin.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,33 +32,7 @@
<div class="row">
<div class="col-sm-12">
<!-- Nav -->
<div class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href="/">cve-search</a>
</div>
<div class="container">
<ul class="nav navbar-nav">
<li><a href="/">Recent</a></li>
<li><a href="/browse">Browse per vendor</a></li>
<li>
<div class="col-sm-3">
<form id="tfnewsearch" method="get" class="input-group navbar-form"onsubmit="redirect(); return false;">
<input type="text" class="form-control input-sm" id="search" pattern="[cC][vV][eE]-[0-9]{4}-[0-9]{4,6}" placeholder="Search CVE"/>
<span class="input-group-btn">
<input type="submit" class="btn btn-default input-sm" value="search" />
</span>
</form>
</div>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="navbar-nav pull-right" href="/admin">Admin</a></li>
{% if current_user.is_authenticated() %}
<li><a class="navbar-nav pull-right" href="/logout"><span class="glyphicon glyphicon-log-out"></span></a></li>
{% endif %}
</ul>
</div>
</div>
{% include 'menu.html' %}
<!-- End Nav -->
<!-- Content -->
<div>
Expand Down
28 changes: 1 addition & 27 deletions web/templates/browse.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,33 +31,7 @@
<div class="row">
<div class="col-sm-12">
<!-- Nav -->
<div class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href="/">cve-search</a>
</div>
<div class="container">
<ul class="nav navbar-nav">
<li><a href="/">Recent</a></li>
<li><a href="/browse">Browse per vendor</a></li>
<li>
<div class="col-sm-3">
<form id="tfnewsearch" method="get" class="input-group navbar-form"onsubmit="redirect(); return false;">
<input type="text" class="form-control input-sm" id="search" pattern="[cC][vV][eE]-[0-9]{4}-[0-9]{4,6}" placeholder="Search CVE"/>
<span class="input-group-btn">
<input type="submit" class="btn btn-default input-sm" value="search" />
</span>
</form>
</div>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="navbar-nav pull-right" href="/admin">Admin</a></li>
{% if current_user.is_authenticated() %}
<li><a class="navbar-nav pull-right" href="/logout"><span class="glyphicon glyphicon-log-out"></span></a></li>
{% endif %}
</ul>
</div>
</div>
{% include 'menu.html' %}
<!-- End Nav -->
<!-- Content -->
<div>
Expand Down
28 changes: 1 addition & 27 deletions web/templates/cve.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,33 +34,7 @@
<div class="row">
<div class="col-sm-12">
<!-- Nav -->
<div class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href="/">cve-search</a>
</div>
<div class="container">
<ul class="nav navbar-nav">
<li><a href="/">Recent</a></li>
<li><a href="/browse">Browse per vendor</a></li>
<li>
<div class="col-sm-3">
<form id="tfnewsearch" method="get" class="input-group navbar-form"onsubmit="redirect(); return false;">
<input type="text" class="form-control input-sm" id="search" pattern="[cC][vV][eE]-[0-9]{4}-[0-9]{4,6}" placeholder="Search CVE"/>
<span class="input-group-btn">
<input type="submit" class="btn btn-default input-sm" value="search" />
</span>
</form>
</div>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="navbar-nav pull-right" href="/admin">Admin</a></li>
{% if current_user.is_authenticated() %}
<li><a class="navbar-nav pull-right" href="/logout"><span class="glyphicon glyphicon-log-out"></span></a></li>
{% endif %}
</ul>
</div>
</div>
{% include 'menu.html' %}
<!-- End Nav -->
<!-- Content -->
<div>
Expand Down
28 changes: 1 addition & 27 deletions web/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -69,33 +69,7 @@
<div class="row">
<div class="col-sm-12">
<!-- Nav -->
<div class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href="/">cve-search</a>
</div>
<div class="container">
<ul class="nav navbar-nav">
<li><a href="/">Recent</a></li>
<li><a href="/browse">Browse per vendor</a></li>
<li>
<div class="col-sm-3">
<form id="tfnewsearch" method="get" class="input-group navbar-form"onsubmit="redirect(); return false;">
<input type="text" class="form-control input-sm" id="search" pattern="[cC][vV][eE]-[0-9]{4}-[0-9]{4,6}" placeholder="Search CVE"/>
<span class="input-group-btn">
<input type="submit" class="btn btn-default input-sm" value="search" />
</span>
</form>
</div>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="navbar-nav pull-right" href="/admin">Admin</a></li>
{% if current_user.is_authenticated() %}
<li><a class="navbar-nav pull-right" href="/logout"><span class="glyphicon glyphicon-log-out"></span></a></li>
{% endif %}
</ul>
</div>
</div>
{% include 'menu.html' %}
<!-- End Nav -->
<!-- Content -->
<div>
Expand Down
28 changes: 1 addition & 27 deletions web/templates/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -103,33 +103,7 @@
<div class="row">
<div class="col-sm-12">
<!-- Nav -->
<div class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href="/">cve-search</a>
</div>
<div class="container">
<ul class="nav navbar-nav">
<li><a href="/">Recent</a></li>
<li><a href="/browse">Browse per vendor</a></li>
<li>
<div class="col-sm-3">
<form id="tfnewsearch" method="get" class="input-group navbar-form"onsubmit="redirect(); return false;">
<input type="text" class="form-control input-sm" id="search" pattern="[cC][vV][eE]-[0-9]{4}-[0-9]{4,6}" placeholder="Search CVE"/>
<span class="input-group-btn">
<input type="submit" class="btn btn-default input-sm" value="search" />
</span>
</form>
</div>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="navbar-nav pull-right" href="/admin">Admin</a></li>
{% if current_user.is_authenticated() %}
<li><a class="navbar-nav pull-right" href="/logout"><span class="glyphicon glyphicon-log-out"></span></a></li>
{% endif %}
</ul>
</div>
</div>
{% include 'menu.html' %}
<!-- End Nav -->
<!-- Content -->
<div>
Expand Down
28 changes: 1 addition & 27 deletions web/templates/listmanagement.html
Original file line number Diff line number Diff line change
Expand Up @@ -52,33 +52,7 @@
<div class="row">
<div class="col-sm-12">
<!-- Nav -->
<div class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href="/">cve-search</a>
</div>
<div class="container">
<ul class="nav navbar-nav">
<li><a href="/">Recent</a></li>
<li><a href="/browse">Browse per vendor</a></li>
<li>
<div class="col-sm-3">
<form id="tfnewsearch" method="get" class="input-group navbar-form"onsubmit="redirect(); return false;">
<input type="text" class="form-control input-sm" id="search" pattern="[cC][vV][eE]-[0-9]{4}-[0-9]{4,6}" placeholder="Search CVE"/>
<span class="input-group-btn">
<input type="submit" class="btn btn-default input-sm" value="search" />
</span>
</form>
</div>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="navbar-nav pull-right" href="/admin">Admin</a></li>
{% if current_user.is_authenticated() %}
<li><a class="navbar-nav pull-right" href="/logout"><span class="glyphicon glyphicon-log-out"></span></a></li>
{% endif %}
</ul>
</div>
</div>
{% include 'menu.html' %}
<!-- End Nav -->
<!-- Content -->
<div>
Expand Down
29 changes: 29 additions & 0 deletions web/templates/menu.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!-- Nav -->
<div class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href="/">cve-search</a>
</div>
<div class="container">
<ul class="nav navbar-nav">
<li><a href="/">Recent</a></li>
<li><a href="/browse">Browse per vendor</a></li>
<li>
<div class="col-sm-3">
<form id="tfnewsearch" method="get" class="input-group navbar-form"onsubmit="redirect(); return false;">
<input type="text" class="form-control input-sm" id="search" pattern="[cC][vV][eE]-[0-9]{4}-[0-9]{4,6}" placeholder="Search CVE"/>
<span class="input-group-btn">
<input type="submit" class="btn btn-default input-sm" value="search" />
</span>
</form>
</div>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="navbar-nav pull-right" href="/admin">Admin</a></li>
{% if current_user.is_authenticated() %}
<li><a class="navbar-nav pull-right" href="/logout"><span class="glyphicon glyphicon-log-out"></span></a></li>
{% endif %}
</ul>
</div>
</div>
<!-- End Nav -->
Loading

0 comments on commit c8b1305

Please sign in to comment.