From 83f83d9b07b95d6e967af0082b95ef76b1d43a11 Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Wed, 7 Mar 2018 17:17:31 +0800 Subject: [PATCH 1/2] feat: s3 replay file get --- apps/terminal/api.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/apps/terminal/api.py b/apps/terminal/api.py index 9ce188af1..f799087f6 100644 --- a/apps/terminal/api.py +++ b/apps/terminal/api.py @@ -22,6 +22,7 @@ from .hands import IsSuperUserOrAppUser, IsAppUser, \ IsSuperUserOrAppUserOrUserReadonly from .backends import get_command_store, get_multi_command_store, \ SessionCommandSerializer +import boto3 # AWS S3 sdk logger = logging.getLogger(__file__) @@ -231,7 +232,7 @@ class SessionReplayViewSet(viewsets.ViewSet): def gen_session_path(self): date = self.session.date_start.strftime('%Y-%m-%d') - return os.path.join(date, str(self.session.id)+'.gz') + return os.path.join(date, str(self.session.id) + '.gz') def create(self, request, *args, **kwargs): session_id = kwargs.get('pk') @@ -261,8 +262,33 @@ class SessionReplayViewSet(viewsets.ViewSet): url = default_storage.url(path) return redirect(url) else: + config = self.app.config.get("REPLAY_STORAGE", None) + if config: + for name in config.keys(): + if config[name] == "s3": + client, bucket = self.s3Client(config[name]) + try: + client.head_object(Bucket=bucket, Key=path) + client.download_file(bucket, path, default_storage.base_location + '/' + path) + return redirect(default_storage.url(path)) + except: + pass return HttpResponseNotFound() + def s3Client(self, config): + bucket = config.get("BUCKET", "jumpserver") + REGION = config.get("REGION", None) + ACCESS_KEY = config.get("ACCESS_KEY", None) + SECRET_KEY = config.get("SECRET_KEY", None) + if self.ACCESS_KEY and REGION and SECRET_KEY: + s3 = boto3.client('s3', + region_name=REGION, + aws_access_key_id=ACCESS_KEY, + aws_secret_access_key=SECRET_KEY) + else: + s3 = boto3.client('s3') + return s3, bucket + class TerminalConfig(APIView): permission_classes = (IsAppUser,) From 9aed73d64442061c6ea256222f8f18950f4cfd3f Mon Sep 17 00:00:00 2001 From: liuzheng712 Date: Wed, 7 Mar 2018 17:18:56 +0800 Subject: [PATCH 2/2] feat: update --- apps/terminal/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/terminal/api.py b/apps/terminal/api.py index 0da118b1c..88f8fc926 100644 --- a/apps/terminal/api.py +++ b/apps/terminal/api.py @@ -283,7 +283,7 @@ class SessionReplayViewSet(viewsets.ViewSet): config = self.app.config.get("REPLAY_STORAGE", None) if config: for name in config.keys(): - if config[name] == "s3": + if config[name].get("TYPE", '') == "s3": client, bucket = self.s3Client(config[name]) try: client.head_object(Bucket=bucket, Key=path)