diff --git a/keymaker/__init__.py b/keymaker/__init__.py index 4e7b690..04fa6ba 100644 --- a/keymaker/__init__.py +++ b/keymaker/__init__.py @@ -3,33 +3,17 @@ from io import open import os, sys, json, re, time, logging, subprocess, pwd, hashlib, grp, shlex -from collections import namedtuple - -try: - from shutil import which -except ImportError: - def which(name): - if os.path.exists("/usr/local/bin/" + name): - return "/usr/local/bin/" + name - elif os.path.exists("/usr/bin/" + name): - return "/usr/bin/" + name import boto3 from botocore.exceptions import ClientError from .iam.policies import trust_policy_template, keymaker_instance_role_policy, keymaker_instance_assume_role_statement +from .util import which, ARN, from_bytes USING_PYTHON2 = True if sys.version_info < (3, 0) else False logger = logging.getLogger(__name__) -class ARN(namedtuple("ARN", "partition service region account resource")): - def __str__(self): - return ":".join(["arn"] + list(self)) - - -ARN.__new__.__defaults__ = ("aws", "", "", "", "") - default_iam_linux_group_prefix = "keymaker_" default_iam_linux_user_suffix = "" @@ -156,17 +140,6 @@ def get_authorized_keys(args): except Exception as e: err_exit("Error while retrieving IAM SSH keys for {u}: {e}".format(u=args.user, e=str(e)), code=os.errno.EINVAL) -def from_bytes(data, big_endian=False): - """Used on Python 2 to handle int.from_bytes""" - if isinstance(data, str): - data = bytearray(data) - if big_endian: - data = reversed(data) - num = 0 - for offset, byte in enumerate(data): - num += byte << (offset * 8) - return num - def aws_to_unix_id(aws_key_id): """Converts a AWS Key ID into a UID""" uid_bytes = hashlib.sha256(aws_key_id.encode()).digest()[-2:] diff --git a/keymaker/util.py b/keymaker/util.py new file mode 100644 index 0000000..4510c7b --- /dev/null +++ b/keymaker/util.py @@ -0,0 +1,29 @@ +import os +from collections import namedtuple + +try: + from shutil import which +except ImportError: + def which(name): + if os.path.exists("/usr/local/bin/" + name): + return "/usr/local/bin/" + name + elif os.path.exists("/usr/bin/" + name): + return "/usr/bin/" + name + +class ARN(namedtuple("ARN", "partition service region account resource")): + def __str__(self): + return ":".join(["arn"] + list(self)) + + +ARN.__new__.__defaults__ = ("aws", "", "", "", "") + +def from_bytes(data, big_endian=False): + """Used on Python 2 to handle int.from_bytes""" + if isinstance(data, str): + data = bytearray(data) + if big_endian: + data = reversed(data) + num = 0 + for offset, byte in enumerate(data): + num += byte << (offset * 8) + return num diff --git a/keymaker/version.py b/keymaker/version.py index 6c8e6b9..a682442 100644 --- a/keymaker/version.py +++ b/keymaker/version.py @@ -1 +1 @@ -__version__ = "0.0.0" +__version__ = '1.0.9'