예제 #1
0
 def node_schains_list():
     logger.debug(request)
     node_id = config.id
     if node_id is None:
         return construct_err_response(HTTPStatus.BAD_REQUEST, ['No node installed'])
     schains_list = skale.schains_data.get_schains_for_node(node_id)
     return construct_ok_response(schains_list)
예제 #2
0
 def get_schain_config_route():
     logger.debug(request)
     schain_name = request.args.get('schain-name')
     # todo: handle - if schain name is empty or invalid
     schain_config = get_schain_config(schain_name)
     skale_schain_config = schain_config['skaleConfig']
     return construct_ok_response(skale_schain_config)
예제 #3
0
    def register_node():
        logger.debug(request)
        if not request.json:
            abort(400)

        ip = request.json.get('ip')
        public_ip = request.json.get('publicIP')
        port = request.json.get('port')
        name = request.json.get('name')

        is_node_name_available = skale.nodes_data.is_node_name_available(name)
        if not is_node_name_available:
            error_msg = f'Node name is already taken: {name}'
            logger.error(error_msg)
            return construct_err_response(HTTPStatus.BAD_REQUEST, [error_msg])

        is_node_ip_available = skale.nodes_data.is_node_ip_available(ip)
        if not is_node_ip_available:
            error_msg = f'Node IP is already taken: {ip}'
            logger.error(error_msg)
            return construct_err_response(HTTPStatus.BAD_REQUEST, [error_msg])

        res = node.register(ip, public_ip, port, name)
        if res['status'] != 1:
            return construct_err_response(HTTPStatus.INTERNAL_SERVER_ERROR,
                                          res['errors'])
        return construct_ok_response(res['data'])
예제 #4
0
 def owner_schains():
     logger.debug(request)
     schains = skale.schains_data.get_schains_for_owner(skale.wallet.address)
     for schain in schains:
         nodes = skale.schains_data.get_nodes_for_schain_config(schain['name'])
         schain['nodes'] = nodes
     return construct_ok_response(schains)
예제 #5
0
    def status():
        logger.debug(request)
        if is_ssl_folder_empty():
            return construct_ok_response({'status': 0})

        cert_file = os.path.join(SSL_CERTIFICATES_FILEPATH, 'ssl_cert')
        cert = crypto.load_certificate(crypto.FILETYPE_PEM,
                                       open(cert_file).read())

        subject = cert.get_subject()
        issued_to = subject.CN
        expiration_date_raw = cert.get_notAfter()
        expiration_date = parser.parse(expiration_date_raw).strftime(
            '%Y-%m-%dT%H:%M:%S')
        return construct_ok_response({
            'issued_to': issued_to,
            'expiration_date': expiration_date,
            'status': 1
        })
예제 #6
0
def sgx_status():
    logger.debug(request)
    sgx = SgxClient(SGX_SERVER_URL, SGX_CERTIFICATES_FOLDER)
    try:
        status = sgx.get_server_status()
    except Exception:  # todo: catch specific error - edit sgx.py
        status = 1
    res = {
        'status': status,
        'status_name': SGXStatus(status).name,
        'sgx_server_url': SGX_SERVER_URL
    }
    return construct_ok_response(res)
예제 #7
0
 def get_metrics():
     since = convert_to_date(request.args.get('since'))
     till = convert_to_date(request.args.get('till'))
     limit = request.args.get('limit')
     fast = request.args.get('fast') == 'True'
     wei = request.args.get('wei') == 'True'
     if fast:
         metrics, total_bounty = get_metrics_from_db(
             since, till, limit, wei)
     else:
         metrics, total_bounty = get_metrics_from_events(
             since, till, limit, wei)
     return construct_ok_response({
         'metrics': metrics,
         'total': total_bounty
     })
예제 #8
0
    def about_node():
        logger.debug(request)

        node_about = {
            'libraries': {
                'javascript': 'N/A',  # get_js_package_version(),
                'skale.py': pkg_resources.get_distribution(SKALE_LIB_NAME).version
            },
            'contracts': {
                'token': skale.token.address,
                'manager': skale.manager.address,
            },
            'network': {
                'endpoint': ENDPOINT
            },
        }
        return construct_ok_response(node_about)
예제 #9
0
    def upload():
        request_json = json.loads(request.form['json'])
        force = request_json.get('force') is True

        if not is_ssl_folder_empty() and not force:
            return construct_bad_req_response(CERTS_UPLOADED_ERR_MSG)
        if SSL_KEY_NAME not in request.files or SSL_CRT_NAME not in request.files:
            return construct_bad_req_response(NO_REQUIRED_FILES_ERR_MSG)

        ssl_key = request.files[SSL_KEY_NAME]
        ssl_cert = request.files[SSL_CRT_NAME]
        ssl_key.save(os.path.join(SSL_CERTIFICATES_FILEPATH, SSL_KEY_NAME))
        ssl_cert.save(os.path.join(SSL_CERTIFICATES_FILEPATH, SSL_CRT_NAME))

        docker_utils.restart_all_schains()

        return construct_ok_response()
예제 #10
0
 def dkg_status():
     logger.debug(request)
     _all = request.args.get('all') == 'True'
     dkg_statuses = SChainRecord.get_statuses(_all)
     return construct_ok_response(dkg_statuses)
예제 #11
0
 def schains_containers_list():
     logger.debug(request)
     _all = request.args.get('all') == 'True'
     containers_list = docker_utils.get_all_schain_containers(all=_all, format=True)
     return construct_ok_response(containers_list)
예제 #12
0
 def containers_healthcheck():
     logger.debug(request)
     containers_list = docker_utils.get_all_skale_containers(all=all, format=True)
     return construct_ok_response(containers_list)
예제 #13
0
 def check_node_name():
     logger.debug(request)
     node_name = request.args.get('nodeName')
     res = skale.nodes_data.is_node_name_available(node_name)
     return construct_ok_response(res)
예제 #14
0
 def uninstall_node():
     logger.debug(request)
     res = node.uninstall()
     return construct_ok_response(res)
예제 #15
0
 def node_info():
     logger.debug(request)
     return construct_ok_response(node.info)
예제 #16
0
 def load_wallet():
     logger.debug(request)
     res = wallet_with_balance(skale)
     return construct_ok_response(res)
예제 #17
0
 def check_node_ip():
     logger.debug(request)
     node_ip = request.args.get('nodeIp')
     res = skale.nodes_data.is_node_ip_available(node_ip)
     return construct_ok_response(res)
예제 #18
0
 def get_rpc_credentials():
     logger.debug(request)
     rpc_credentials = {
         'endpoint': ENDPOINT
     }
     return construct_ok_response(rpc_credentials)