diff options
Diffstat (limited to 'client')
| -rwxr-xr-x | client/client.py | 64 |
1 files changed, 41 insertions, 23 deletions
diff --git a/client/client.py b/client/client.py index b2429b6..1c7e155 100755 --- a/client/client.py +++ b/client/client.py | |||
| @@ -4,6 +4,7 @@ import socket | |||
| 4 | import time | 4 | import time |
| 5 | import argparse | 5 | import argparse |
| 6 | import sys | 6 | import sys |
| 7 | import os | ||
| 7 | 8 | ||
| 8 | HEADER_LENGTH = 64 | 9 | HEADER_LENGTH = 64 |
| 9 | KEY_LENGTH = 64 | 10 | KEY_LENGTH = 64 |
| @@ -11,6 +12,7 @@ DISCONNECT_LENGTH = ACK_LENGTH = 3 | |||
| 11 | ACK_MESSAGE = "ACK" | 12 | ACK_MESSAGE = "ACK" |
| 12 | DISCONNECT_MESSAGE = "BYE" | 13 | DISCONNECT_MESSAGE = "BYE" |
| 13 | FORMAT = "utf-8" | 14 | FORMAT = "utf-8" |
| 15 | import configparser | ||
| 14 | 16 | ||
| 15 | def parse_arguments(): | 17 | def parse_arguments(): |
| 16 | parser = argparse.ArgumentParser() | 18 | parser = argparse.ArgumentParser() |
| @@ -18,7 +20,7 @@ def parse_arguments(): | |||
| 18 | parser.add_argument("--port",type=int,help="Port to connect to") | 20 | parser.add_argument("--port",type=int,help="Port to connect to") |
| 19 | parser.add_argument("--config",type=str,help="Path to config file",\ | 21 | parser.add_argument("--config",type=str,help="Path to config file",\ |
| 20 | default="/etc/mfa/mfa.conf") | 22 | default="/etc/mfa/mfa.conf") |
| 21 | parser.add_argument("--key",type=str,help="Client connection key",required=True) | 23 | parser.add_argument("--key",type=str,help="Client connection key") |
| 22 | return parser.parse_args() | 24 | return parser.parse_args() |
| 23 | 25 | ||
| 24 | def prompt_user(prompt): | 26 | def prompt_user(prompt): |
| @@ -53,32 +55,48 @@ def init_connection(mfa_server, client_port, client_key): | |||
| 53 | 55 | ||
| 54 | 56 | ||
| 55 | def read_config(config_file): | 57 | def read_config(config_file): |
| 56 | # Read config file for server and port info | 58 | parser = configparser.ConfigParser(inline_comment_prefixes="#") |
| 57 | # Return tuple (server,port) | 59 | parser.read(config_file) |
| 58 | server = "" | 60 | return parser |
| 59 | port = 0 | 61 | |
| 60 | with open(config_file) as conf: | 62 | |
| 61 | line = None | 63 | def get_vars(args,confparser): |
| 62 | while line != "": | 64 | if not os.path.exists(args.config): |
| 63 | line = conf.readline() | 65 | print("Unable to open config file") |
| 64 | if line.startswith("server ="): | 66 | sys.exit(1) |
| 65 | server = line.split("=")[1].strip() | 67 | |
| 66 | if line.startswith("port ="): | 68 | server = None |
| 67 | port = int(line.split("=")[1].strip()) | 69 | port = None |
| 68 | return (server,port) | 70 | key = None |
| 71 | |||
| 72 | # Set values from config file first | ||
| 73 | if confparser.has_section("client"): | ||
| 74 | server = confparser.get("client","server",fallback=None) | ||
| 75 | port = confparser.get("client","port",fallback=None) | ||
| 76 | key = confparser.get("client","key",fallback=None) | ||
| 77 | |||
| 78 | # Let command line args overwrite any values | ||
| 79 | if args.server: | ||
| 80 | server = args.server | ||
| 81 | if args.port: | ||
| 82 | port = args.port | ||
| 83 | if args.key: | ||
| 84 | key = args.key | ||
| 85 | |||
| 86 | # Exit if any value is null | ||
| 87 | if None in [server,port,key]: | ||
| 88 | print("error: one or more items unspecified") | ||
| 89 | sys.exit(1) | ||
| 90 | |||
| 91 | return server,port,key | ||
| 92 | |||
| 69 | 93 | ||
| 70 | def main(): | 94 | def main(): |
| 71 | # Get arguments, exit if unable to connect | 95 | # Get arguments, exit if unable to connect |
| 72 | args = parse_arguments() | 96 | args = parse_arguments() |
| 73 | client_key = args.key | 97 | confparser = read_config(args.config) |
| 74 | 98 | ||
| 75 | # Read server and port from config file but allow command line options | 99 | mfa_server,client_port,client_key = get_vars(args,confparser) |
| 76 | # to override those settings | ||
| 77 | mfa_server, client_port = read_config(args.config) | ||
| 78 | if args.server != None: | ||
| 79 | mfa_server = args.server | ||
| 80 | if args.port != None: | ||
| 81 | client_port = args.port | ||
| 82 | 100 | ||
| 83 | # Exit if invalid key is provided | 101 | # Exit if invalid key is provided |
| 84 | if len(client_key) != KEY_LENGTH: | 102 | if len(client_key) != KEY_LENGTH: |
