使用tornado的异步请求方式解决了core和web相互调用时tornado无法响应的问题,目前普通用户SSH登录功能可用了,但是还有大量代码需要调整为异步方式。
							parent
							
								
									411eab32f0
								
							
						
					
					
						commit
						6d43737a78
					
				| 
						 | 
				
			
			@ -6,7 +6,7 @@
 | 
			
		|||
 | 
			
		||||
#include <ex/ex_str.h>
 | 
			
		||||
 | 
			
		||||
#include <json/json.h>
 | 
			
		||||
//#include <json/json.h>
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <functional>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -64,20 +64,20 @@ sqlite3* TsDB::get_db()
 | 
			
		|||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TsDB::get_auth_info(int auth_id, TS_DB_AUTH_INFO& info)
 | 
			
		||||
bool TsDB::get_auth_info(int auth_id, Json::Value& jret)
 | 
			
		||||
{
 | 
			
		||||
	Json::FastWriter json_writer;
 | 
			
		||||
	Json::Value json_req;
 | 
			
		||||
	json_req["method"] = "get_auth_info";
 | 
			
		||||
	json_req["param"]["authid"] = auth_id;
 | 
			
		||||
	
 | 
			
		||||
	Json::Value jreq;
 | 
			
		||||
	jreq["method"] = "get_auth_info";
 | 
			
		||||
	jreq["param"]["authid"] = auth_id;
 | 
			
		||||
 | 
			
		||||
	ex_astr json_param;
 | 
			
		||||
	json_param = json_writer.write(json_req);
 | 
			
		||||
	json_param = json_writer.write(jreq);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 	char tmp[128] = { 0 };
 | 
			
		||||
// 	ex_strformat(tmp, 127, "{\"method\":\"get_auth_info\",\"param\":[\"authid\":%d]}", auth_id);
 | 
			
		||||
// 
 | 
			
		||||
	// 	char tmp[128] = { 0 };
 | 
			
		||||
	// 	ex_strformat(tmp, 127, "{\"method\":\"get_auth_info\",\"param\":[\"authid\":%d]}", auth_id);
 | 
			
		||||
	// 
 | 
			
		||||
	ex_astr param;
 | 
			
		||||
	//ts_url_encode("{\"method\":\"get_auth_info\",\"param\":[]}", param);
 | 
			
		||||
	ts_url_encode(json_param.c_str(), param);
 | 
			
		||||
| 
						 | 
				
			
			@ -92,8 +92,53 @@ bool TsDB::get_auth_info(int auth_id, TS_DB_AUTH_INFO& info)
 | 
			
		|||
		EXLOGV("\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// {'account_lock': 0, 'encrypt': 1, 'account_name': 'apexliu', 'host_port': 22, 'cert_id': 0, 'user_name': 'root',
 | 
			
		||||
	// 'auth_mode': 1, 'sys_type': 2, 'host_ip': '120.26.109.25', 'user_param': 'ogin:\nassword:',
 | 
			
		||||
	// 'user_pswd': '40V4q3cT4/HT59YaSq8IVJjz0tBV2dmPbViZ4nCnWc4=', 'protocol': 2}
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
	// {'user_auth': '40V4q3cT4/HT59YaSq8IVJjz0tBV2dmPbViZ4nCnWc4=', 'protocol': 2, 'auth_mode': 1, 'user_name': 'root', 'account_lock': 0, 'user_param': 'ogin:\nassword:', 'host_ip': '120.26.109.25', 'sys_type': 2, 'encrypt': 1, 'account_name': 'apexliu', 'host_port': 22}
 | 
			
		||||
	// {"message": "", "code" : 0, "data" : {"user_auth": "40V4q3cT4/HT59YaSq8IVJjz0tBV2dmPbViZ4nCnWc4=", "protocol": 2, "auth_mode": 1, "user_name": "root", "account_lock": 0, "user_param": "ogin : \nassword : ", "host_ip": "120.26.109.25", "sys_type": 2, "encrypt": 1, "account_name": "apexliu", "host_port": 22}}
 | 
			
		||||
	Json::Reader jreader;
 | 
			
		||||
 | 
			
		||||
	if (!jreader.parse(body.c_str(), jret))
 | 
			
		||||
		return false;
 | 
			
		||||
	if (!jret.isObject())
 | 
			
		||||
		return false;
 | 
			
		||||
	if (!jret["data"].isObject())
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	Json::Value& _jret = jret["data"];
 | 
			
		||||
 | 
			
		||||
	if (
 | 
			
		||||
		!_jret["host_ip"].isString()
 | 
			
		||||
		|| !_jret["host_port"].isInt()
 | 
			
		||||
		|| !_jret["sys_type"].isInt()
 | 
			
		||||
		|| !_jret["protocol"].isInt()
 | 
			
		||||
		|| !_jret["auth_mode"].isInt()
 | 
			
		||||
		|| !_jret["account_lock"].isInt()
 | 
			
		||||
		|| !_jret["user_name"].isString()
 | 
			
		||||
		|| !_jret["user_auth"].isString()
 | 
			
		||||
		|| !_jret["user_param"].isString()
 | 
			
		||||
		|| !_jret["account_name"].isString()
 | 
			
		||||
		)
 | 
			
		||||
	{
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
// 	info.host_ip = jret["host_ip"].asString();
 | 
			
		||||
// 	info.host_port = jret["host_port"].asInt();
 | 
			
		||||
// 	info.host_lock = 0;
 | 
			
		||||
// 	info.sys_type = jret["sys_type"].asInt();
 | 
			
		||||
// 	info.protocol = jret["protocol"].asInt();
 | 
			
		||||
// 	info.is_encrypt = true;
 | 
			
		||||
// 	info.auth_mode = jret["auth_mode"].asInt();
 | 
			
		||||
// 	info.account_lock = jret["account_lock"].asInt();
 | 
			
		||||
// 	info.user_name = jret["user_name"].asString();
 | 
			
		||||
// 	info.user_auth = jret["user_auth"].asString();
 | 
			
		||||
// 	info.user_param = jret["user_param"].asString();
 | 
			
		||||
// 	info.account_name = jret["account_name"].asString();
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// bool TsDB::get_auth_info(int auth_id, TS_DB_AUTH_INFO& info)
 | 
			
		||||
| 
						 | 
				
			
			@ -252,50 +297,50 @@ bool TsDB::get_auth_info(int auth_id, TS_DB_AUTH_INFO& info)
 | 
			
		|||
// 	return bFind;
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
bool TsDB::get_cert_pri(int cert_id, ex_astr& cert_pri)
 | 
			
		||||
{
 | 
			
		||||
	int result = 0;
 | 
			
		||||
	char * errmsg = NULL;
 | 
			
		||||
	char **dbResult;
 | 
			
		||||
	int nRow, nColumn;
 | 
			
		||||
	int i, j;
 | 
			
		||||
	int index;
 | 
			
		||||
 | 
			
		||||
	sqlite3* sql_exec = get_db();
 | 
			
		||||
	if (sql_exec == NULL)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	char szSQL[256] = { 0 };
 | 
			
		||||
	ex_strformat(szSQL, 256, "SELECT a.cert_pri as cert_pri FROM ts_cert as a WHERE a.cert_id=%d", cert_id);
 | 
			
		||||
 | 
			
		||||
	result = sqlite3_get_table(sql_exec, szSQL, &dbResult, &nRow, &nColumn, &errmsg);
 | 
			
		||||
	if (result != 0)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	//²éѯÊÇ·ñ´æÔÚ±í
 | 
			
		||||
	index = nColumn;
 | 
			
		||||
	for (i = 0; i < nRow; i++)
 | 
			
		||||
	{
 | 
			
		||||
		mapStringKey mapstringKey;
 | 
			
		||||
		for (j = 0; j < nColumn; j++)
 | 
			
		||||
		{
 | 
			
		||||
			ex_astr temp = dbResult[j];
 | 
			
		||||
			if (dbResult[index] == NULL)
 | 
			
		||||
				mapstringKey[dbResult[j]] = "";
 | 
			
		||||
			else
 | 
			
		||||
				mapstringKey[dbResult[j]] = dbResult[index];
 | 
			
		||||
 | 
			
		||||
			++index;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		mapStringKey::iterator it = mapstringKey.find("cert_pri");
 | 
			
		||||
		if (it != mapstringKey.end())
 | 
			
		||||
			cert_pri = it->second.c_str();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sqlite3_free_table(dbResult);
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
// bool TsDB::get_cert_pri(int cert_id, ex_astr& cert_pri)
 | 
			
		||||
// {
 | 
			
		||||
// 	int result = 0;
 | 
			
		||||
// 	char * errmsg = NULL;
 | 
			
		||||
// 	char **dbResult;
 | 
			
		||||
// 	int nRow, nColumn;
 | 
			
		||||
// 	int i, j;
 | 
			
		||||
// 	int index;
 | 
			
		||||
// 
 | 
			
		||||
// 	sqlite3* sql_exec = get_db();
 | 
			
		||||
// 	if (sql_exec == NULL)
 | 
			
		||||
// 		return false;
 | 
			
		||||
// 
 | 
			
		||||
// 	char szSQL[256] = { 0 };
 | 
			
		||||
// 	ex_strformat(szSQL, 256, "SELECT a.cert_pri as cert_pri FROM ts_cert as a WHERE a.cert_id=%d", cert_id);
 | 
			
		||||
// 
 | 
			
		||||
// 	result = sqlite3_get_table(sql_exec, szSQL, &dbResult, &nRow, &nColumn, &errmsg);
 | 
			
		||||
// 	if (result != 0)
 | 
			
		||||
// 		return false;
 | 
			
		||||
// 
 | 
			
		||||
// 	//²éѯÊÇ·ñ´æÔÚ±í
 | 
			
		||||
// 	index = nColumn;
 | 
			
		||||
// 	for (i = 0; i < nRow; i++)
 | 
			
		||||
// 	{
 | 
			
		||||
// 		mapStringKey mapstringKey;
 | 
			
		||||
// 		for (j = 0; j < nColumn; j++)
 | 
			
		||||
// 		{
 | 
			
		||||
// 			ex_astr temp = dbResult[j];
 | 
			
		||||
// 			if (dbResult[index] == NULL)
 | 
			
		||||
// 				mapstringKey[dbResult[j]] = "";
 | 
			
		||||
// 			else
 | 
			
		||||
// 				mapstringKey[dbResult[j]] = dbResult[index];
 | 
			
		||||
// 
 | 
			
		||||
// 			++index;
 | 
			
		||||
// 		}
 | 
			
		||||
// 
 | 
			
		||||
// 		mapStringKey::iterator it = mapstringKey.find("cert_pri");
 | 
			
		||||
// 		if (it != mapstringKey.end())
 | 
			
		||||
// 			cert_pri = it->second.c_str();
 | 
			
		||||
// 	}
 | 
			
		||||
// 
 | 
			
		||||
// 	sqlite3_free_table(dbResult);
 | 
			
		||||
// 	return true;
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// bool TsDB::get_host_count(int& count)
 | 
			
		||||
// {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
 | 
			
		||||
#include "ts_session.h"
 | 
			
		||||
 | 
			
		||||
#include <json/json.h>
 | 
			
		||||
#include <sqlite3.h>
 | 
			
		||||
#include <ex.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -67,11 +68,11 @@ public:
 | 
			
		|||
	~TsDB();
 | 
			
		||||
 | 
			
		||||
	// 根据认证ID获取认证信息(包括服务器IP、端口,用户名、密码或私钥、协议如RDP或SSH等等)
 | 
			
		||||
	bool get_auth_info(int auth_id, TS_DB_AUTH_INFO& info);
 | 
			
		||||
	bool get_auth_info(int auth_id, Json::Value& jret);
 | 
			
		||||
 | 
			
		||||
	bool get_cert_pri(int cert_id, ex_astr& cert_pri);
 | 
			
		||||
// 	bool get_cert_pri(int cert_id, ex_astr& cert_pri);
 | 
			
		||||
	// 授权的主机数量
 | 
			
		||||
	bool get_host_count(int& count);
 | 
			
		||||
// 	bool get_host_count(int& count);
 | 
			
		||||
 | 
			
		||||
	// 重置log日志状态
 | 
			
		||||
	bool update_reset_log();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -143,6 +143,7 @@ void TsHttpRpc::_mg_event_handler(struct mg_connection *nc, int ev, void *ev_dat
 | 
			
		|||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				EXLOGV("[core-rpc] got request method `%s`\n", method.c_str());
 | 
			
		||||
				_this->_process_request(method, json_param, ret_buf);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -284,26 +285,98 @@ void TsHttpRpc::_rpc_func_request_session(const Json::Value& json_param, ex_astr
 | 
			
		|||
 | 
			
		||||
	int authid = 0;
 | 
			
		||||
 | 
			
		||||
	ex_astr host_ip;
 | 
			
		||||
	int host_port = 0;
 | 
			
		||||
	int sys_type = 0;
 | 
			
		||||
	ex_astr user_name;
 | 
			
		||||
	ex_astr user_auth;
 | 
			
		||||
	ex_astr user_param;
 | 
			
		||||
	
 | 
			
		||||
	ex_astr account_name;
 | 
			
		||||
	bool account_lock = true;
 | 
			
		||||
	int auth_mode = 0;
 | 
			
		||||
	int protocol = 0;
 | 
			
		||||
	int is_enc = 1;
 | 
			
		||||
 | 
			
		||||
	// TODO: 如果authid为正整数,这是一个长期保留的认证ID,如果是负整数,这是一个临时的认证ID(用于连接测试),如果为0,则报错
 | 
			
		||||
	if (!json_param["authid"].isNull())
 | 
			
		||||
	{
 | 
			
		||||
		// 使用认证ID的方式申请SID
 | 
			
		||||
		if (!json_param["authid"].isNumeric())
 | 
			
		||||
		if (!json_param["authid"].isInt())
 | 
			
		||||
		{
 | 
			
		||||
			_create_json_ret(buf, TSR_INVALID_JSON_PARAM);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		authid = json_param["authid"].asUInt();
 | 
			
		||||
 | 
			
		||||
		authid = json_param["authid"].asInt();
 | 
			
		||||
 | 
			
		||||
		TS_DB_AUTH_INFO ts_auth_info;
 | 
			
		||||
		if (!g_db.get_auth_info(authid, ts_auth_info))
 | 
			
		||||
		Json::Value jret;
 | 
			
		||||
		if (!g_db.get_auth_info(authid, jret))
 | 
			
		||||
		{
 | 
			
		||||
			_create_json_ret(buf, TSR_GETAUTH_INFO_ERROR);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Json::Value& _jret = jret["data"];
 | 
			
		||||
 | 
			
		||||
		host_ip = _jret["host_ip"].asString();
 | 
			
		||||
		host_port = _jret["host_port"].asInt();
 | 
			
		||||
		//host_lock = 0;
 | 
			
		||||
		sys_type = _jret["sys_type"].asInt();
 | 
			
		||||
		protocol = _jret["protocol"].asInt();
 | 
			
		||||
		is_enc = _jret["encrypt"].asInt() == 0 ? false : true;
 | 
			
		||||
		auth_mode = _jret["auth_mode"].asInt();
 | 
			
		||||
		account_lock = _jret["account_lock"].asInt() == 0 ? true : false;
 | 
			
		||||
		user_name = _jret["user_name"].asString();
 | 
			
		||||
		user_auth = _jret["user_auth"].asString();
 | 
			
		||||
		user_param = _jret["user_param"].asString();
 | 
			
		||||
		account_name = _jret["account_name"].asString();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_create_json_ret(buf, TSR_FAILED);
 | 
			
		||||
 | 
			
		||||
	// 进一步判断参数是否合法
 | 
			
		||||
	if (host_ip.length() == 0 || host_port >= 65535 || account_name.length() == 0 
 | 
			
		||||
		|| !(auth_mode == TS_AUTH_MODE_NONE || auth_mode == TS_AUTH_MODE_PASSWORD || auth_mode == TS_AUTH_MODE_PRIVATE_KEY)
 | 
			
		||||
		|| !(protocol == TS_PROXY_PROTOCOL_RDP || protocol == TS_PROXY_PROTOCOL_SSH || protocol == TS_PROXY_PROTOCOL_TELNET)
 | 
			
		||||
		//|| !(is_enc == 0 || is_enc == 1)
 | 
			
		||||
		)
 | 
			
		||||
	{
 | 
			
		||||
		_create_json_ret(buf, TSR_INVALID_JSON_PARAM);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(is_enc)
 | 
			
		||||
	{
 | 
			
		||||
		if (user_auth.length() > 0)
 | 
			
		||||
		{
 | 
			
		||||
			ex_astr _auth;
 | 
			
		||||
			if (!ts_db_field_decrypt(user_auth, _auth))
 | 
			
		||||
			{
 | 
			
		||||
				_create_json_ret(buf, TSR_FAILED);
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			user_auth = _auth;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 生成一个session-id(内部会避免重复)
 | 
			
		||||
	ex_astr sid;
 | 
			
		||||
	ex_rv rv = g_session_mgr.request_session(sid, account_name, authid, 
 | 
			
		||||
		host_ip, host_port, sys_type, protocol, 
 | 
			
		||||
		user_name, user_auth, user_param, auth_mode);
 | 
			
		||||
	if (rv != TSR_OK)
 | 
			
		||||
	{
 | 
			
		||||
		_create_json_ret(buf, rv);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	EXLOGD("[core-rpc] new session-id: %s\n", sid.c_str());
 | 
			
		||||
 | 
			
		||||
	Json::Value jr_data;
 | 
			
		||||
	jr_data["sid"] = sid;
 | 
			
		||||
 | 
			
		||||
	_create_json_ret(buf, TSR_OK, jr_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// void TsHttpRpc::_rpc_func_request_session(const ex_astr& func_args, ex_astr& buf)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ private:
 | 
			
		|||
	void _process_request(const ex_astr& func_cmd, const Json::Value& json_param, ex_astr& buf);
 | 
			
		||||
 | 
			
		||||
	//void _create_json_ret(ex_astr& buf, Json::Value& jr_root);
 | 
			
		||||
	void _create_json_ret(ex_astr& buf, int errcode, const Json::Value& jr_root);
 | 
			
		||||
	void _create_json_ret(ex_astr& buf, int errcode, const Json::Value& jr_data);
 | 
			
		||||
	void _create_json_ret(ex_astr& buf, int errcode);
 | 
			
		||||
	void _create_json_ret(ex_astr& buf, int errcode, const char* message);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import json
 | 
			
		||||
import urllib.parse
 | 
			
		||||
import tornado.gen
 | 
			
		||||
import tornado.httpclient
 | 
			
		||||
 | 
			
		||||
from .configs import app_cfg
 | 
			
		||||
 | 
			
		||||
cfg = app_cfg()
 | 
			
		||||
 | 
			
		||||
__all__ = ['async_post_http']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@tornado.gen.coroutine
 | 
			
		||||
def async_post_http(url, values):
 | 
			
		||||
    try:
 | 
			
		||||
        v = json.dumps(values)
 | 
			
		||||
        data = urllib.parse.quote(v).encode('utf-8')
 | 
			
		||||
 | 
			
		||||
        c = tornado.httpclient.AsyncHTTPClient()
 | 
			
		||||
        r = yield c.fetch(url, body=data, method='POST')
 | 
			
		||||
 | 
			
		||||
        return json.loads(r.body.decode())
 | 
			
		||||
 | 
			
		||||
        # return r.body
 | 
			
		||||
    except:
 | 
			
		||||
        # return {'code': -2, 'message': 'can not fetch {}'.format(url)}
 | 
			
		||||
        return None
 | 
			
		||||
| 
						 | 
				
			
			@ -6,9 +6,12 @@ import os
 | 
			
		|||
import urllib
 | 
			
		||||
import urllib.parse
 | 
			
		||||
import urllib.request
 | 
			
		||||
import tornado.gen
 | 
			
		||||
import tornado.httpclient
 | 
			
		||||
 | 
			
		||||
from eom_app.app.configs import app_cfg
 | 
			
		||||
from eom_app.module import set
 | 
			
		||||
# from eom_app.module import set
 | 
			
		||||
from eom_app.app.util import *
 | 
			
		||||
from eom_app.module import host
 | 
			
		||||
from eom_app.module.common import *
 | 
			
		||||
from eom_common.eomcore.logger import *
 | 
			
		||||
| 
						 | 
				
			
			@ -770,36 +773,46 @@ class UpdateHostExtendInfo(SwxAuthJsonHandler):
 | 
			
		|||
            self.write_json(-1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def post_http(url, values):
 | 
			
		||||
    try:
 | 
			
		||||
        # log.v('post_http(), url={}\n'.format(url))
 | 
			
		||||
 | 
			
		||||
        user_agent = 'Mozilla/4.0 (compatible;MSIE 5.5; Windows NT)'
 | 
			
		||||
        # values = {
 | 
			
		||||
        #     'act': 'login',
 | 
			
		||||
        #     'login[email]': 'yzhang@i9i8.com',
 | 
			
		||||
        #     'login[password]': '123456'
 | 
			
		||||
        # }
 | 
			
		||||
        values = json.dumps(values)
 | 
			
		||||
        data = urllib.parse.quote(values).encode('utf-8')
 | 
			
		||||
        headers = {'User-Agent': user_agent}
 | 
			
		||||
        req = urllib.request.Request(url=url, data=data, headers=headers)
 | 
			
		||||
        response = urllib.request.urlopen(req, timeout=3)
 | 
			
		||||
        the_page = response.read()
 | 
			
		||||
        info = response.info()
 | 
			
		||||
        _zip = info.get('Content-Encoding')
 | 
			
		||||
        if _zip == 'gzip':
 | 
			
		||||
            the_page = gzip.decompress(the_page)
 | 
			
		||||
        else:
 | 
			
		||||
            pass
 | 
			
		||||
        the_page = the_page.decode()
 | 
			
		||||
        # print(the_page)
 | 
			
		||||
        return the_page
 | 
			
		||||
    except:
 | 
			
		||||
        return None
 | 
			
		||||
# @tornado.gen.coroutine
 | 
			
		||||
# def post_http(url, values):
 | 
			
		||||
#     try:
 | 
			
		||||
#         # log.v('post_http(), url={}\n'.format(url))
 | 
			
		||||
#
 | 
			
		||||
#         # user_agent = 'Mozilla/4.0 (compatible;MSIE 5.5; Windows NT)'
 | 
			
		||||
#         # values = {
 | 
			
		||||
#         #     'act': 'login',
 | 
			
		||||
#         #     'login[email]': 'yzhang@i9i8.com',
 | 
			
		||||
#         #     'login[password]': '123456'
 | 
			
		||||
#         # }
 | 
			
		||||
#         values = json.dumps(values)
 | 
			
		||||
#         data = urllib.parse.quote(values).encode('utf-8')
 | 
			
		||||
#         # headers = {'User-Agent': user_agent}
 | 
			
		||||
#
 | 
			
		||||
#         # req = urllib.request.Request(url=url, data=data, headers=headers)
 | 
			
		||||
#         # response = urllib.request.urlopen(req, timeout=3)
 | 
			
		||||
#
 | 
			
		||||
#         client = tornado.httpclient.AsyncHTTPClient()
 | 
			
		||||
#         r = yield client.fetch(url, body=data, method='POST')
 | 
			
		||||
#         print('----------', r.body)
 | 
			
		||||
#         return r.body
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
#         # the_page = response.read()
 | 
			
		||||
#         # info = response.info()
 | 
			
		||||
#         # _zip = info.get('Content-Encoding')
 | 
			
		||||
#         # if _zip == 'gzip':
 | 
			
		||||
#         #     the_page = gzip.decompress(the_page)
 | 
			
		||||
#         # else:
 | 
			
		||||
#         #     pass
 | 
			
		||||
#         # the_page = the_page.decode()
 | 
			
		||||
#         # # print(the_page)
 | 
			
		||||
#         # return the_page
 | 
			
		||||
#     except:
 | 
			
		||||
#         return None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GetSessionId(SwxAuthJsonHandler):
 | 
			
		||||
    @tornado.gen.coroutine
 | 
			
		||||
    def post(self, *args, **kwargs):
 | 
			
		||||
        args = self.get_argument('args', None)
 | 
			
		||||
        if args is not None:
 | 
			
		||||
| 
						 | 
				
			
			@ -827,18 +840,34 @@ class GetSessionId(SwxAuthJsonHandler):
 | 
			
		|||
 | 
			
		||||
        url = 'http://{}:{}/rpc'.format(ts_server_rpc_ip, ts_server_rpc_port)
 | 
			
		||||
        req = {'method': 'request_session', 'param': {'authid': auth_id}}
 | 
			
		||||
        return_data = post_http(url, req)
 | 
			
		||||
 | 
			
		||||
        # values = json.dumps(req)
 | 
			
		||||
        # data = urllib.parse.quote(values).encode('utf-8')
 | 
			
		||||
        # client = tornado.httpclient.AsyncHTTPClient()
 | 
			
		||||
        # r = yield client.fetch(url, body=data, method='POST')
 | 
			
		||||
        # if r.code == 200:
 | 
			
		||||
        #     # self.write(r.body)
 | 
			
		||||
        #     print('+++++++++', r.body)
 | 
			
		||||
 | 
			
		||||
        _yr = async_post_http(url, req)
 | 
			
		||||
        return_data = yield _yr
 | 
			
		||||
        if return_data is None:
 | 
			
		||||
            return self.write_json(-1)
 | 
			
		||||
        return_data = json.loads(return_data)
 | 
			
		||||
 | 
			
		||||
        # return_data = result.decode()
 | 
			
		||||
        # print('############', return_data)
 | 
			
		||||
        # return_data = json.loads(result.decode())
 | 
			
		||||
 | 
			
		||||
        if 'code' not in return_data:
 | 
			
		||||
            return self.write_json(-1)
 | 
			
		||||
 | 
			
		||||
        _code = return_data['code']
 | 
			
		||||
        if _code != 0:
 | 
			
		||||
            return self.write_json(_code)
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            session_id = return_data['data']['sid']
 | 
			
		||||
        except:
 | 
			
		||||
        except IndexError:
 | 
			
		||||
            return self.write_json(-1)
 | 
			
		||||
 | 
			
		||||
        data = dict()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import tornado.web
 | 
			
		||||
# import tornado.web
 | 
			
		||||
import tornado.gen
 | 
			
		||||
 | 
			
		||||
import json
 | 
			
		||||
| 
						 | 
				
			
			@ -11,7 +11,6 @@ from .base import SwxJsonHandler
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class RpcHandler(SwxJsonHandler):
 | 
			
		||||
    @tornado.web.asynchronous
 | 
			
		||||
    @tornado.gen.coroutine
 | 
			
		||||
    def get(self):
 | 
			
		||||
        _uri = self.request.uri.split('?', 1)
 | 
			
		||||
| 
						 | 
				
			
			@ -20,8 +19,10 @@ class RpcHandler(SwxJsonHandler):
 | 
			
		|||
            self.write_json(-1, message='need request param.')
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self._dispatch(urllib.parse.unquote(_uri[1]))
 | 
			
		||||
        yield self._dispatch(urllib.parse.unquote(_uri[1]))
 | 
			
		||||
        self.finish()
 | 
			
		||||
 | 
			
		||||
    @tornado.gen.coroutine
 | 
			
		||||
    def post(self):
 | 
			
		||||
        # curl -X POST --data '{"method":"get_auth_info","param":{"authid":0}}' http://127.0.0.1:7190/rpc
 | 
			
		||||
        req = self.request.body.decode('utf-8')
 | 
			
		||||
| 
						 | 
				
			
			@ -29,8 +30,10 @@ class RpcHandler(SwxJsonHandler):
 | 
			
		|||
            self.write_json(-1, message='need request param.')
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self._dispatch(req)
 | 
			
		||||
        yield self._dispatch(req)
 | 
			
		||||
        self.finish()
 | 
			
		||||
 | 
			
		||||
    @tornado.gen.coroutine
 | 
			
		||||
    def _dispatch(self, req):
 | 
			
		||||
        print('rpc-req:', req)
 | 
			
		||||
        try:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -785,7 +785,7 @@ def get_auth_info(auth_id):
 | 
			
		|||
        ','.join(['d.{}'.format(i) for i in field_d]),
 | 
			
		||||
        auth_id)
 | 
			
		||||
 | 
			
		||||
    print(str_sql)
 | 
			
		||||
    # print(str_sql)
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    "SELECT a.auth_id as auth_id, a.account_name as account_name, \
 | 
			
		||||
| 
						 | 
				
			
			@ -802,35 +802,45 @@ def get_auth_info(auth_id):
 | 
			
		|||
 | 
			
		||||
    db_ret = sql_exec.ExecProcQuery(str_sql)
 | 
			
		||||
 | 
			
		||||
    if db_ret is None:
 | 
			
		||||
    if db_ret is None or len(db_ret) > 1:
 | 
			
		||||
        return None
 | 
			
		||||
    ret = list()
 | 
			
		||||
    for item in db_ret:
 | 
			
		||||
        x = DbItem()
 | 
			
		||||
 | 
			
		||||
        x.load(item,
 | 
			
		||||
               ['a_{}'.format(i) for i in field_a] +
 | 
			
		||||
               ['b_{}'.format(i) for i in field_b] +
 | 
			
		||||
               ['c_{}'.format(i) for i in field_c] +
 | 
			
		||||
               ['d_{}'.format(i) for i in field_d]
 | 
			
		||||
               )
 | 
			
		||||
    db_item = DbItem()
 | 
			
		||||
 | 
			
		||||
        h = dict()
 | 
			
		||||
        h['host_ip'] = x.b_host_ip
 | 
			
		||||
        h['sys_type'] = x.b_host_sys_type
 | 
			
		||||
        h['account_name'] = x.a_account_name
 | 
			
		||||
        h['account_lock'] = x.d_account_lock
 | 
			
		||||
        # h['host_lock'] = x.a_host_lock
 | 
			
		||||
        h['host_port'] = x.b_host_port
 | 
			
		||||
        h['protocol'] = x.b_protocol
 | 
			
		||||
        h['encrypt'] = x.c_encrypt
 | 
			
		||||
        h['auth_mode'] = x.c_auth_mode
 | 
			
		||||
        h['user_name'] = x.c_user_name
 | 
			
		||||
        h['user_param'] = x.c_user_param
 | 
			
		||||
        h['user_pswd'] = x.c_user_pswd
 | 
			
		||||
        h['cert_id'] = x.c_cert_id
 | 
			
		||||
    db_item.load(db_ret[0],
 | 
			
		||||
                 ['a_{}'.format(i) for i in field_a] +
 | 
			
		||||
                 ['b_{}'.format(i) for i in field_b] +
 | 
			
		||||
                 ['c_{}'.format(i) for i in field_c] +
 | 
			
		||||
                 ['d_{}'.format(i) for i in field_d]
 | 
			
		||||
                 )
 | 
			
		||||
 | 
			
		||||
        ret.append(h)
 | 
			
		||||
    ret = dict()
 | 
			
		||||
    ret['host_ip'] = db_item.b_host_ip
 | 
			
		||||
    ret['sys_type'] = db_item.b_host_sys_type
 | 
			
		||||
    ret['account_name'] = db_item.a_account_name
 | 
			
		||||
    ret['account_lock'] = db_item.d_account_lock
 | 
			
		||||
    # h['host_lock'] = x.a_host_lock
 | 
			
		||||
    ret['host_port'] = db_item.b_host_port
 | 
			
		||||
    ret['protocol'] = db_item.b_protocol
 | 
			
		||||
    ret['encrypt'] = db_item.c_encrypt
 | 
			
		||||
    ret['auth_mode'] = db_item.c_auth_mode
 | 
			
		||||
    ret['user_name'] = db_item.c_user_name
 | 
			
		||||
    ret['user_param'] = db_item.c_user_param
 | 
			
		||||
    # ret['user_pswd'] = db_item.c_user_pswd
 | 
			
		||||
    # ret['cert_id'] = db_item.c_cert_id
 | 
			
		||||
 | 
			
		||||
    if db_item.c_auth_mode == 1:
 | 
			
		||||
        ret['user_auth'] = db_item.c_user_pswd
 | 
			
		||||
    elif db_item.c_auth_mode == 2:
 | 
			
		||||
        cert_id = db_item.c_cert_id
 | 
			
		||||
 | 
			
		||||
        str_sql = 'SELECT cert_pri FROM ts_cert WHERE cert_id={}'.format(cert_id)
 | 
			
		||||
        db_ret = sql_exec.ExecProcQuery(str_sql)
 | 
			
		||||
        print(db_ret)
 | 
			
		||||
        if db_ret is None or len(db_ret) > 1:
 | 
			
		||||
            return None
 | 
			
		||||
        ret['user_auth'] = db_ret[0][0]
 | 
			
		||||
    else:
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    print(ret)
 | 
			
		||||
    return ret
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue