Skip to content
Snippets Groups Projects
Commit d45f89c9 authored by Mark Haines's avatar Mark Haines
Browse files

More helpful error messages for missing config

parent ab0637c2
No related branches found
No related tags found
No related merge requests found
...@@ -21,6 +21,10 @@ import os ...@@ -21,6 +21,10 @@ import os
import yaml import yaml
class ConfigError(Exception):
pass
class Config(object): class Config(object):
def __init__(self, args): def __init__(self, args):
pass pass
...@@ -29,8 +33,25 @@ class Config(object): ...@@ -29,8 +33,25 @@ class Config(object):
def abspath(file_path): def abspath(file_path):
return os.path.abspath(file_path) if file_path else file_path return os.path.abspath(file_path) if file_path else file_path
@staticmethod @classmethod
def read_file(file_path): def check_file(cls, file_path, config_name):
if file_path is None:
raise ConfigError(
"Missing config for %s."
" Try running again with --generate-config"
% (config_name,)
)
if not os.path.exists(file_path):
raise ConfigError(
"File % config for %s doesn't exist."
" Try running again with --generate-config"
% (config_name,)
)
return cls.abspath(file_path)
@classmethod
def read_file(cls, file_path, config_name):
cls.check_file(file_path, config_name)
with open(file_path) as file_stream: with open(file_path) as file_stream:
return file_stream.read() return file_stream.read()
......
...@@ -60,7 +60,7 @@ class ServerConfig(Config): ...@@ -60,7 +60,7 @@ class ServerConfig(Config):
" service on the given port.") " service on the given port.")
def read_signing_key(self, signing_key_path): def read_signing_key(self, signing_key_path):
signing_key_base64 = self.read_file(signing_key_path) signing_key_base64 = self.read_file(signing_key_path, "signing_key")
signing_key_bytes = decode_base64(signing_key_base64) signing_key_bytes = decode_base64(signing_key_base64)
return nacl.signing.SigningKey(signing_key_bytes) return nacl.signing.SigningKey(signing_key_bytes)
......
...@@ -31,7 +31,9 @@ class TlsConfig(Config): ...@@ -31,7 +31,9 @@ class TlsConfig(Config):
self.tls_private_key = self.read_tls_private_key( self.tls_private_key = self.read_tls_private_key(
args.tls_private_key_path args.tls_private_key_path
) )
self.tls_dh_params_path = self.abspath(args.tls_dh_params_path) self.tls_dh_params_path = self.check_path(
args.tls_dh_params_path, "tls_dh_params"
)
@classmethod @classmethod
def add_arguments(cls, parser): def add_arguments(cls, parser):
...@@ -45,11 +47,11 @@ class TlsConfig(Config): ...@@ -45,11 +47,11 @@ class TlsConfig(Config):
help="PEM dh parameters for ephemeral keys") help="PEM dh parameters for ephemeral keys")
def read_tls_certificate(self, cert_path): def read_tls_certificate(self, cert_path):
cert_pem = self.read_file(cert_path) cert_pem = self.read_file(cert_path, "tls_certificate")
return crypto.load_certificate(crypto.FILETYPE_PEM, cert_pem) return crypto.load_certificate(crypto.FILETYPE_PEM, cert_pem)
def read_tls_private_key(self, private_key_path): def read_tls_private_key(self, private_key_path):
private_key_pem = self.read_file(private_key_path) private_key_pem = self.read_file(private_key_path, "tls_private_key")
return crypto.load_privatekey(crypto.FILETYPE_PEM, private_key_pem) return crypto.load_privatekey(crypto.FILETYPE_PEM, private_key_pem)
@classmethod @classmethod
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment