mirror of https://github.com/tp4a/teleport
267 lines
6.8 KiB
C++
267 lines
6.8 KiB
C++
#include "stdafx.h"
|
|
#include "ts_cfg.h"
|
|
#include "ts_env.h"
|
|
|
|
|
|
TsCfg g_cfg;
|
|
|
|
TsCfg::TsCfg()
|
|
{}
|
|
|
|
TsCfg::~TsCfg()
|
|
{}
|
|
|
|
bool TsCfg::init(void) {
|
|
ex_astr file_content;
|
|
if (!ex_read_text_file(g_env.m_cfg_file, file_content)) {
|
|
EXLOGE("can not load config file.\n");
|
|
return false;
|
|
}
|
|
|
|
if (!_load(file_content))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
bool TsCfg::save(const ex_astr& new_value)
|
|
{
|
|
if (!_load(new_value))
|
|
return false;
|
|
|
|
Json::StyledWriter jwriter;
|
|
ex_astr val = jwriter.write(m_root);
|
|
|
|
if (!ex_write_text_file(g_env.m_cfg_file, val)) {
|
|
EXLOGE("can not save config file.\n");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool TsCfg::_load(const ex_astr& str_json) {
|
|
Json::Reader jreader;
|
|
|
|
if (!jreader.parse(str_json.c_str(), m_root)) {
|
|
EXLOGE("can not parse new config data, not in json format? %s\n", jreader.getFormattedErrorMessages().c_str());
|
|
return false;
|
|
}
|
|
|
|
ex_astr sel_name;
|
|
size_t i = 0;
|
|
ex_astr tmp;
|
|
|
|
//===================================
|
|
// check ssh config
|
|
//===================================
|
|
|
|
if (!m_root["ssh"].isObject()) {
|
|
EXLOGE("invalid config, error 1.\n");
|
|
return false;
|
|
}
|
|
|
|
if (!m_root["ssh"]["selected"].isString()) {
|
|
EXLOGE("invalid config, error 2.\n");
|
|
return false;
|
|
}
|
|
|
|
sel_name = m_root["ssh"]["selected"].asCString();
|
|
|
|
if (!m_root["ssh"]["available"].isArray() || m_root["ssh"]["available"].size() == 0) {
|
|
EXLOGE("invalid config, error 3.\n");
|
|
return false;
|
|
}
|
|
|
|
for (i = 0; i < m_root["ssh"]["available"].size(); ++i) {
|
|
|
|
if (
|
|
!m_root["ssh"]["available"][i]["name"].isString()
|
|
|| !m_root["ssh"]["available"][i]["app"].isString()
|
|
|| !m_root["ssh"]["available"][i]["cmdline"].isString()
|
|
) {
|
|
EXLOGE("invalid config, error 4.\n");
|
|
return false;
|
|
}
|
|
|
|
if (m_root["ssh"]["available"][i]["display"].isNull()) {
|
|
m_root["ssh"]["available"][i]["display"] = m_root["ssh"]["available"][i]["name"];
|
|
}
|
|
|
|
if (m_root["ssh"]["available"][i]["name"].asCString() != sel_name)
|
|
continue;
|
|
|
|
tmp = m_root["ssh"]["available"][i]["app"].asCString();
|
|
ex_astr2wstr(tmp, ssh_app, EX_CODEPAGE_UTF8);
|
|
tmp = m_root["ssh"]["available"][i]["cmdline"].asCString();
|
|
ex_astr2wstr(tmp, ssh_cmdline, EX_CODEPAGE_UTF8);
|
|
|
|
break;
|
|
}
|
|
|
|
if (ssh_app.length() == 0 || ssh_cmdline.length() == 0) {
|
|
EXLOGE("invalid config, error 6.\n");
|
|
return false;
|
|
}
|
|
|
|
//===================================
|
|
// check scp config
|
|
//===================================
|
|
|
|
if (!m_root["scp"].isObject()) {
|
|
EXLOGE("invalid config, error 1.\n");
|
|
return false;
|
|
}
|
|
|
|
if (!m_root["scp"]["selected"].isString()) {
|
|
EXLOGE("invalid config, error 2.\n");
|
|
return false;
|
|
}
|
|
|
|
sel_name = m_root["scp"]["selected"].asCString();
|
|
|
|
if (!m_root["scp"]["available"].isArray() || m_root["scp"]["available"].size() == 0) {
|
|
EXLOGE("invalid config, error 3.\n");
|
|
return false;
|
|
}
|
|
|
|
for (i = 0; i < m_root["scp"]["available"].size(); ++i) {
|
|
|
|
if (
|
|
!m_root["scp"]["available"][i]["name"].isString()
|
|
|| !m_root["scp"]["available"][i]["app"].isString()
|
|
|| !m_root["scp"]["available"][i]["cmdline"].isString()
|
|
) {
|
|
EXLOGE("invalid config, error 4.\n");
|
|
return false;
|
|
}
|
|
|
|
if (m_root["scp"]["available"][i]["display"].isNull()) {
|
|
m_root["scp"]["available"][i]["display"] = m_root["scp"]["available"][i]["name"];
|
|
}
|
|
|
|
if (m_root["scp"]["available"][i]["name"].asCString() != sel_name)
|
|
continue;
|
|
|
|
tmp = m_root["scp"]["available"][i]["app"].asCString();
|
|
ex_astr2wstr(tmp, scp_app, EX_CODEPAGE_UTF8);
|
|
tmp = m_root["scp"]["available"][i]["cmdline"].asCString();
|
|
ex_astr2wstr(tmp, scp_cmdline, EX_CODEPAGE_UTF8);
|
|
|
|
break;
|
|
}
|
|
|
|
if (scp_app.length() == 0 || scp_cmdline.length() == 0) {
|
|
EXLOGE("invalid config, error 6.\n");
|
|
return false;
|
|
}
|
|
|
|
//===================================
|
|
// check telnet config
|
|
//===================================
|
|
|
|
if (!m_root["telnet"].isObject()) {
|
|
EXLOGE("invalid config, error 1.\n");
|
|
return false;
|
|
}
|
|
|
|
if (!m_root["telnet"]["selected"].isString()) {
|
|
EXLOGE("invalid config, error 2.\n");
|
|
return false;
|
|
}
|
|
|
|
sel_name = m_root["telnet"]["selected"].asCString();
|
|
|
|
if (!m_root["telnet"]["available"].isArray() || m_root["telnet"]["available"].size() == 0) {
|
|
EXLOGE("invalid config, error 3.\n");
|
|
return false;
|
|
}
|
|
|
|
for (i = 0; i < m_root["telnet"]["available"].size(); ++i) {
|
|
|
|
if (
|
|
!m_root["telnet"]["available"][i]["name"].isString()
|
|
|| !m_root["telnet"]["available"][i]["app"].isString()
|
|
|| !m_root["telnet"]["available"][i]["cmdline"].isString()
|
|
) {
|
|
EXLOGE("invalid config, error 4.\n");
|
|
return false;
|
|
}
|
|
|
|
if (m_root["telnet"]["available"][i]["display"].isNull()) {
|
|
m_root["telnet"]["available"][i]["display"] = m_root["telnet"]["available"][i]["name"];
|
|
}
|
|
|
|
if (m_root["telnet"]["available"][i]["name"].asCString() != sel_name)
|
|
continue;
|
|
|
|
tmp = m_root["telnet"]["available"][i]["app"].asCString();
|
|
ex_astr2wstr(tmp, telnet_app, EX_CODEPAGE_UTF8);
|
|
tmp = m_root["telnet"]["available"][i]["cmdline"].asCString();
|
|
ex_astr2wstr(tmp, telnet_cmdline, EX_CODEPAGE_UTF8);
|
|
|
|
break;
|
|
}
|
|
|
|
if (telnet_app.length() == 0 || telnet_cmdline.length() == 0) {
|
|
EXLOGE("invalid config, error 6.\n");
|
|
return false;
|
|
}
|
|
|
|
//===================================
|
|
// check rdp config
|
|
//===================================
|
|
|
|
if (!m_root["rdp"].isObject()) {
|
|
EXLOGE("invalid config, error 1.\n");
|
|
return false;
|
|
}
|
|
|
|
if (!m_root["rdp"]["selected"].isString()) {
|
|
EXLOGE("invalid config, error 2.\n");
|
|
return false;
|
|
}
|
|
|
|
sel_name = m_root["rdp"]["selected"].asCString();
|
|
|
|
if (!m_root["rdp"]["available"].isArray() || m_root["rdp"]["available"].size() == 0) {
|
|
EXLOGE("invalid config, error 3.\n");
|
|
return false;
|
|
}
|
|
|
|
for (i = 0; i < m_root["rdp"]["available"].size(); ++i) {
|
|
|
|
if (
|
|
!m_root["rdp"]["available"][i]["name"].isString()
|
|
|| !m_root["rdp"]["available"][i]["app"].isString()
|
|
|| !m_root["rdp"]["available"][i]["cmdline"].isString()
|
|
) {
|
|
EXLOGE("invalid config, error 4.\n");
|
|
return false;
|
|
}
|
|
|
|
if (m_root["rdp"]["available"][i]["display"].isNull()) {
|
|
m_root["rdp"]["available"][i]["display"] = m_root["rdp"]["available"][i]["name"];
|
|
}
|
|
|
|
if (m_root["rdp"]["available"][i]["name"].asCString() != sel_name)
|
|
continue;
|
|
|
|
tmp = m_root["rdp"]["available"][i]["app"].asCString();
|
|
ex_astr2wstr(tmp, rdp_app, EX_CODEPAGE_UTF8);
|
|
tmp = m_root["rdp"]["available"][i]["cmdline"].asCString();
|
|
ex_astr2wstr(tmp, rdp_cmdline, EX_CODEPAGE_UTF8);
|
|
tmp = m_root["rdp"]["available"][i]["name"].asCString();
|
|
ex_astr2wstr(tmp, rdp_name, EX_CODEPAGE_UTF8);
|
|
|
|
break;
|
|
}
|
|
|
|
if (rdp_app.length() == 0 || rdp_cmdline.length() == 0 || rdp_name.length() == 0) {
|
|
EXLOGE("invalid config, error 6.\n");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|