#!/usr/bin/python

import argparse
import sys
import os
import logging
from crypter.server import CryptPipeServer

def parse(filename):

	config = {}

	with open(filename, 'r') as f:

		for line in f:
			if line[:1] == '#':
				continue
			(key, value) = line.split('=')
			config[key.strip()] = value.strip()

	return config


if __name__ == '__main__':

	parser = argparse.ArgumentParser()
	parser.add_argument('-c', '--config', default='/etc/crypter/crypter.cfg', help='Configuration file')
	parser.add_argument('-d', '--directory', help='Socket directory')
	parser.add_argument('--key', help='Private key file')
	parser.add_argument('--cert', help='Public key certificate (x509)')
	parser.add_argument('-v', '--verbose', action='store_true', help='Verbose logging for debugging')
	parser.add_argument('--encrypt', help='One-time file encryption (do not daemonize)')
	parser.add_argument('--decrypt', help='One-time file decryption (do not daemonize)')
	args = parser.parse_args()

	if not os.path.exists(args.config):
		sys.stderr.write('Unable to find config file')
		sys.exit(1)

	cfg = parse(args.config)

	if args.directory:
		cfg['directory'] = args.directory
	if args.key:
		cfg['key'] = args.key
	if args.cert:
		cfg['cert'] = args.cert

	if not 'key' in cfg and not 'cert' in cfg:
		parser.print_help()
		exit()

	if args.verbose:
		logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s')
	else:
		logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s')

	server = CryptPipeServer(cfg['cert'] if 'cert' in cfg else None, cfg['key'] if 'key' in cfg else None);

	if args.encrypt:
		with open(args.encrypt, 'r') as f:
			print server.encrypt(f.read())
	elif args.decrypt:
		with open(args.decrypt, 'r') as f:
			print server.decrypt(f.read())
	else:
		server.run(cfg['directory'])
