Sindbad~EG File Manager

Current Path : /opt/alt/python37/lib/python3.7/site-packages/clcommon/cpapi/plugins/
Upload File :
Current File : //opt/alt/python37/lib/python3.7/site-packages/clcommon/cpapi/plugins/interworx.py

# -*- coding: utf-8 -*-

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import configparser
import re

from typing import Dict  # NOQA

from clcommon.cpapi.cpapiexceptions import NotSupported
from clcommon.cpapi.plugins.universal import _dblogin_cplogin_pairs
from clcommon.const import Feature
from clcommon.cpapi.GeneralPanel import GeneralPanelPluginV1


__cpname__ = 'InterWorx'

PARSE_URI_PATTERN = re.compile(r'(.+)://(.+):(.+)@.*')


IWORX_INI = '/usr/local/interworx/iworx.ini'


# WARN: Probably will be deprecated for our "official" plugins.
# See pluginlib.detect_panel_fast()
def detect():
    return os.path.isfile(IWORX_INI)


def db_access(_conf_path=IWORX_INI):
    access = dict()
    data_config = configparser.ConfigParser(strict=False)
    data_config.read(_conf_path)

    mysql_uri = data_config.get(section='mysql', option='rootdsn').strip('\"')
    parse_result = PARSE_URI_PATTERN.search(mysql_uri)
    (db, login, passwd) = (None, None, None)
    if parse_result:
        (db, login, passwd) = parse_result.group(1, 2, 3)
    access['login'] = login
    access['pass'] = passwd
    access['host'] = data_config.get(section='mysql', option='default_server').strip('\"')
    access['db'] = db
    return access


def cpusers():
    raise NotSupported({
        'message': '%(action)s is not currently supported.',
        'context': {'action': 'Getting all users registered in the Control Panel'}
    })


def dblogin_cplogin_pairs(cplogin_lst=None, with_system_users=False):
    access = db_access()
    data = _dblogin_cplogin_pairs(cplogin_lst=cplogin_lst, access=access)
    return data


def get_user_login_url(domain):
    return 'https://{domain}:2443'.format(domain=domain)


class PanelPlugin(GeneralPanelPluginV1):
    def __init__(self):
        super(PanelPlugin, self).__init__()

    def getCPName(self):
        """
        Return panel name
        :return:
        """
        return __cpname__

    def get_cp_description(self):
        """
        Retrieve panel name and it's version
        :return: dict: { 'name': 'panel_name', 'version': 'panel_version', 'additional_info': 'add_info'}
            or None if can't get info
        """
        try:
            f = open(IWORX_INI, "r")
            out = f.read()
            f.close()
            return {'name': __cpname__,
                    'version': out.split('version')[4].replace('\n', '').replace('=', '').replace('"', '').split('[')[0],
                    'additional_info': None}
        except:
            return None

    def db_access(self):
        """
        Getting root access to mysql database.
        For example {'login': 'root', 'db': 'mysql', 'host': 'localhost', 'pass': '9pJUv38sAqqW'}

        :return: root access to mysql database
        :rtype: dict
        :raises: NoDBAccessData
        """
        return db_access()

    @staticmethod
    def useraliases(cpuser, domain):
        """
        Return aliases from user domain
        :param str|unicode cpuser: user login
        :param str|unicode domain:
        :return list of aliases
        """
        return []

    def cpusers(self):
        """
        Generates a list of cpusers registered in the control panel

        :return: list of cpusers registered in the control panel
        :rtype: tuple
        """
        return cpusers()

    def get_user_login_url(self, domain):
        """
        Get login url for current panel;
        :type domain: str
        :rtype: str
        """
        return get_user_login_url(domain)

    def get_supported_cl_features(self) -> Dict[str, bool]:
        supported_features = super(PanelPlugin, self).get_supported_cl_features()
        return {
            **supported_features,
            Feature.PHP_SELECTOR: True,
            Feature.RUBY_SELECTOR: False,
            Feature.PYTHON_SELECTOR: False,
            Feature.NODEJS_SELECTOR: False,
            Feature.LSAPI: True,
            Feature.GOVERNOR: True,
            Feature.CAGEFS: True,
            Feature.RESELLER_LIMITS: False,
            Feature.WPOS: False,
        }


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists