From 96def8adca3a8370b75b93b19468f7595da198fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Mon, 15 Jan 2018 00:04:49 +0100 Subject: [PATCH] added parsing for repository signing key property to provisioning files --- .../java/org/fdroid/fdroid/Provisioner.java | 22 +++++++++++++++--- .../org/fdroid/fdroid/ProvisionerTest.java | 21 ++++++++++++----- .../resources/demo_credentials_user1.fdrp | Bin 259 -> 332 bytes .../resources/demo_credentials_user2.fdrp | Bin 220 -> 261 bytes 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/Provisioner.java b/app/src/main/java/org/fdroid/fdroid/Provisioner.java index 03ce936cb..9a5c6ee24 100644 --- a/app/src/main/java/org/fdroid/fdroid/Provisioner.java +++ b/app/src/main/java/org/fdroid/fdroid/Provisioner.java @@ -1,5 +1,8 @@ package org.fdroid.fdroid; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; import android.os.Environment; import android.util.Base64; @@ -35,7 +38,7 @@ public class Provisioner { /** * search for provision files and process them */ - public void scanAndProcess() { + public void scanAndProcess(Context context) { List files = findProvisionFiles(); List plaintexts = extractProvisionsPlaintext(files); @@ -52,6 +55,10 @@ public class Provisioner { + " " + repo.getName() + " " + repo.getUrl() + " " + repo.getUsername()); + + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(repo.getUrl())); + context.startActivity(i); } } } @@ -81,9 +88,9 @@ public class Provisioner { for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); if ((c >= 'a' && c <= 'm') || (c >= 'A' && c <= 'M')) { - sb.append(c + 13); + sb.append((char)(c + 13)); } else if ((c >= 'n' && c <= 'z') || (c >= 'N' && c <= 'Z')) { - sb.append(c - 13); + sb.append((char)(c - 13)); } else { sb.append(c); } @@ -204,6 +211,7 @@ public class Provisioner { private String name; private String url; + private String sigfp; private String username; private String password; @@ -223,6 +231,14 @@ public class Provisioner { this.url = url; } + public String getSigfp() { + return sigfp; + } + + public void setSigfp(String sigfp) { + this.sigfp = sigfp; + } + public String getUsername() { return username; } diff --git a/app/src/test/java/org/fdroid/fdroid/ProvisionerTest.java b/app/src/test/java/org/fdroid/fdroid/ProvisionerTest.java index 368ab6112..14882e15f 100644 --- a/app/src/test/java/org/fdroid/fdroid/ProvisionerTest.java +++ b/app/src/test/java/org/fdroid/fdroid/ProvisionerTest.java @@ -1,6 +1,8 @@ package org.fdroid.fdroid; +import org.fdroid.fdroid.shadows.ShadowLog; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @@ -19,6 +21,11 @@ import java.util.List; @SuppressWarnings("LineLength") public class ProvisionerTest { + @Before + public void setUp() { + ShadowLog.stream = System.out; + } + @Test public void provisionLookup() throws IOException { // wired hack for getting resource dir path ... @@ -59,7 +66,7 @@ public class ProvisionerTest { List result = p.extractProvisionsPlaintext(files); Assert.assertEquals(result.size(), 1); - Assert.assertEquals("{\"username\": \"user2\", \"name\": \"test repo a\", \"password\": \"other secret\", \"url\": \"https://example.com/repo\"}", result.get(0).getRepositoryProvision()); + Assert.assertEquals("{\"username\": \"user2\", \"password\": \"other secret\", \"name\": \"Example Repo\", \"url\": \"https://example.com/fdroid/repo\", \"sigfp\": \"1111222233334444555566667777888899990000aaaabbbbccccddddeeeeffff\"}", result.get(0).getRepositoryProvision()); Assert.assertTrue(String.valueOf(result.get(0).getProvisionPath()).endsWith("demo_credentials_user2.fdrp")); } @@ -70,7 +77,7 @@ public class ProvisionerTest { List result = p.extractProvisionsPlaintext(files); Assert.assertEquals(result.size(), 1); - Assert.assertEquals("{\"username\": \"user1\", \"password\": \"secret1\", \"name\": \"test repo a\", \"url\": \"https://example.com/repo\"}", result.get(0).getRepositoryProvision()); + Assert.assertEquals("{\"sigfp\": \"1111222233334444555566667777888899990000aaaabbbbccccddddeeeeffff\", \"name\": \"Example Repo\", \"password\": \"secret1\", \"url\": \"https://example.com/fdroid/repo\", \"username\": \"user1\"}", result.get(0).getRepositoryProvision()); Assert.assertTrue(String.valueOf(result.get(0).getProvisionPath()).endsWith("demo_credentials_user1.fdrp")); } @@ -79,22 +86,24 @@ public class ProvisionerTest { List plaintexts = Arrays.asList(new Provisioner.ProvisionPlaintext(), new Provisioner.ProvisionPlaintext()); plaintexts.get(0).setProvisionPath("/some/dir/abc.fdrp"); - plaintexts.get(0).setRepositoryProvision("{\"username\": \"user1\", \"password\": \"secret1\", \"name\": \"test repo a\", \"url\": \"https://example.com/repo\"}"); + plaintexts.get(0).setRepositoryProvision("{\"username\": \"user1\", \"password\": \"secret1\", \"name\": \"test repo a\", \"url\": \"https://example.com/fdroid/repo\", \"sigfp\": \"1111222233334444555566667777888899990000aaaabbbbccccddddeeeeffff\"}"); plaintexts.get(1).setProvisionPath("/some/dir/def.fdrp"); - plaintexts.get(1).setRepositoryProvision("{\"username\": \"user2\", \"name\": \"test repo a\", \"password\": \"other secret\", \"url\": \"https://example.com/repo\"}"); + plaintexts.get(1).setRepositoryProvision("{\"username\": \"user2\", \"name\": \"test repo a\", \"password\": \"other secret\", \"url\": \"https://example.com/fdroid/repo\", \"sigfp\": \"1111222233334444555566667777888899990000aaaabbbbccccddddeeeeffff\"}"); Provisioner p = new Provisioner(); List result = p.parseProvisions(plaintexts); Assert.assertEquals("/some/dir/abc.fdrp", result.get(0).getProvisonPath()); Assert.assertEquals("test repo a", result.get(0).getRepositoryProvision().getName()); - Assert.assertEquals("https://example.com/repo", result.get(0).getRepositoryProvision().getUrl()); + Assert.assertEquals("https://example.com/fdroid/repo", result.get(0).getRepositoryProvision().getUrl()); + Assert.assertEquals("1111222233334444555566667777888899990000aaaabbbbccccddddeeeeffff", result.get(0).getRepositoryProvision().getSigfp()); Assert.assertEquals("user1", result.get(0).getRepositoryProvision().getUsername()); Assert.assertEquals("secret1", result.get(0).getRepositoryProvision().getPassword()); Assert.assertEquals("/some/dir/def.fdrp", result.get(1).getProvisonPath()); Assert.assertEquals("test repo a", result.get(1).getRepositoryProvision().getName()); - Assert.assertEquals("https://example.com/repo", result.get(1).getRepositoryProvision().getUrl()); + Assert.assertEquals("https://example.com/fdroid/repo", result.get(1).getRepositoryProvision().getUrl()); + Assert.assertEquals("1111222233334444555566667777888899990000aaaabbbbccccddddeeeeffff", result.get(1).getRepositoryProvision().getSigfp()); Assert.assertEquals("user2", result.get(1).getRepositoryProvision().getUsername()); Assert.assertEquals("other secret", result.get(1).getRepositoryProvision().getPassword()); } diff --git a/app/src/test/resources/demo_credentials_user1.fdrp b/app/src/test/resources/demo_credentials_user1.fdrp index 6864a8ab38d604fef0158fc76e226d4b89782822..94b27d803fa0220b0d20f4cfd208df7079bb9965 100644 GIT binary patch literal 332 zcmWIWW@Zs#U|`??Vnqh!4e}<3fUG}23=%C$Ey#~AD9SI(EY8f&)635)&d>ApJ?qzO zz)+{UB&qD?!m|?5nVPOSo9{hKt9I@F zloS+qR@>+VzvLP}{|!o(Usw*@WH=&!zN4KfG%;k4Bxl`L7H{`SU+gt+O>g}6+~cF= zMbSgO{1drWe>|ypeaEJ4Vb|Zd^}q4RHp}@pHIiB3f&<&b`{8`bj7EBUil=WY^w!Ov zJuhe5o{f?_?>hW1<68eYXTi!jC31&T-_ET2e!KbNpWpX(yuWijasPj|0B=Sn5wQQT b`x@wRB!Ddp0=!w-KuQ>a&u>uu@pqQWeOb>c zQO#fU->FDmC%5l$Bb!y=EEkWctIKr!(s#XlwPa>t?UnevOQEfeWnwAk0#`{^>~_0$ fV=0ID-k19VycwB97=*F7Z89&TCEIGC3mF&yibF^2 diff --git a/app/src/test/resources/demo_credentials_user2.fdrp b/app/src/test/resources/demo_credentials_user2.fdrp index d0122cdba33c81d8fe790b42d134f294e5a8bc95..acf364dd170807a8bc8e9328d3d1fce4762bb70f 100644 GIT binary patch delta 197 zcmcb^*vcdw;LXe;!oa}50mO<7Df3Jp*8*7wfLM6q2C;h6Q_*~f6hv4qtQFYTn^F6H zzw`?}0ljUWf<^kizCG3D9}4%W8GpXAS>S%I%H37|d0)I<=D1EfvTxc-o+Dl-45#k; zd;ad>V>T0CX)eEY-sWnRhN^cqPwn%q-WOTUXMSm`_m|99y#8KH>c&AizJeCvIS-kn hHx#h4%W*KhxDIriI3tq?0~Y5^oM*wd4(LV(1_0M!NizTd literal 220 zcmWIWW@Zs#U|`??Vnqh?hmWg5fUImF76#&?)Pnr@f};Gg%;L=aJiV;q{5;b$j$91} zJT4bkx2!qZbo$=1D~)c=v