Test Failed
Push — master ( f44782...c59a88 )
by -
01:58
created

spike_init()   D

Complexity

Conditions 8

Size

Total Lines 41

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 8
dl 0
loc 41
rs 4
1
#! /usr/bin/env python
2
3
import os
4
import logging
5
import argparse
6
from os.path import dirname, abspath
7
from shutil import move
8
from time import time, strftime, localtime
9
10
from spike import create_app, seeds, version
11
from spike.model import db, Settings, NaxsiRuleSets
12
from spike.model.naxsi_rules import ValueTemplates
13
14
15
def run():
16
    app = create_app(__get_config_file())
17
18
    try:
19
        app_port = int(app.config["APP_PORT"])
20
    except:
21
        app_port = 5555
22
    try:
23
        app_host = app.config["APP_HOST"]
24
    except:
25
        app_host = "127.0.0.1"
26
27
    db.init_app(app)
28
    app.test_request_context().push()
29
30
    try:
31
        eo_offset = Settings.query.filter(Settings.name == 'rules_offset').first()
32
        app.config["NAXSI_RULES_OFFSET"] = eo_offset.value
33
    except:
34
        app.config["NAXSI_RULES_OFFSET"] = 20000
35
36
    try:
37
        app.config["RULESET_HEADER"] = app.config["RULESET_HEADER"]
38
    except:
39
        app.config["RULESET_HEADER"] = ''
40
41
    logging.info("Spike is running on %s:%s", app_host, app_port)
42
    app.run(debug=True, host=app_host, port=app_port)
43
44
45
def spike_init():
46
    """ Import some data into Spkie internal DB, in order to be able to run it """
47
    it = ts = int(time())
48
    logging.info("Initializing Spike")
49
50
    ds = strftime("%F - %H:%M", localtime(time()))
51
    app = create_app(__get_config_file())
52
53
    db_files = app.config["SQLALCHEMY_BINDS"]
54
55
    for sqldb in db_files:
56
        p1 = os.path.join('spike', db_files[sqldb].replace("sqlite:///", ""))
57
        if os.path.isfile(p1):
58
            logging.info("Existing db found (%s) creating backup", sqldb)
59
            move(p1, os.path.join(p1, it))
60
            logging.info("copy: %s.%s", p1, it)
61
62
    app.test_request_context().push()
63
    db.init_app(app)
64
65
    with app.app_context():
66
        db.create_all()
67
68
    logging.info("filling default_vals")
69
70
    for v in seeds.vtemplate_seeds:
71
        logging.info("adding templates: %s" , v)
72
        for val in seeds.vtemplate_seeds[v]:
73
            db.session.add(ValueTemplates(v, val))
74
75
    for r in seeds.rulesets_seeds:
76
        logging.info("adding ruleset: %s / %s", r, seeds.rulesets_seeds[r])
77
        rmks = "naxsi-ruleset for %s / auto-created %s" % (r, ds)
78
        db.session.add(NaxsiRuleSets(seeds.rulesets_seeds[r], r, rmks, ts, ts))
79
80
    for s in seeds.settings_seeds:
81
        logging.info("adding setting: %s", s)
82
        db.session.add(Settings(s, seeds.settings_seeds[s]))
83
    db.session.commit()
84
85
    logging.info('Spike initialization completed')
86
87
88
def __get_config_file():
89
    return os.path.join(dirname(abspath(__name__)), 'config.cfg')
90
91
92
if __name__ == "__main__":
93
    logging.basicConfig(level=logging.DEBUG, format='%(message)s')
94
    parser = argparse.ArgumentParser(description='Spike %s' % version)
95
    parser.add_argument('command', help='Run the spike server', choices=['run', 'init'])
96
    args = parser.parse_args()
97
98
    if args.command == 'run':
99
        run()
100
    elif args.command == 'init':
101
        spike_init()
102