def login(self, context, username): print("User trying to log in:", username) user = get_user_by_name(username) if not user: raise common.RMCError("RendezVous::InvalidUsername") server = get_user_by_name(SECURE_SERVER) url = common.StationURL( address="127.0.0.1", port=1224, PID = server.pid, CID = 1, type = 2, sid = 1, stream = 10 ) conn_data = authentication.RVConnectionData() conn_data.main_station = url conn_data.special_protocols = [] conn_data.special_station = common.StationURL() response = common.RMCResponse() response.result = common.Result(0x10001) #Success response.pid = user.pid response.ticket = self.generate_ticket(user, server) response.connection_data = conn_data response.server_name = "Example server" return response
def get_all_information(self, nna_info, presence, birthday): logger.info("FriendsClient.get_all_information()") #--- request --- stream = streams.StreamOut(self.settings) stream.add(nna_info) stream.add(presence) stream.datetime(birthday) data = self.client.send_request(self.PROTOCOL_ID, self.METHOD_GET_ALL_INFORMATION, stream.get()) #--- response --- stream = streams.StreamIn(data, self.settings) obj = common.RMCResponse() obj.principal_preference = stream.extract(PrincipalPreference) obj.comment = stream.extract(Comment) obj.friends = stream.list(FriendInfo) obj.sent_requests = stream.list(FriendRequest) obj.received_requests = stream.list(FriendRequest) obj.blacklist = stream.list(BlacklistedPrincipal) obj.unk1 = stream.bool() obj.notifications = stream.list(PersistentNotification) obj.unk2 = stream.bool() if not stream.eof(): raise ValueError( "Response is bigger than expected (got %i bytes, but only %i were read)" % (stream.size(), stream.tell())) logger.info("FriendsClient.get_all_information -> done") return obj
def request_ticket(self, context, source, target): source = get_user_by_pid(source) target = get_user_by_pid(target) response = common.RMCResponse() response.result = common.Result(0x10001) #Success response.ticket = self.generate_ticket(source, target) return response
def register(self, context, urls): addr = context.client.remote_address() station = urls[0].copy() station["address"] = addr[0] station["port"] = addr[1] station["type"] = 3 response = common.RMCResponse() response.result = common.Result(0x10001) #Success response.connection_id = next(self.connection_id) response.public_station = station return response
def get_public_data(self): logger.info("AccountClient.get_public_data()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_GET_PUBLIC_DATA) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.result = stream.bool() obj.data = stream.anydata() logger.info("AccountClient.get_public_data -> done") return obj
def get_account_data(self): logger.info("AccountClient.get_account_data()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_GET_ACCOUNT_DATA) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.result = stream.result() obj.data = stream.extract(AccountData) logger.info("AccountClient.get_account_data -> done") return obj
def get_metas_multiple_param(self, params): logger.info("DataStoreClient.get_metas_multiple_param()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_GET_METAS_MULTIPLE_PARAM) stream.list(params, stream.add) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.infos = stream.list(DataStoreMetaInfo) obj.results = stream.list(stream.result) logger.info("DataStoreClient.get_metas_multiple_param -> done") return obj
def retrieve_account(self): logger.info("AccountClient.retrieve_account()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_RETRIEVE_ACCOUNT) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.account_data = stream.extract(AccountData) obj.public_data = stream.anydata() obj.private_data = stream.anydata() logger.info("AccountClient.retrieve_account -> done") return obj
def get_last_connection_stats(self, pid): logger.info("AccountClient.get_last_connection_stats()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_GET_LAST_CONNECTION_STATS) stream.pid(pid) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.last_session_login = stream.datetime() obj.last_session_logout = stream.datetime() obj.current_session_login = stream.datetime() logger.info("AccountClient.get_last_connection_stats -> done") return obj
def request_urls(self, cid, pid): logger.info("SecureConnectionClient.request_urls()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_REQUEST_URLS) stream.u32(cid) stream.pid(pid) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.result = stream.bool() obj.urls = stream.list(stream.stationurl) logger.info("SecureConnectionClient.request_urls -> done") return obj
def request_connection_data(self, cid, pid): logger.info("SecureConnectionClient.request_connection_data()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_REQUEST_CONNECTION_DATA) stream.u32(cid) stream.pid(pid) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.result = stream.bool() obj.connection_data = stream.list(ConnectionData) logger.info("SecureConnectionClient.request_connection_data -> done") return obj
def register(self, urls): logger.info("SecureConnectionClient.register()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_REGISTER) stream.list(urls, stream.stationurl) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.result = stream.result() obj.connection_id = stream.u32() obj.public_station = stream.stationurl() logger.info("SecureConnectionClient.register -> done") return obj
def create_matchmake_session(self, gathering, description, participation_count): logger.info("MatchmakeExtensionClient.create_matchmake_session()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_CREATE_MATCHMAKE_SESSION) stream.anydata(gathering) stream.string(description) stream.u16(participation_count) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.gid = stream.u32() obj.session_key = stream.buffer() logger.info("MatchmakeExtensionClient.create_matchmake_session -> done") return obj
def request_ticket(self, source, target): logger.info("AuthenticationClient.request_ticket()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_REQUEST_TICKET) stream.pid(source) stream.pid(target) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.result = stream.result() obj.ticket = stream.buffer() logger.info("AuthenticationClient.request_ticket -> done") return obj
def nintendo_create_account(self, name, key, groups, email, auth_data): logger.info("AccountClient.nintendo_create_account()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_NINTENDO_CREATE_ACCOUNT) stream.string(name) stream.string(key) stream.u32(groups) stream.string(email) stream.anydata(auth_data) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.pid = stream.pid() obj.pid_hmac = stream.string() logger.info("AccountClient.nintendo_create_account -> done") return obj
def login(self, username): logger.info("AuthenticationClient.login()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_LOGIN) stream.string(username) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.result = stream.result() obj.pid = stream.pid() obj.ticket = stream.buffer() obj.connection_data = stream.extract(RVConnectionData) obj.server_name = stream.string() logger.info("AuthenticationClient.login -> done") return obj
def get_metas_multiple_param(self, params): logger.info("DataStoreClientSMM.get_metas_multiple_param()") #--- request --- stream = streams.StreamOut(self.settings) stream.list(params, stream.add) data = self.client.send_request(self.PROTOCOL_ID, self.METHOD_GET_METAS_MULTIPLE_PARAM, stream.get()) #--- response --- stream = streams.StreamIn(data, self.settings) obj = common.RMCResponse() obj.infos = stream.list(DataStoreMetaInfo) obj.results = stream.list(stream.result) if not stream.eof(): raise ValueError( "Response is bigger than expected (got %i bytes, but only %i were read)" % (stream.size(), stream.tell())) logger.info("DataStoreClientSMM.get_metas_multiple_param -> done") return obj
def request_urls(self, cid, pid): logger.info("SecureConnectionClient.request_urls()") #--- request --- stream = streams.StreamOut(self.settings) stream.u32(cid) stream.pid(pid) data = self.client.send_request(self.PROTOCOL_ID, self.METHOD_REQUEST_URLS, stream.get()) #--- response --- stream = streams.StreamIn(data, self.settings) obj = common.RMCResponse() obj.result = stream.bool() obj.urls = stream.list(stream.stationurl) if not stream.eof(): raise ValueError( "Response is bigger than expected (got %i bytes, but only %i were read)" % (stream.size(), stream.tell())) logger.info("SecureConnectionClient.request_urls -> done") return obj
def register(self, urls): logger.info("SecureConnectionClient.register()") #--- request --- stream = streams.StreamOut(self.settings) stream.list(urls, stream.stationurl) data = self.client.send_request(self.PROTOCOL_ID, self.METHOD_REGISTER, stream.get()) #--- response --- stream = streams.StreamIn(data, self.settings) obj = common.RMCResponse() obj.result = stream.result() obj.connection_id = stream.u32() obj.public_station = stream.stationurl() if not stream.eof(): raise ValueError( "Response is bigger than expected (got %i bytes, but only %i were read)" % (stream.size(), stream.tell())) logger.info("SecureConnectionClient.register -> done") return obj
def request_ticket(self, source, target): logger.info("AuthenticationClient.request_ticket()") #--- request --- stream = streams.StreamOut(self.settings) stream.pid(source) stream.pid(target) data = self.client.send_request(self.PROTOCOL_ID, self.METHOD_REQUEST_TICKET, stream.get()) #--- response --- stream = streams.StreamIn(data, self.settings) obj = common.RMCResponse() obj.result = stream.result() obj.ticket = stream.buffer() if not stream.eof(): raise ValueError( "Response is bigger than expected (got %i bytes, but only %i were read)" % (stream.size(), stream.tell())) logger.info("AuthenticationClient.request_ticket -> done") return obj
def login(self, username): logger.info("AuthenticationClient.login()") #--- request --- stream = streams.StreamOut(self.settings) stream.string(username) data = self.client.send_request(self.PROTOCOL_ID, self.METHOD_LOGIN, stream.get()) #--- response --- stream = streams.StreamIn(data, self.settings) obj = common.RMCResponse() obj.result = stream.result() obj.pid = stream.pid() obj.ticket = stream.buffer() obj.connection_data = stream.extract(RVConnectionData) obj.server_name = stream.string() if not stream.eof(): raise ValueError( "Response is bigger than expected (got %i bytes, but only %i were read)" % (stream.size(), stream.tell())) logger.info("AuthenticationClient.login -> done") return obj
def get_all_information(self, nna_info, presence, birthday): logger.info("FriendsClient.get_all_information()") #--- request --- stream, call_id = self.client.init_request(self.PROTOCOL_ID, self.METHOD_GET_ALL_INFORMATION) stream.add(nna_info) stream.add(presence) stream.datetime(birthday) self.client.send_message(stream) #--- response --- stream = self.client.get_response(call_id) obj = common.RMCResponse() obj.principal_preference = stream.extract(PrincipalPreference) obj.comment = stream.extract(Comment) obj.friends = stream.list(FriendInfo) obj.sent_requests = stream.list(FriendRequest) obj.received_requests = stream.list(FriendRequest) obj.blacklist = stream.list(BlacklistedPrincipal) obj.unk1 = stream.bool() obj.notifications = stream.list(PersistentNotification) obj.unk2 = stream.bool() logger.info("FriendsClient.get_all_information -> done") return obj