Esempio n. 1
0
    async def login(self, client, 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(scheme="prudps",
                                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 = rmc.RMCResponse()
        response.result = common.Result.success()
        response.pid = user.pid
        response.ticket = self.generate_ticket(user, server)
        response.connection_data = conn_data
        response.server_name = "Example server"
        return response
Esempio n. 2
0
	async def update_and_get_all_information(self, nna_info, presence, birthday):
		logger.info("FriendsClientV2.update_and_get_all_information()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		stream.add(nna_info)
		stream.add(presence)
		stream.datetime(birthday)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_UPDATE_AND_GET_ALL_INFORMATION, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.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("FriendsClientV2.update_and_get_all_information -> done")
		return obj
Esempio n. 3
0
    async def login(self, client, username):
        assert username == "username"

        pid = 1001

        stick = kerberos.ServerTicket()
        stick.timestamp = common.DateTime.now()
        stick.source = pid
        stick.session_key = bytes(32)

        ctick = kerberos.ClientTicket()
        ctick.session_key = bytes(32)
        ctick.target = 100
        ctick.internal = stick.encrypt(b"testkey", self.settings)

        kerb = kerberos.KeyDerivationOld(65000, 1024)
        key = kerb.derive_key(b"password", pid)

        connection_data = authentication.RVConnectionData()
        connection_data.main_station = common.StationURL(address=HOST,
                                                         port=12346,
                                                         PID=100,
                                                         sid=1)
        connection_data.special_protocols = []
        connection_data.special_station = common.StationURL()
        connection_data.server_time = common.DateTime.now()

        response = rmc.RMCResponse()
        response.result = common.Result.success()
        response.pid = pid
        response.ticket = ctick.encrypt(key, self.settings)
        response.connection_data = connection_data
        response.server_name = "server build name"
        return response
Esempio n. 4
0
    async def validate_and_request_ticket_with_custom_data(
            self, username, extra_data):
        logger.info(
            "AuthenticationClientNX.validate_and_request_ticket_with_custom_data()"
        )
        #--- request ---
        stream = streams.StreamOut(self.settings)
        stream.string(username)
        stream.anydata(extra_data)
        data = await self.client.request(
            self.PROTOCOL_ID,
            self.METHOD_VALIDATE_AND_REQUEST_TICKET_WITH_CUSTOM_DATA,
            stream.get())

        #--- response ---
        stream = streams.StreamIn(data, self.settings)
        obj = rmc.RMCResponse()
        obj.result = stream.result()
        obj.pid = stream.pid()
        obj.ticket = stream.buffer()
        obj.connection_data = stream.extract(RVConnectionData)
        obj.server_name = stream.string()
        obj.source_key = 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(
            "AuthenticationClientNX.validate_and_request_ticket_with_custom_data -> done"
        )
        return obj
async def get_custom_ranking_by_data_id(param):
	#--- request ---
	stream = streams.StreamOut(datastore_smm_client.settings)
	stream.add(param)
	data = await datastore_smm_client.client.request(datastore_smm_client.PROTOCOL_ID, 50, stream.get())

	#--- response ---
	stream = streams.StreamIn(data, datastore_smm_client.settings)

	obj = rmc.RMCResponse()
	obj.ranking_result = stream.list(DataStoreCustomRankingResult)
	obj.results = stream.list(common.Result)

	return obj
Esempio n. 6
0
	async def get_private_data(self):
		logger.info("AccountClient.get_private_data()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_GET_PRIVATE_DATA, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.result = stream.bool()
		obj.data = stream.anydata()
		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("AccountClient.get_private_data -> done")
		return obj
Esempio n. 7
0
	async def add_friend_by_name(self, name):
		logger.info("FriendsClientV2.add_friend_by_name()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		stream.string(name)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_ADD_FRIEND_BY_NAME, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.request = stream.extract(FriendRequest)
		obj.info = stream.extract(FriendInfo)
		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("FriendsClientV2.add_friend_by_name -> done")
		return obj
Esempio n. 8
0
	async def retrieve_account(self):
		logger.info("AccountClient.retrieve_account()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_RETRIEVE_ACCOUNT, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.account_data = stream.extract(AccountData)
		obj.public_data = stream.anydata()
		obj.private_data = stream.anydata()
		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("AccountClient.retrieve_account -> done")
		return obj
Esempio n. 9
0
	async def get_multiple_public_data(self, pids):
		logger.info("AccountClient.get_multiple_public_data()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		stream.list(pids, stream.pid)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_GET_MULTIPLE_PUBLIC_DATA, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.result = stream.bool()
		obj.data = stream.list(stream.anydata)
		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("AccountClient.get_multiple_public_data -> done")
		return obj
Esempio n. 10
0
	async def get_last_connection_stats(self, pid):
		logger.info("AccountClient.get_last_connection_stats()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		stream.pid(pid)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_GET_LAST_CONNECTION_STATS, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.last_session_login = stream.datetime()
		obj.last_session_logout = stream.datetime()
		obj.current_session_login = stream.datetime()
		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("AccountClient.get_last_connection_stats -> done")
		return obj
Esempio n. 11
0
	async def deliver_message(self, message):
		logger.info("MessagingClient.deliver_message()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		stream.anydata(message)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_DELIVER_MESSAGE, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.modified_message = stream.anydata()
		obj.sandbox_node_ids = stream.list(stream.u32)
		obj.participants = stream.list(stream.pid)
		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("MessagingClient.deliver_message -> done")
		return obj
Esempio n. 12
0
	async def request_connection_data(self, cid, pid):
		logger.info("SecureConnectionClient.request_connection_data()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		stream.u32(cid)
		stream.pid(pid)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_REQUEST_CONNECTION_DATA, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.result = stream.bool()
		obj.connection_data = stream.list(ConnectionData)
		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_connection_data -> done")
		return obj
Esempio n. 13
0
	async def register(self, urls):
		logger.info("SecureConnectionClient.register()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		stream.list(urls, stream.stationurl)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_REGISTER, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.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
Esempio n. 14
0
    async def register(self, client, urls):
        address, port = client.remote_address()

        response = rmc.RMCResponse()
        response.result = common.Result.success()
        response.connection_id = next(self.connection_id)
        response.public_station = common.StationURL(scheme="prudp",
                                                    address=address,
                                                    port=port,
                                                    natf=0,
                                                    natm=0,
                                                    pmp=0,
                                                    upnp=0,
                                                    Tpt=2,
                                                    type=11,
                                                    sid=client.remote_sid())

        self.clients.register(client)
        return response
Esempio n. 15
0
	async def get_relay_signature_key(self):
		logger.info("NATTraversalClient.get_relay_signature_key()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_GET_RELAY_SIGNATURE_KEY, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.mode = stream.s32()
		obj.time = stream.datetime()
		obj.address = stream.string()
		obj.port = stream.u16()
		obj.address_type = stream.s32()
		obj.game_server_id = stream.u32()
		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("NATTraversalClient.get_relay_signature_key -> done")
		return obj
Esempio n. 16
0
	async def nintendo_create_account(self, name, key, groups, email, auth_data):
		logger.info("AccountClient.nintendo_create_account()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		stream.string(name)
		stream.string(key)
		stream.u32(groups)
		stream.string(email)
		stream.anydata(auth_data)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_NINTENDO_CREATE_ACCOUNT, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.pid = stream.pid()
		obj.pid_hmac = 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("AccountClient.nintendo_create_account -> done")
		return obj
Esempio n. 17
0
    async def request_ticket(self, source, target):
        logger.info("AuthenticationClient.request_ticket()")
        #--- request ---
        stream = streams.StreamOut(self.settings)
        stream.pid(source)
        stream.pid(target)
        data = await self.client.request(self.PROTOCOL_ID,
                                         self.METHOD_REQUEST_TICKET,
                                         stream.get())

        #--- response ---
        stream = streams.StreamIn(data, self.settings)
        obj = rmc.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
Esempio n. 18
0
	async def add_friend_request(self, unk1, unk2, unk3, unk4, unk5, game_key, unk6):
		logger.info("FriendsClientV2.add_friend_request()")
		#--- request ---
		stream = streams.StreamOut(self.settings)
		stream.u32(unk1)
		stream.u8(unk2)
		stream.string(unk3)
		stream.u8(unk4)
		stream.string(unk5)
		stream.add(game_key)
		stream.datetime(unk6)
		data = await self.client.request(self.PROTOCOL_ID, self.METHOD_ADD_FRIEND_REQUEST, stream.get())
		
		#--- response ---
		stream = streams.StreamIn(data, self.settings)
		obj = rmc.RMCResponse()
		obj.request = stream.extract(FriendRequest)
		obj.info = stream.extract(FriendInfo)
		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("FriendsClientV2.add_friend_request -> done")
		return obj
Esempio n. 19
0
    async def login_with_context(self, login_data):
        logger.info("AuthenticationClient.login_with_context()")
        #--- request ---
        stream = streams.StreamOut(self.settings)
        stream.anydata(login_data)
        data = await self.client.request(self.PROTOCOL_ID,
                                         self.METHOD_LOGIN_WITH_CONTEXT,
                                         stream.get())

        #--- response ---
        stream = streams.StreamIn(data, self.settings)
        obj = rmc.RMCResponse()
        obj.result = stream.result()
        obj.pid = stream.pid()
        obj.ticket = stream.buffer()
        obj.connection_data = stream.extract(RVConnectionData)
        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_with_context -> done")
        return obj