Exemple #1
0
    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')
Exemple #2
0
 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)
Exemple #3
0
    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')
Exemple #4
0
    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')
Exemple #5
0
    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, '密钥校验失败')
Exemple #6
0
 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)