summaryrefslogtreecommitdiff
path: root/src/leap/bitmask/util/leap_argparse.py
blob: 70feb61cdee3be79d1134e7d0b8fb7b1f30de32b (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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# -*- coding: utf-8 -*-
# leap_argparse.py
# Copyright (C) 2013 LEAP
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""
Parses the command line arguments passed to the application.
"""
import argparse

from leap.bitmask import IS_RELEASE_VERSION


def build_parser():
    """
    All the options for the leap arg parser
    Some of these could be switched on only if debug flag is present!
    """
    parser = argparse.ArgumentParser(
        description="Launches the Bitmask client.",
        epilog="Copyright 2012-2014 The LEAP Encryption Access Project")

    parser.add_argument('-d', '--debug', action="store_true",
                        help=("Launches Bitmask in debug mode, writing debug "
                              "info to stdout."))
    parser.add_argument('-V', '--version', action="store_true",
                        help='Displays Bitmask version and exits.')

    # files
    parser.add_argument('-m', '--mail-logfile',
                        metavar="MAIL LOG FILE", nargs='?',
                        action="store", dest="mail_log_file",
                        help='Optional log file for email.')

    # flags
    parser.add_argument('-s', '--standalone', action="store_true",
                        help='Makes Bitmask use standalone '
                        'directories for configuration and binary '
                        'searching.')
    parser.add_argument('-N', '--no-app-version-check', default=True,
                        action="store_false", dest="app_version_check",
                        help='Skip the app version compatibility check with '
                        'the provider.')
    parser.add_argument('-M', '--no-api-version-check', default=True,
                        action="store_false", dest="api_version_check",
                        help='Skip the api version compatibility check with '
                        'the provider.')
    parser.add_argument('-H', '--start-hidden', default=False,
                        action="store_true", dest="start_hidden",
                        help='Starts the application just in the taskbar.')
    parser.add_argument('-S', '--skip-wizard-checks', default=False,
                        action="store_true", dest="skip_wizard_checks",
                        help='Skips the provider checks in the wizard (use '
                             'for testing purposes only).')

    # openvpn options
    parser.add_argument('--openvpn-verbosity', nargs='?',
                        type=int,
                        action="store", dest="openvpn_verb",
                        help='Verbosity level for openvpn logs [1-6]')

    # mail stuff
    parser.add_argument('-o', '--offline', action="store_true",
                        help='Starts Bitmask in offline mode: will not '
                             'try to sync with remote replicas for email.')

    # XXX not yet updated to new mail api for mail 0.4.0

    # parser.add_argument('--acct', metavar="user@provider",
    #                     nargs='?',
    #                     action="store", dest="acct",
    #                     help='Manipulate mailboxes for this account')
    # parser.add_argument('-r', '--repair-mailboxes', default=False,
    #                     action="store_true", dest="repair",
    #                     help='Repair mailboxes for a given account. '
    #                     'Use when upgrading versions after a schema '
    #                     'change. Use with --acct')
    # parser.add_argument('--import-maildir', metavar="/path/to/Maildir",
    #                     nargs='?',
    #                     action="store", dest="import_maildir",
    #                     help='Import the given maildir. Use with the '
    #                     '--to-mbox flag to import to folders other '
    #                     'than INBOX. Use with --acct')

    if not IS_RELEASE_VERSION:
        help_text = ("Bypasses the certificate check during provider "
                     "bootstraping, for debugging development servers. "
                     "Use at your own risk!")
        parser.add_argument('--danger', action="store_true", help=help_text)

    # optional cert file used to check domains with self signed certs.
    parser.add_argument('--ca-cert-file', metavar="/path/to/cacert.pem",
                        nargs='?', action="store", dest="ca_cert_file",
                        help='Uses the given cert file to verify '
                             'against domains.')

    # Not in use, we might want to reintroduce them.
    # parser.add_argument('-i', '--no-provider-checks',
    #                     action="store_true", default=False,
    #                     help="skips download of provider config files. gets "
    #                     "config from local files only. Will fail if cannot "
    #                     "find any")
    # parser.add_argument('-k', '--no-ca-verify',
    #                     action="store_true", default=False,
    #                     help="(insecure). Skips verification of the server "
    #                     "certificate used in TLS handshake.")
    # parser.add_argument('-c', '--config', metavar="CONFIG FILE", nargs='?',
    #                     action="store", dest="config_file",
    #                     type=argparse.FileType('r'),
    #                     help='optional config file')
    return parser


def get_options():
    """
    Get the command line options used when the app was started.

    :return: the command options
    :rtype: argparse.Namespace
    """
    parser = build_parser()
    opts, unknown = parser.parse_known_args()

    # we add this option manually since it's not defined for 'release version'
    if IS_RELEASE_VERSION:
        opts.danger = False

    return opts