class LuminateOnlineClient(LuminatOnline.Client): def __init__(self): self.transport = THttpClient('localhost', 9090, '/luminate.binary') self.transport.open() LuminatOnline.Client.__init__(self, TBinaryProtocol.TBinaryProtocol(self.transport)) def close(self): self.transport.close()
def __init__(self, host='manager', port=40002, protocol=Protocol.THRIFT_TCP, request_client=None, response_client=None, ticket_client=None, loop=asyncio.get_event_loop()): init_mapper() self._loop = loop self._request_client = None self._ticket_client = None self._response_client = None if request_client is not None and response_client is not None and ticket_client is not None: self._request_client = request_client self._response_client = response_client self._ticket_client = ticket_client else: if protocol == Protocol.THRIFT_TCP: transport = TSocket.TSocket(host, port) protocol = TBinaryProtocol.TBinaryProtocol(transport) protocol_request = TMultiplexedProtocol.TMultiplexedProtocol( protocol, self.THRIFT_SERVICE_NAME_REQUEST) protocol_ticket = TMultiplexedProtocol.TMultiplexedProtocol( protocol, self.THRIFT_SERVICE_NAME_TICKET) protocol_response = TMultiplexedProtocol.TMultiplexedProtocol( protocol, self.THRIFT_SERVICE_NAME_RESPONSE) self._request_client = ExecLogicService.Client( protocol_request) self._ticket_client = TicketService.Client(protocol_ticket) self._response_client = ExecLogicResponseService.Client( protocol_response) transport.open() elif protocol == Protocol.REST: self._request_client = RESTExecLogicService(host, port) self._response_client = RESTExecLogicResponseService( host, port) self._ticket_client = RESTTicketService(host, port) elif protocol == Protocol.THRIFT_HTTP: transport_request = THttpClient('http://{}:{}/{}'.format( host, port, self.THRIFT_SERVICE_NAME_REQUEST)) transport_response = THttpClient('http://{}:{}/{}'.format( host, port, self.THRIFT_SERVICE_NAME_RESPONSE)) transport_ticket = THttpClient('http://{}:{}/{}'.format( host, port, self.THRIFT_SERVICE_NAME_TICKET)) protocol_request = TBinaryProtocol.TBinaryProtocol( transport_request) protocol_response = TBinaryProtocol.TBinaryProtocol( transport_response) protocol_ticket = TBinaryProtocol.TBinaryProtocol( transport_ticket) self._request_client = ExecLogicService.Client( protocol_request) self._response_client = ExecLogicResponseService.Client( protocol_response) self._ticket_client = TicketService.Client(protocol_ticket) transport_request.open() transport_response.open() transport_ticket.open()
class IMApiClient(BaseResponse): def __init__(self, request): BaseResponse.__init__(self) self.params = request.values self.username = self.params.get('user') self.domain = self.params.get('server') self.password = self.params.get('pass') if isinstance(request.remote_addr, str): self.ip = request.remote_addr else: self.ip = '127.0.0.1' # self.transport = TSocket.TSocket('localhost', 8080) # self.transport = THttpClient('http://localhost:8080/apiserver.php') self.transport = THttpClient('http://localhost/dzapi/apiserver.php') self.transport = TTransport.TBufferedTransport(self.transport) self.protocol = TBinaryProtocol.TBinaryProtocol(self.transport) self.client = DzApi.Client(self.protocol) self.transport.open() def user_exists(self): if self.client.user_exists(self.username): return self.reTrue else: return self.reNotExist def user_avatar(self): avatar = self.client.user_avatar(self.params.get('uid'), self.params.get('size')) return avatar def user_login(self): if self.client.user_exists(self.username): uid = self.client.user_login(self.ip, self.username, self.password, self.params.get('questionid'), self.params.get('answer'), self.params.get('fastloginfield'),) if uid > 0: # self.uid = uid return self.reSuccess else: return self.reInvalidPass else: return self.reError def set_password(self): if any(self.password): if True: return self.reSuccess else: return self.reError def remove_user(self): if self.user_exists()[1] == 'true': if True: return self.reSuccess else: return self.reNotAllow else: return self.reNotExist def remove_user_validate(self): if self.user_exists()[1] == 'true': if self.user_login()[1] == 'success' and True: return self.reSuccess else: return self.reInvalidPass else: return self.reNotExist def get_user(self): if self.user_exists()[1] == 'true': return [200, str(self.client.get_user(self.params.get('uid')))] else: return self.reError def get_userfield(self): if self.user_exists()[1] == 'true': return [200, str(self.client.get_userfield(self.params.get('uid')))] else: return self.reError def user_register(self): if self.user_exists()[1] != 'true': result = self.client.user_register(self.ip, self.username, self.params.get('password'), self.params.get('password2'), self.params.get('email'), self.params.get('questionid'), self.params.get('answer')) return [200, str(result)] else: return self.reExistUser def get_threadslist(self): threadslist = self.client.get_threadslist(self.params.get('fid'), self.params.get('page'), self.params.get('filter')) for thread in threadslist: thread['subject'] = thread['subject'].decode('utf-8') return [200, str(threadslist)] def get_postslist(self): postslist = self.client.get_postslist(self.params.get('tid'), self.params.get('page'), self.params.get('ordertype')) for post in postslist: post['message'] = post['message'].decode('utf-8') return [200, str(postslist)]
def __init__(self, my_app, my_token=None): self.lineServer = "https://ga2.line.naver.jp" self.lineOBS = "https://obs-sg.line-apps.com" self.boteaterApi = "https://api.boteater.us" self.liffServer = "https://api.line.me/message/v3/share" self.stickerLink = "https://stickershop.line-scdn.net/stickershop/v1/sticker/{}/iPhone/[email protected]" self.stickerLinkAnimation = "https://stickershop.line-scdn.net/stickershop/v1/sticker/{}/iPhone/[email protected]" self.dataHeaders = { "android_lite": { "User-Agent": "LLA/2.11.1 samsung 5.1.1", "X-Line-Application": "ANDROIDLITE\t2.11.1\tAndroid OS\t5.1.1", "x-lal": "en_ID", "X-Line-Carrier": "51010,1-0" }, "android": { "User-Agent": "Line/10.1.1", "X-Line-Application": "ANDROID\t10.1.1\tAndroid OS\t5.1.1", "x-lal": "en_ID", "X-Line-Carrier": "51010,1-0" }, "ios_ipad": { "User-Agent": "Line/10.1.1", "X-Line-Application": "IOSIPAD\t10.1.1\tiPhone 8\t11.2.5", "x-lal": "en_ID", "X-Line-Carrier": "51010,1-0" }, "ios": { "User-Agent": "Line/10.1.1", "X-Line-Application": "IOS\t10.1.1\tiPhone 8\t11.2.5", "x-lal": "en_ID", "X-Line-Carrier": "51010,1-0" }, "chrome": { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36", "X-Line-Application": "CHROMEOS\t2.3.2\tChrome OS\t1", "x-lal": "en_ID", "X-Line-Carrier": "51010,1-0" }, "desktopwin": { "User-Agent": "Line/5.12.3", "X-Line-Application": "DESKTOPWIN\t5.21.3\tWindows\t10", "x-lal": "en_ID", "X-Line-Carrier": "51010,1-0" }, "desktopmac": { "User-Agent": "Line/5.12.3", "X-Line-Application": "DESKTOPMAC\t5.21.3\tMAC\t10.15", "x-lal": "en_ID", "X-Line-Carrier": "51010,1-0" } } if my_app in self.dataHeaders: self.headers = self.dataHeaders[my_app] if my_token != None: self.headers["X-Line-Access"] = my_token else: self.headers["X-Line-Access"] = self.qrLogin(self.headers) else: raise Exception('APP not found!!!') ### CONNECT TO POOL ### transport = THttpClient(self.lineServer + '/P4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.pool = OperationService.Client(protocol) ### CONNECT TO TALK ### transport = THttpClient(self.lineServer + '/api/v4/TalkService.do') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.talk = TalkService.Client(protocol) ### CONNECT TO CHANNEL ### transport = THttpClient(self.lineServer + '/CH4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.channel = ChannelService.Client(protocol) ### CONNECT TO CALL ### transport = THttpClient(self.lineServer + '/V4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.call = CallService.Client(protocol) ### CONNECT TO SHOP ### transport = THttpClient(self.lineServer + '/TSHOP4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.shop = ShopService.Client(protocol) ### CONNECT TO LIFF ### transport = THttpClient(self.lineServer + '/LIFF1') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.liff = LiffService.Client(protocol) self.profile = self.getProfile() self.lastOP = self.getLastOpRevision() self.liffPermision() self.tokenOBS = self.acquireEncryptedAccessToken() print("[ Login ] Display Name: " + self.profile.displayName) print("[ Login ] Auth Token: " + self.headers["X-Line-Access"]) ### TIMELINE HEADERS ### self.tl_headers = copy.deepcopy(self.headers) self.tl_headers["X-Line-ChannelToken"] = self.issueChannelToken( '1341209950').channelAccessToken self.tl_headers["X-Line-Mid"] = self.profile.mid self.tl_headers["X-Line-AcceptLanguage"] = 'en' self.tl_headers[ "X-Requested-With"] = 'jp.naver.line.android.LineApplication' self.tl_headers["Content-Type"] = 'application/json'
def __init__(self, my_app, my_token=None, server=None): if server == "japan": self.line_server = "https://ga2.line.naver.jp" #Japan elif server == "sg": self.line_server = "https://ga2s.line.naver.jp" #Indo/Singapure else: self.line_server = "https://gd2.line.naver.jp" #Japan self.line_obs = "https://obs-sg.line-apps.com" self.boteater_api = "https://api.boteater.us" self.liff_url = "https://api.line.me/message/v3/share" self.sticker_link = "https://stickershop.line-scdn.net/stickershop/v1/sticker/{}/iPhone/[email protected]" self.sticker_link_animation = "https://stickershop.line-scdn.net/stickershop/v1/sticker/{}/iPhone/[email protected]" self.data_headers = self.read_json("headers.json") if my_app in self.data_headers: self.headers = self.data_headers[my_app] if my_token != None: self.headers["X-Line-Access"] = my_token else: del self.headers["X-Line-Access"] self.headers["X-Line-Access"] = self.qr_login(self.headers) else: raise Exception('APP not found!!!') ### CONNECT TO POOL ### transport = THttpClient(self.line_server + '/P4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.pool = BoteaterService.Client(protocol) ### CONNECT TO TALK ### transport = THttpClient(self.line_server + '/api/v4/TalkService.do') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.talk = BoteaterService.Client(protocol) ### CONNECT TO CHANNEL ### transport = THttpClient(self.line_server + '/CH4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.channel = BoteaterService.Client(protocol) ### CONNECT TO CALL ### transport = THttpClient(self.line_server + '/V4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.call = BoteaterService.Client(protocol) ### CONNECT TO SHOP ### transport = THttpClient(self.line_server + '/TSHOP4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.shop = BoteaterService.Client(protocol) ### CONNECT TO LIFF ### transport = THttpClient(self.line_server + '/LIFF1') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.liff = BoteaterService.Client(protocol) self.profile_data = self.talk.getProfile() self.my_mid = self.profile_data.mid self.last_op = self.pool.getLastOpRevision() self.issue_liff_view() self.tl_channel = self.issue_channel_token( '1341209950').channelAccessToken self.tl_headers = copy.deepcopy(self.headers) self.tl_headers["X-Line-ChannelToken"] = self.tl_channel self.tl_headers["X-Line-Mid"] = self.my_mid self.tl_headers["X-Line-AcceptLanguage"] = 'en' self.tl_headers[ "X-Requested-With"] = 'jp.naver.line.android.LineApplication' self.tl_headers["Content-Type"] = 'application/json' self.my_OBStoken = self.gen_obs_token() print("[ Login ] Display Name: " + self.profile_data.displayName) self.temp_data = self.read_json("tmp.json")
def __init__(self, my_app, my_token=None): self.lineServer = "https://ga2.line.naver.jp" self.lineOBS = "https://obs-sg.line-apps.com" self.boteaterApi = "https://api.boteater.us" self.liffServer = "https://api.line.me/message/v3/share" self.stickerLink = "https://stickershop.line-scdn.net/stickershop/v1/sticker/{}/iPhone/[email protected]" self.stickerLinkAnimation = "https://stickershop.line-scdn.net/stickershop/v1/sticker/{}/iPhone/[email protected]" self.dataHeaders = self.readJson("headers.json") if my_app in self.dataHeaders: self.headers = self.dataHeaders[my_app] if my_token != None: self.headers["X-Line-Access"] = my_token else: del self.headers["X-Line-Access"] self.headers["X-Line-Access"] = self.qrLogin(self.headers) #self.headers["X-Line-Access"] = self.qrLoginRotate("ios_ipad") else: raise Exception('APP not found!!!') ### CONNECT TO POOL ### transport = THttpClient(self.lineServer + '/P4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.pool = BoteaterService.Client(protocol) ### CONNECT TO TALK ### transport = THttpClient(self.lineServer + '/api/v4/TalkService.do') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.talk = BoteaterService.Client(protocol) ### CONNECT TO CHANNEL ### transport = THttpClient(self.lineServer + '/CH4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.channel = BoteaterService.Client(protocol) ### CONNECT TO CALL ### transport = THttpClient(self.lineServer + '/V4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.call = BoteaterService.Client(protocol) ### CONNECT TO SHOP ### transport = THttpClient(self.lineServer + '/TSHOP4') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.shop = BoteaterService.Client(protocol) ### CONNECT TO LIFF ### transport = THttpClient(self.lineServer + '/LIFF1') transport.setCustomHeaders(self.headers) transport.open() protocol = TCompactProtocol(transport) self.liff = BoteaterService.Client(protocol) self.profile = self.getProfile() self.lastOP = self.getLastOpRevision() self.liffPermision() self.tokenOBS = self.acquireEncryptedAccessToken() print("[ Login ] Display Name: " + self.profile.displayName) ### TIMELINE HEADERS ### self.tl_headers= copy.deepcopy(self.headers) self.tl_headers["X-Line-ChannelToken"] = self.issueChannelToken('1341209950').channelAccessToken self.tl_headers["X-Line-Mid"] = self.profile.mid self.tl_headers["X-Line-AcceptLanguage"] = 'en' self.tl_headers["X-Requested-With"] = 'jp.naver.line.android.LineApplication' self.tl_headers["Content-Type"] = 'application/json'
class Connection(object): """ Class to manage basic transport and protocol. User should not use instances of this class directly. The instances should be managed by a Client object. """ def __init__(self, host, port, transport_type, protocol_type, retry_timeout, retry_times, use_ssl, use_http, authentication, keep_alive=False): self.host = host self.port = port self.use_ssl = use_ssl self.use_http = use_http self.authentication = authentication self.keep_alive = keep_alive self._transport_type = THRIFT_TRANSPORTS[transport_type] self._protocol_type = THRIFT_PROTOCOLS[protocol_type] self._retry_timeout = retry_timeout self._retry_times = retry_times self._rebuild_protocol() self._initialized = True def _rebuild_protocol(self): """ Rebuild the transport, protocol from the configuration. Should not be used directly by users. Returns: None """ if self.use_http: # if use http transport, prefix = 'https://' if self.use_ssl else 'http://' self.transport = THttpClient(uri_or_host=prefix + self.host + ':' + str(self.port)) self.protocol = TBinaryProtocol.TBinaryProtocol(self.transport) return if self.use_ssl: from thrift.transport.TSSLSocket import TSSLSocket socket = TSSLSocket(host=self.host, port=self.port, validate=False, socket_keepalive=self.keep_alive) else: socket = TSocket(host=self.host, port=self.port, socket_keepalive=self.keep_alive) if self.authentication: socket = TSaslClientTransport( socket, host=self.host, service=self.authentication.service, mechanism=self.authentication.mechanism, username=self.authentication.username, password=self.authentication.password, ) self.transport = self._transport_type(socket) self.protocol = self._protocol_type(self.transport) def is_open(self): return self.transport.isOpen() def open(self): if self.transport.isOpen(): return logger.debug("Opening thrift transport throught TCP connection.") self.transport.open() def close(self): if not self.transport.isOpen(): return if logger is not None: logger.debug("Closing thrift transport to {}:{}.".format( self.host, self.port)) self.transport.close() def _reconnect(self): """ Method to rebuild the connection with thrift server. Should not be used by the user directly. Returns: None """ if not self.transport.isOpen(): logger.info( "Connection lose is detected and start reconnecting to the target thrift server." ) for i in range(self._retry_times): if self.transport.isOpen(): logger.info( "Reconnection success after retrying {} times.".format( i)) return True self._rebuild_protocol() try: logger.info("Starting reconnection to thrift server.") self.transport.open() logger.info( "Reconnection success after retrying {} times.".format( i + 1)) return True except TTransportException: logger.error("Reconnected {} times but failed.".format(i + 1)) time.sleep(self._retry_timeout) if not self.transport.isOpen(): logger.error( "Failed to rebuild connection with target thrift server.") raise TTransportException( type=TTransportException.NOT_OPEN, message= "Failed to rebuild connection with target thrift server.") return False