blob: 3d7b5bc35dfc62e32a5230ee2880d9653bff0f80 (
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
|
#!/usr/bin/python3
# Copyright 2012 Canonical Ltd. This software is licensed under the GNU
# General Public License version 3 (see the file LICENSE).
from optparse import OptionParser
import os
import sys
from rscalib import (
api_versions,
UserError,
)
class Usage(UserError):
status = 1
def get_sso_credentials(args, stream):
"""Determine SSO credentials from the args and stream."""
if stream.isatty():
raise Usage('Password must be provided on stdin.')
if len(args) == 0:
raise Usage('Email must be provided as the first argument.')
password = sys.stdin.read().rstrip('\n')
username = args[0]
return username, password
def get_json_error(error_message):
return '{ "Error": "%s" }' % error_message
def main(args):
"""Request data for the specified SSO credentials from the server.
Prints the data in JSON format on success and a JSON error in the case
of a failure.
Exit status summary:
0 Success
1 Usage error
2 Authentication error
3 Connection error
4 SSL Certificate verification error
100 All other errors.
"""
parser = OptionParser()
parser.add_option('--skip-ssl-verify', action='store_true')
options, args = parser.parse_args(args)
verify_ssl = not options.skip_ssl_verify
try:
username, password = get_sso_credentials(args, sys.stdin)
server_root = os.environ.get('SERVER_ROOT')
api = api_versions[os.environ.get('API_VERSION', 'default')]
sys.stdout.write(api.run(username, password, server_root, verify_ssl))
except UserError as e:
sys.stderr.write(str(e) + '\n')
sys.stdout.write(get_json_error(str(e)) + '\n')
sys.exit(e.status)
except Exception as e:
sys.stderr.write('Exception: ' + str(type(e)) + '\n' + str(e) + '\n')
sys.stdout.write(get_json_error('Contact your administrator')+ '\n')
sys.exit(100)
else:
sys.exit(0)
if __name__ == '__main__':
main(sys.argv[1:])
|