mirror of https://github.com/jumpserver/jumpserver
				
				
				
			feat: s3 replay file get
							parent
							
								
									e449a07a3f
								
							
						
					
					
						commit
						83f83d9b07
					
				| 
						 | 
				
			
			@ -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,)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue