bba87c35cc2d27193f8b7e1d208f9cb285620ff1
[pyassuan.git] / bin / get-info.py
1 #!/usr/bin/env python3
2 #
3 # Copyright (C) 2012 W. Trevor King <wking@drexel.edu>
4 #
5 # This file is part of pyassuan.
6 #
7 # pyassuan is free software: you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation, either version 3 of the License, or (at your option) any later
10 # version.
11 #
12 # pyassuan is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along with
17 # pyassuan.  If not, see <http://www.gnu.org/licenses/>.
18
19 """Simple pinentry program for getting server info.
20 """
21
22 import socket as _socket
23
24 from pyassuan import __version__
25 from pyassuan import client as _client
26 from pyassuan import common as _common
27 from pyassuan import error as _error
28
29
30 if __name__ == '__main__':
31     import argparse
32     import logging
33
34     parser = argparse.ArgumentParser(description=__doc__, version=__version__)
35     parser.add_argument(
36         '-V', '--verbose', action='count', default=0,
37         help='increase verbosity')
38     parser.add_argument(
39         'filename',
40         help="path to server's unix socket")
41
42     args = parser.parse_args()
43
44     client = _client.AssuanClient(name='get-info', close_on_disconnect=True)
45
46     if args.verbose:
47         client.logger.setLevel(max(
48                 logging.DEBUG, client.logger.level - 10*args.verbose))
49
50     socket = _socket.socket(_socket.AF_UNIX, _socket.SOCK_STREAM)
51     socket.connect(args.filename)
52     client.input = socket.makefile('rb')
53     client.output = socket.makefile('wb')
54     client.connect()
55     try:
56         response = client.read_response()
57         assert response.type == 'OK', response
58         client.make_request(_common.Request('HELP'))
59         client.make_request(_common.Request('HELP GETINFO'))
60         for attribute in ['version', 'pid', 'socket_name', 'ssh_socket_name']:
61             try:
62                 client.make_request(_common.Request('GETINFO', attribute))
63             except _error.AssuanError as e:
64                 if e.message.startswith('No data'):
65                     pass
66                 else:
67                     raise
68     finally:
69         client.make_request(_common.Request('BYE'))
70         client.disconnect()
71         socket.shutdown(_socket.SHUT_RDWR)
72         socket.close()