added parsing for repository signing key property to provisioning files

This commit is contained in:
Michael Pöhn 2018-01-15 00:04:49 +01:00
parent 4a5ad0a33d
commit 96def8adca
4 changed files with 34 additions and 9 deletions

View File

@ -1,5 +1,8 @@
package org.fdroid.fdroid; package org.fdroid.fdroid;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment; import android.os.Environment;
import android.util.Base64; import android.util.Base64;
@ -35,7 +38,7 @@ public class Provisioner {
/** /**
* search for provision files and process them * search for provision files and process them
*/ */
public void scanAndProcess() { public void scanAndProcess(Context context) {
List<File> files = findProvisionFiles(); List<File> files = findProvisionFiles();
List<ProvisionPlaintext> plaintexts = extractProvisionsPlaintext(files); List<ProvisionPlaintext> plaintexts = extractProvisionsPlaintext(files);
@ -52,6 +55,10 @@ public class Provisioner {
+ " " + repo.getName() + " " + repo.getName()
+ " " + repo.getUrl() + " " + repo.getUrl()
+ " " + repo.getUsername()); + " " + 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++) { for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i); char c = text.charAt(i);
if ((c >= 'a' && c <= 'm') || (c >= 'A' && c <= 'M')) { 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')) { } else if ((c >= 'n' && c <= 'z') || (c >= 'N' && c <= 'Z')) {
sb.append(c - 13); sb.append((char)(c - 13));
} else { } else {
sb.append(c); sb.append(c);
} }
@ -204,6 +211,7 @@ public class Provisioner {
private String name; private String name;
private String url; private String url;
private String sigfp;
private String username; private String username;
private String password; private String password;
@ -223,6 +231,14 @@ public class Provisioner {
this.url = url; this.url = url;
} }
public String getSigfp() {
return sigfp;
}
public void setSigfp(String sigfp) {
this.sigfp = sigfp;
}
public String getUsername() { public String getUsername() {
return username; return username;
} }

View File

@ -1,6 +1,8 @@
package org.fdroid.fdroid; package org.fdroid.fdroid;
import org.fdroid.fdroid.shadows.ShadowLog;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
@ -19,6 +21,11 @@ import java.util.List;
@SuppressWarnings("LineLength") @SuppressWarnings("LineLength")
public class ProvisionerTest { public class ProvisionerTest {
@Before
public void setUp() {
ShadowLog.stream = System.out;
}
@Test @Test
public void provisionLookup() throws IOException { public void provisionLookup() throws IOException {
// wired hack for getting resource dir path ... // wired hack for getting resource dir path ...
@ -59,7 +66,7 @@ public class ProvisionerTest {
List<Provisioner.ProvisionPlaintext> result = p.extractProvisionsPlaintext(files); List<Provisioner.ProvisionPlaintext> result = p.extractProvisionsPlaintext(files);
Assert.assertEquals(result.size(), 1); 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")); Assert.assertTrue(String.valueOf(result.get(0).getProvisionPath()).endsWith("demo_credentials_user2.fdrp"));
} }
@ -70,7 +77,7 @@ public class ProvisionerTest {
List<Provisioner.ProvisionPlaintext> result = p.extractProvisionsPlaintext(files); List<Provisioner.ProvisionPlaintext> result = p.extractProvisionsPlaintext(files);
Assert.assertEquals(result.size(), 1); 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")); Assert.assertTrue(String.valueOf(result.get(0).getProvisionPath()).endsWith("demo_credentials_user1.fdrp"));
} }
@ -79,22 +86,24 @@ public class ProvisionerTest {
List<Provisioner.ProvisionPlaintext> plaintexts = Arrays.asList(new Provisioner.ProvisionPlaintext(), new Provisioner.ProvisionPlaintext()); List<Provisioner.ProvisionPlaintext> plaintexts = Arrays.asList(new Provisioner.ProvisionPlaintext(), new Provisioner.ProvisionPlaintext());
plaintexts.get(0).setProvisionPath("/some/dir/abc.fdrp"); 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).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(); Provisioner p = new Provisioner();
List<Provisioner.Provision> result = p.parseProvisions(plaintexts); List<Provisioner.Provision> result = p.parseProvisions(plaintexts);
Assert.assertEquals("/some/dir/abc.fdrp", result.get(0).getProvisonPath()); Assert.assertEquals("/some/dir/abc.fdrp", result.get(0).getProvisonPath());
Assert.assertEquals("test repo a", result.get(0).getRepositoryProvision().getName()); 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("user1", result.get(0).getRepositoryProvision().getUsername());
Assert.assertEquals("secret1", result.get(0).getRepositoryProvision().getPassword()); Assert.assertEquals("secret1", result.get(0).getRepositoryProvision().getPassword());
Assert.assertEquals("/some/dir/def.fdrp", result.get(1).getProvisonPath()); Assert.assertEquals("/some/dir/def.fdrp", result.get(1).getProvisonPath());
Assert.assertEquals("test repo a", result.get(1).getRepositoryProvision().getName()); 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("user2", result.get(1).getRepositoryProvision().getUsername());
Assert.assertEquals("other secret", result.get(1).getRepositoryProvision().getPassword()); Assert.assertEquals("other secret", result.get(1).getRepositoryProvision().getPassword());
} }