summaryrefslogtreecommitdiffstats
path: root/contrib/secbugstats/bin/settings.py
blob: b9b328629f17d3b90681535486cf9f0a586de114 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# Configuration options for secbugstats tools
# This file needs to live next to all the other collection/processing scripts.
# There are also configuration settings in settings.cfg which I didn't combine
# here because Bash and Python read configs differently.

import urllib, sys, pipes, os.path
try:
    import simplejson as json
except ImportError as error:
    if __name__ == '__main__':
        msg = """
            echo 'error in %s:'
            echo '%s' >&2
            exit 1
        """
        print msg % (__file__, pipes.quote(str(error)))
        sys.exit(1)


# scripts location (where does this config file live?)
SCRIPTS_DIR  = os.path.dirname(os.path.abspath(__file__))
BUGZILLA_DIR = os.path.realpath(SCRIPTS_DIR + "/../../..")
DATA_DIR     = BUGZILLA_DIR + "/data"

def read_localconfig():
    lc_cmd  = "%s/scripts/localconfig-as-json" % (BUGZILLA_DIR)
    lc_json = os.popen(pipes.quote(lc_cmd)).read()
    return json.loads( lc_json )

localconfig = read_localconfig()

URLBASE = localconfig['urlbase']
if URLBASE.endswith('/'):
    URLBASE = URLBASE[0:-1]

# database settings
DB_HOST = localconfig['db_host']
DB_USER = localconfig['db_user']
DB_PASS = localconfig['db_pass']
DB_NAME = localconfig['db_name']

# LDAP settings
LDAP_USER = ""
LDAP_PASS = ""

# Email settings
# email address to send the report from
EMAIL_FROM = "secbugstats-noreply@mozilla.com"
# list of email addresses to send the report to
EMAIL_TO   = ['security-group@mozilla.org']
SMTP_HOST = "smtp.mozilla.org"
SMTP_PORT = 25 # 465

# Bugzilla account settings
BZ_APIKEY = ''
try:
    BZ_APIKEY = os.environ['SECBUGSTATS_APIKEY']
except KeyError:
    pass
BZ_AUTH = urllib.urlencode({'api_key': BZ_APIKEY, 'restriclogin': "true"})

# where to store the JSON files that curlbug.py downloads
JSONLOCATION = "%s/secbugstats/json/current" % (DATA_DIR)

# where to store the most recent curlbug.py output
JSON_CUR = JSONLOCATION
# where to store the old curlbug.py output
JSON_OLD = "%s/secbugstats/json" % (DATA_DIR)

# teams chart location
TEAMS_CHART_LOC = "%s/secbugstats/teams" % (DATA_DIR)

# bug lifespan chart location
BUGLIFE_CHART_LOC = "%s/secbugstats/buglife" % (DATA_DIR)

# Selection criteria for various teams based on bug product and component
TEAMS = [["Layout",
          "secbugs_Details.product='Core' AND (secbugs_Details.component LIKE 'layout%' OR secbugs_Details.component LIKE 'print%' OR secbugs_Details.component LIKE 'widget%' OR secbugs_Details.component IN ('CSS Parsing and Computation','Style System (CSS)','SVG','Internationalization','MathML'))"],
         ["Media",
         "secbugs_Details.product='Core' AND (secbugs_Details.component LIKE 'WebRTC%' OR secbugs_Details.component LIKE 'Audio/Video%' OR secbugs_Details.component='Web Audio')"],
         ["JavaScript",
          "secbugs_Details.product='Core' AND (secbugs_Details.component LIKE 'javascript%' OR secbugs_Details.component IN ('Nanojit'))"],
         ["DOM",
          "secbugs_Details.product='Core' AND (secbugs_Details.component LIKE 'DOM%' OR secbugs_Details.component LIKE 'xp toolkit%' OR secbugs_Details.component IN ('Document Navigation','Drag and Drop','Editor','Event Handling','HTML: Form Submission','HTML: Parser','RDF','Security','Security: CAPS','Selection','Serializers','Spelling checker','Web Services','XBL','XForms','XML','XPConnect','XSLT','XUL'))"],
         ["GFX",
          "secbugs_Details.product='Core' AND (secbugs_Details.component LIKE 'GFX%' OR secbugs_Details.component LIKE 'canvas%' OR secbugs_Details.component LIKE 'Graphics%' OR secbugs_Details.component IN ('Graphics','Image: Painting','ImageLib'))"],
         ["Frontend",
          "secbugs_Details.product='Firefox' OR secbugs_Details.product='Firefox for Metro' OR secbugs_Details.product='Toolkit' OR (secbugs_Details.product='Core' AND (secbugs_Details.component IN ('Form Manager','History: Global','Identity','Installer: XPInstall Engine','Security: UI','Keyboard: Navigation')))"],
         ["Networking",
          "secbugs_Details.product='Core' AND secbugs_Details.component like 'Networking%'"],
         ["Mail",
          "secbugs_Details.product='MailNews Core' OR secbugs_Details.product='Thunderbird' OR (secbugs_Details.product='Core' AND (secbugs_Details.component like 'Mail%'))"],
         ["Other",
          "secbugs_Details.product='Core' AND (secbugs_Details.component IN ('DMD','File Handling','General','Geolocation','IPC','Java: OJI','jemalloc','js-ctypes','Memory Allocator','mfbt','mozglue','Permission Manager','Preferences: Backend','String','XPCOM','MFBT','Disability Access APIs','Rewriting and Analysis') OR secbugs_Details.component LIKE 'Embedding%' OR secbugs_Details.component LIKE '(HAL)')"],
         ["Crypto",
          "secbugs_Details.product IN ('JSS','NSS','NSPR') OR (secbugs_Details.product='Core' AND secbugs_Details.component IN ('Security: PSM','Security: S/MIME'))"],
         ["Services",
          "secbugs_Details.product IN ('Cloud Services','Mozilla Services')"],
         ["Plugins",
          "secbugs_Details.product IN ('Plugins','External Software Affecting Firefox') OR (secbugs_Details.product='Core' AND secbugs_Details.component='Plug-ins')"],
         ["Boot2Gecko",
          "secbugs_Details.product='Firefox OS' OR secbugs_Details.product='Boot2Gecko'"],
         ["Mobile",
          "secbugs_Details.product IN ('Fennec Graveyard','Firefox for Android','Android Background Services','Firefox for iOS','Focus')"]]

def main():
    this_module = sys.modules[__name__]

    for k in dir(this_module):
        v = getattr(this_module, k)
        if type(v) == str and not k.startswith("__"):
            print "%s=%s" % (k, pipes.quote(v))

if __name__ == '__main__':
    main()
else:
    import logging
    from logging.config import fileConfig
    fileConfig(SCRIPTS_DIR + '/../logging.ini')