def get_sk(self): save_path = '/www/server/panel/config/api.json' if not os.path.exists(save_path): return redirect('/login') try: api_config = json.loads(public.ReadFile(save_path)) except: os.remove(save_path) return redirect('/login') if not api_config['open']: return redirect('/login') from BTPanel import get_input get = get_input() client_ip = public.GetClientIp() if not 'client_bind_token' in get: if not 'request_token' in get or not 'request_time' in get: return redirect('/login') num_key = client_ip + '_api' if not public.get_error_num(num_key,20): return public.returnJson(False,'AUTH_FAILED1') if not client_ip in api_config['limit_addr']: public.set_error_num(num_key) return public.returnJson(False,'%s[' % public.GetMsg("AUTH_FAILED1")+client_ip+']') else: num_key = client_ip + '_app' if not public.get_error_num(num_key,20): return public.returnJson(False,'AUTH_FAILED1') a_file = '/dev/shm/' + get.client_bind_token if not os.path.exists(a_file): import panelApi if not panelApi.panelApi().get_app_find(get.client_bind_token): public.set_error_num(num_key) return public.returnJson(False,'UNBOUND_DEVICE') public.writeFile(a_file,'') if not 'key' in api_config: public.set_error_num(num_key) return public.returnJson(False, 'KEY_ERR') if not 'form_data' in get: public.set_error_num(num_key) return public.returnJson(False, 'FORM_DATA_ERR') g.form_data = json.loads(public.aes_decrypt(get.form_data, api_config['key'])) get = get_input() if not 'request_token' in get or not 'request_time' in get: return redirect('/login') g.is_aes = True g.aes_key = api_config['key'] request_token = public.md5(get.request_time + api_config['token']) if get.request_token == request_token: public.set_error_num(num_key,True) return False public.set_error_num(num_key) return public.returnJson(False,'SECRET_KEY_CHECK_FALSE')
def get_ssh_info(self, host): ''' @name 获取并解密指定SSH信息 @author hwliang<2020-08-07> @param host<string> 主机地址 @return dict or False ''' info_file = self._save_path + host + '/info.json' if not os.path.exists(info_file): return False r_data = public.aes_decrypt(public.readFile(info_file), self._pass_str) return json.loads(r_data)
def modify_host(self, args): ''' @name 修改SSH信息 @author hwliang<2020-08-07> @param args<dict_obj>{ host: 被修改的主机地址, new_host: 新的主机地址, port: 端口 ps: 备注 sort: 排序(可选) username: 用户名 password: 密码 pkey: 密钥(如果不为空,将使用密钥连接) } @return dict ''' args.new_host = args.new_host.strip() args.host = args.host.strip() if args.host != args.new_host: info_file = self._save_path + args.new_host + '/info.json' if os.path.exists(info_file): return public.returnMsg(False, 'SSH_LOGIN_ERR8') info_file = self._save_path + args.host + '/info.json' if not os.path.exists(info_file): return public.returnMsg(False, 'SSH_LOGIN_ERR7') if not 'sort' in args: r_data = public.aes_decrypt(public.readFile(info_file), self._pass_str) info_tmp = json.loads(r_data) args.sort = info_tmp['sort'] host_info = {} host_info['host'] = args.new_host host_info['port'] = int(args['port']) host_info['ps'] = args['ps'] host_info['sort'] = args['sort'] host_info['username'] = args['username'] host_info['password'] = args['password'] host_info['pkey'] = args['pkey'] if not host_info['pkey']: host_info['pkey'] = '' result = self.set_attr(host_info) if not result['status']: return result self.save_ssh_info(args.host, host_info) if args.host != args.new_host: public.ExecShell('mv {} {}'.format( self._save_path + args.host, self._save_path + args.new_host)) public.WriteLog(self._log_type, 'MODIFY_SSH_INFO', (args.host, )) return public.returnMsg(True, 'EDIT_SUCCESS')
def get_sk(self): save_path = '/www/server/panel/config/api.json' if not os.path.exists(save_path): return redirect('/login') try: api_config = json.loads(public.ReadFile(save_path)) except: os.remove(save_path) return redirect('/login') if not api_config['open']: return redirect('/login') from BTPanel import get_input get = get_input() if not 'client_bind_token' in get: if not 'request_token' in get or not 'request_time' in get: return redirect('/login') client_ip = public.GetClientIp() if not client_ip in api_config['limit_addr']: return public.returnJson( False, '%s[' % public.GetMsg("CHECK_IP_FALSE") + client_ip + ']') else: a_file = '/dev/shm/' + get.client_bind_token if not os.path.exists(a_file): import panelApi if not panelApi.panelApi().get_app_find(get.client_bind_token): return public.returnMsg(False, 'Unbound device') public.writeFile(a_file, '') if not 'key' in api_config: return public.returnJson(False, 'Key verification failed') if not 'form_data' in get: return public.returnJson(False, 'No form_data data found') g.form_data = json.loads( public.aes_decrypt(get.form_data, api_config['key'])) get = get_input() if not 'request_token' in get or not 'request_time' in get: return redirect('/login') g.is_aes = True g.aes_key = api_config['key'] request_token = public.md5(get.request_time + api_config['token']) if get.request_token == request_token: return False return public.returnJson(False, 'SECRET_KEY_CHECK_FALSE')
def get_sk(self): save_path = '/www/server/panel/config/api.json' if not os.path.exists(save_path): return redirect('/login') try: api_config = json.loads(public.ReadFile(save_path)) except: os.remove(save_path) return redirect('/login') if not api_config['open']: return redirect('/login') from BTPanel import get_input get = get_input() if not 'client_bind_token' in get: if not 'request_token' in get or not 'request_time' in get: return redirect('/login') client_ip = public.GetClientIp() if not client_ip in api_config['limit_addr']: return public.returnJson(False, 'IP校验失败,您的访问IP为[' + client_ip + ']') else: a_file = '/dev/shm/' + get.client_bind_token if not os.path.exists(a_file): import panelApi if not panelApi.panelApi().get_app_find(get.client_bind_token): return public.returnMsg(False, '未绑定的设备') public.writeFile(a_file, '') if not 'key' in api_config: return public.returnJson(False, '密钥校验失败') if not 'form_data' in get: return public.returnJson(False, '没有找到form_data数据') g.form_data = json.loads( public.aes_decrypt(get.form_data, api_config['key'])) get = get_input() if not 'request_token' in get or not 'request_time' in get: return redirect('/login') g.is_aes = True g.aes_key = api_config['key'] request_token = public.md5(get.request_time + api_config['token']) if get.request_token == request_token: return False return public.returnJson(False, '密钥校验失败')
def __write_args(self,args): from BTPanel import request if os.path.exists(self.__args_tmp): os.remove(self.__args_tmp) self.__clean_args_file() data = {} data['GET'] = request.args.to_dict() data['POST'] = {} x_token = request.headers.get('x-http-token') if x_token: aes_pwd = x_token[:8] + x_token[40:48] for key in request.form.keys(): data['POST'][key] = str(request.form.get(key,'')) if x_token: if len(data['POST'][key]) > 5: if data['POST'][key][:6] == 'BT-CRT': data['POST'][key] = public.aes_decrypt(data['POST'][key][6:],aes_pwd) data['POST']['client_ip'] = public.GetClientIp() data = json.dumps(data) public.writeFile(self.__args_tmp,data)