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 6864a8ab3..94b27d803 100644 Binary files a/app/src/test/resources/demo_credentials_user1.fdrp and b/app/src/test/resources/demo_credentials_user1.fdrp differ diff --git a/app/src/test/resources/demo_credentials_user2.fdrp b/app/src/test/resources/demo_credentials_user2.fdrp index d0122cdba..acf364dd1 100644 Binary files a/app/src/test/resources/demo_credentials_user2.fdrp and b/app/src/test/resources/demo_credentials_user2.fdrp differ