package com.peachpasswords.sync import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test class PairingInvitationTest { private val token = "AAECAwQFBgcICQoLDA0ODw" private val relay = "wss://relay.peachpasswords.com" private val kat = "peach-pair-v1:eyJyZWxheSI6IndzczovL3JlbGF5LnBlYWNocGFzc3dvcmRzLmNvbSIsInRva2VuIjoiQUFFQ0F3UUZCZ2NJQ1FvTERBME9EdyJ9" @Test fun `matches browser invitation KAT`() { assertEquals(kat, createPairingInvitation("$relay/", token)) assertEquals(PairingInvitation(relay, token), parsePairingInvitation(kat)) assertEquals("$relay/r/$token", parsePairingInvitation(kat)!!.roomUrl()) } @Test fun `rejects malformed insecure and short-token invitations`() { assertNull(parsePairingInvitation("not-an-invitation")) assertNull(parsePairingInvitation("peach-pair-v1:%%%")) assertNull(parsePairingInvitation(raw("""{"relay":"ws://relay.test","token":"$token"}"""))) assertNull(parsePairingInvitation(raw("""{"relay":"$relay","token":"short"}"""))) } private fun raw(json: String): String = "peach-pair-v1:" + java.util.Base64.getUrlEncoder().withoutPadding() .encodeToString(json.toByteArray()) }