mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
# -*- coding: utf-8 -*-
 | 
						|
#
 | 
						|
import os
 | 
						|
 | 
						|
from obs.client import ObsClient
 | 
						|
from .base import ObjectStorage
 | 
						|
 | 
						|
 | 
						|
class OBSStorage(ObjectStorage):
 | 
						|
    def __init__(self, config):
 | 
						|
        self.endpoint = config.get("ENDPOINT", None)
 | 
						|
        self.bucket = config.get("BUCKET", None)
 | 
						|
        self.access_key = config.get("ACCESS_KEY", None)
 | 
						|
        self.secret_key = config.get("SECRET_KEY", None)
 | 
						|
        if self.access_key and self.secret_key and self.endpoint:
 | 
						|
            proxy_host = os.getenv("proxy_host")
 | 
						|
            proxy_port = os.getenv("proxy_port")
 | 
						|
            proxy_username = os.getenv("proxy_username")
 | 
						|
            proxy_password = os.getenv("proxy_password")
 | 
						|
            self.obsClient = ObsClient(access_key_id=self.access_key, secret_access_key=self.secret_key, server=self.endpoint, proxy_host=proxy_host, proxy_port=proxy_port, proxy_username=proxy_username, proxy_password=proxy_password)
 | 
						|
        else:
 | 
						|
            self.obsClient = None
 | 
						|
 | 
						|
    def upload(self, src, target):
 | 
						|
        try:
 | 
						|
            resp = self.obsClient.putFile(self.bucket, target, src)
 | 
						|
            if resp.status < 300:
 | 
						|
                return True, None
 | 
						|
            else:
 | 
						|
                return False, resp.reason
 | 
						|
        except Exception as e:
 | 
						|
            return False, e
 | 
						|
 | 
						|
    def exists(self, path):
 | 
						|
        resp = self.obsClient.getObjectMetadata(self.bucket, path)
 | 
						|
        if resp.status < 300:
 | 
						|
            return True
 | 
						|
        return False
 | 
						|
 | 
						|
    def delete(self, path):
 | 
						|
        try:
 | 
						|
            resp = self.obsClient.deleteObject(self.bucket, path)
 | 
						|
            if resp.status < 300:
 | 
						|
                return True, None
 | 
						|
            else:
 | 
						|
                return False, resp.reason
 | 
						|
        except Exception as e:
 | 
						|
            return False, e
 | 
						|
 | 
						|
    def download(self, src, target):
 | 
						|
        try:
 | 
						|
            os.makedirs(os.path.dirname(target), 0o755, exist_ok=True)
 | 
						|
            resp = self.obsClient.getObject(self.bucket, src, target)
 | 
						|
            if resp.status < 300:
 | 
						|
                return True, None
 | 
						|
            else:
 | 
						|
                return False, resp.reason
 | 
						|
        except Exception as e:
 | 
						|
            return False, e
 | 
						|
 | 
						|
    def list_buckets(self):
 | 
						|
        resp = self.obsClient.listBuckets()
 | 
						|
        if resp.status < 300:
 | 
						|
            return [b.name for b in resp.body.buckets]
 | 
						|
        else:
 | 
						|
            raise RuntimeError(resp.status, str(resp.reason))
 | 
						|
 | 
						|
    @property
 | 
						|
    def type(self):
 | 
						|
        return 'obs'
 |