installcacic.cpp 6.27 KB
#include "installcacic.h"

InstallCacic::InstallCacic(QObject *parent) :
    QObject(parent)
{
    logManager = QLogger::QLoggerManager::getInstance();
    logManager->addDestination(this->applicationDirPath + "/Logs/cacicLog.txt","Install Cacic",QLogger::InfoLevel);
    logManager->addDestination(this->applicationDirPath + "/Logs/cacicLog.txt","Install Cacic",QLogger::ErrorLevel);
}

InstallCacic::~InstallCacic()
{
    logManager->closeLogger();
}

void InstallCacic::run(QStringList argv, int argc) {

    QLogger::QLog_Info("Install Cacic", QString("Inicio de instalacao"));

    oCacicComm = new CacicComm();

    bool ok;
    //valida os parametros repassados
    QMap<QString, QString> param = validaParametros(argv, argc, &ok);
    //se tiver usuario, senha e url
    if (ok){
        oCacicComm->setUrlGerente(this->argumentos["host"]);
        oCacicComm->setUsuario(this->argumentos["user"]);
        oCacicComm->setPassword(this->argumentos["pass"]);
        QJsonObject jsonLogin = oCacicComm->login(&ok);
        if (ok){
            QJsonObject jsonComm;
            QLogger::QLog_Debug("Install", "Login: " + jsonLogin["reply"].toObject()["chavecript"].toString());
            //conectado, grava a chave na classe;
            oCacic.setChaveCrypt(jsonLogin["reply"].toObject()["chavecrip"].toString());
            jsonComm["computador"] = oCacicComputer.toJsonObject();
            QJsonObject configs = oCacicComm->comm("/ws/neo/config", &ok, jsonComm);
            if (ok){
                oCacicComm->setUrlGerente(configs["reply"].toObject()["applicationUrl"].toString());
#ifdef Q_OS_WIN
                oCacic.setCacicMainFolder(configs["reply"].toObject()["cacic_main_folder"].isString() ?
                                          configs["reply"].toObject()["cacic_main_folder"].toString() :
                                          "c:/cacic/");
#elif defined(Q_OS_LINUX)
                oCacic.setCacicMainFolder(configs["reply"].toObject()["cacic_main_folder"].isString() ?
                                          configs["reply"].toObject()["cacic_main_folder"].toString() :
                                          "/usr/cacic");
#endif

                oCacic.createFolder(oCacic.getCacicMainFolder());
                //grava chave em registro;
                QVariantMap registro;
                registro["key"] = oCacic.getChaveCrypt();
                registro["mainFolder"] = oCacic.getCacicMainFolder();
                oCacic.setValueToRegistry("Lightbase", "Cacic", registro);
                //starta o processo do cacic.

                //TO DO: Fazer download do serviço
    #ifdef Q_OS_WIN
                oCacicComm->ftpDownload("agentes/cacic-service.exe", oCacic.getCacicMainFolder());

                QString exitStatus = oCacic.startProcess(oCacic.getCacicMainFolder() + "cacic-service.exe",
                                                         false,
                                                         &ok,
                                                         QStringList("-install");
    #else
                oCacicComm->ftpDownload("agentes/cacic-service", oCacic.getCacicMainFolder());

                QJsonObject configsJson = configs["reply"].toObject();
                QString senhaAgente;
                if ( !configsJson["te_senha_adm_agente"].isNull() )
                    senhaAgente = configsJson["te_senha_adm_agente"].toString();
                else
                    senhaAgente = QString("ADMINCACIC");

                QStringList arguments;
                arguments.append(QString("-install"));
                arguments.append(QString("cacic"));
                arguments.append(senhaAgente);
                QString exitStatus = oCacic.startProcess(oCacic.getCacicMainFolder() + "cacic-service",
                                                         false,
                                                         &ok,
                                                         arguments);
    #endif
                if (!ok)
                    std::cout << "Erro ao iniciar o processo: "
                              << exitStatus.toStdString() << "\n";
                else {
                    std::cout << "Instalação realizada com sucesso." << "\n";
                }
            } else {
                std::cout << "Falha ao pegar configurações: " << configs["error"].toString().toStdString() << "\n";
            }

        } else
            std::cout << "Nao foi possivel realizar o login.\n  "
                      << jsonLogin["error"].toString().toStdString() << "\n";
    } else if ((param.contains("default")) && (param["default"] == "uninstall")){
        oCacic.deleteFolder("c:/cacic");
        oCacic.removeRegistry("Lightbase", "Cacic");
        std::cout << "Cacic desinstalado com sucesso.\n";
    } else {
        std::cout << "\nInstalador do Agente Cacic.\n\n"
                  << "Parametros incorretos. (<obrigatorios> [opcional])\n\n"
                  << "<-host=url_gerente> <-user=usuario> <-password=senha> [-help]\n\n"
                  << "  <-host=url_gerente>       url_gerente: Caminho para a aplicação do gerente.\n"
                  << "  <-user=usuario>           usuario: usuário de login no gerente.\n"
                  << "  <-pass=senha>             senha: senha de login no gerente\n"
                  << "  [-help]                   Lista todos comandos.\n";
    }


    emit finished();
}

QMap<QString, QString> InstallCacic::validaParametros(QStringList argv, int argc, bool *ok)
{
    QMap<QString, QString> map;
    for (int i = 0; i<argc; i++){
        QString aux = argv[i];
        QStringList auxList = aux.split("=");
        if ((auxList.at(0).at(0) == '-') && (auxList.size() > 1))
            map[auxList.at(0).mid(1)] = auxList.at(1);
        else if (aux.at(0)== '-')
            map["default"] = aux.mid(1);
    }
    *ok = (bool) map.contains("host") && map.contains("user") && map.contains("pass");
    if (*ok){
        this->argumentos = map;
    }
    return map;
}
QString InstallCacic::getApplicationDirPath() const
{
    return applicationDirPath;
}

void InstallCacic::setApplicationDirPath(const QString &value)
{
    applicationDirPath = value;
}


QMap<QString, QString> InstallCacic::getArgumentos()
{
    return argumentos;
}

void InstallCacic::setArgumentos(QMap<QString, QString> value)
{
    this->argumentos = value;
}