51 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from docker.errors import DockerException, TLSParameterError, APIError, requests
 | 
						|
 | 
						|
from CTFd.utils import get_config
 | 
						|
 | 
						|
from .docker import get_docker_client
 | 
						|
from .routers import Router, _routers
 | 
						|
 | 
						|
 | 
						|
class WhaleChecks:
 | 
						|
    @staticmethod
 | 
						|
    def check_docker_api():
 | 
						|
        try:
 | 
						|
            client = get_docker_client()
 | 
						|
        except TLSParameterError as e:
 | 
						|
            return f'Docker TLS Parameters incorrect ({e})'
 | 
						|
        except DockerException as e:
 | 
						|
            return f'Docker API url incorrect ({e})'
 | 
						|
        try:
 | 
						|
            client.ping()
 | 
						|
        except (APIError, requests.RequestException):
 | 
						|
            return f'Unable to connect to Docker API, check your API connectivity'
 | 
						|
 | 
						|
        credentials = get_config("whale:docker_credentials")
 | 
						|
        if credentials and credentials.count(':') == 1:
 | 
						|
            try:
 | 
						|
                client.login(*credentials.split(':'))
 | 
						|
            except DockerException:
 | 
						|
                return f'Unable to log into docker registry, check your credentials'
 | 
						|
        swarm = client.info()['Swarm']
 | 
						|
        if not swarm['ControlAvailable']:
 | 
						|
            return f'Docker swarm not available. You should initialize a swarm first. ($ docker swarm init)'
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def check_frp_connection():
 | 
						|
        router_conftype = get_config("whale:router_type", "frp")
 | 
						|
        if router_conftype not in _routers:
 | 
						|
            return "invalid router type: " + router_conftype
 | 
						|
        ok, msg = _routers[router_conftype]().check_availability()
 | 
						|
        if not ok:
 | 
						|
            return msg
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def perform():
 | 
						|
        errors = []
 | 
						|
        for attr in dir(WhaleChecks):
 | 
						|
            if attr.startswith('check_'):
 | 
						|
                err = getattr(WhaleChecks, attr)()
 | 
						|
                if err:
 | 
						|
                    errors.append(err)
 | 
						|
        return errors
 |