Merge branch 'master' of https://gitlab.com/eighthave/fdroidclient
This commit is contained in:
		
						commit
						a9495cd907
					
				| @ -27,11 +27,11 @@ import android.net.wifi.WifiInfo; | ||||
| import android.net.wifi.WifiManager; | ||||
| import android.os.Bundle; | ||||
| import android.support.v4.app.FragmentActivity; | ||||
| import android.support.v4.app.FragmentManager; | ||||
| import android.support.v4.app.NavUtils; | ||||
| import android.text.TextUtils; | ||||
| import android.util.Log; | ||||
| import android.view.MenuItem; | ||||
| 
 | ||||
| import android.widget.LinearLayout; | ||||
| import android.widget.Toast; | ||||
| 
 | ||||
| @ -57,8 +57,8 @@ public class ManageRepo extends FragmentActivity { | ||||
| 
 | ||||
|         ((FDroidApp) getApplication()).applyTheme(this); | ||||
| 
 | ||||
|         if (savedInstanceState == null) { | ||||
| 
 | ||||
|         FragmentManager fm = getSupportFragmentManager(); | ||||
|         if (fm.findFragmentById(android.R.id.content) == null) { | ||||
|             // Need to set a dummy view (which will get overridden by the fragment manager | ||||
|             // below) so that we can call setContentView(). This is a work around for | ||||
|             // a (bug?) thing in 3.0, 3.1 which requires setContentView to be invoked before | ||||
| @ -67,10 +67,9 @@ public class ManageRepo extends FragmentActivity { | ||||
|             setContentView( new LinearLayout(this) ); | ||||
| 
 | ||||
|             listFragment = new RepoListFragment(); | ||||
|             getSupportFragmentManager() | ||||
|                 .beginTransaction() | ||||
|                 .add(android.R.id.content, listFragment) | ||||
|                 .commit(); | ||||
|             fm.beginTransaction() | ||||
|                     .add(android.R.id.content, listFragment) | ||||
|                     .commit(); | ||||
|         } | ||||
| 
 | ||||
|         ActionBarCompat.create(this).setDisplayHomeAsUpEnabled(true); | ||||
|  | ||||
| @ -120,7 +120,13 @@ public class UpdateService extends IntentService implements ProgressListener { | ||||
|             } | ||||
| 
 | ||||
|             if (finished && dialog.isShowing()) | ||||
|                 dialog.dismiss(); | ||||
|                 try { | ||||
|                     dialog.dismiss(); | ||||
|                 } catch (IllegalArgumentException e) { | ||||
|                     // sometimes dialog.isShowing() doesn't work :( | ||||
|                     // https://stackoverflow.com/questions/19538282/view-not-attached-to-window-manager-dialog-dismiss | ||||
|                     e.printStackTrace(); | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -52,6 +52,13 @@ public class SignedRepoUpdater extends RepoUpdater { | ||||
|             InputStream input = null; | ||||
|             OutputStream output = null; | ||||
|             try { | ||||
|                 /* | ||||
|                  * JarFile.getInputStream() provides the signature check, even | ||||
|                  * though the Android docs do not mention this, the Java docs do | ||||
|                  * and Android seems to implement it the same: | ||||
|                  * http://docs.oracle.com/javase/6/docs/api/java/util/jar/JarFile.html#getInputStream(java.util.zip.ZipEntry) | ||||
|                  * https://developer.android.com/reference/java/util/jar/JarFile.html#getInputStream(java.util.zip.ZipEntry) | ||||
|                  */ | ||||
|                 input = jarFile.getInputStream(indexEntry); | ||||
|                 output = new FileOutputStream(indexFile); | ||||
|                 Utils.copy(input, output); | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								test/assets/simpleIndex.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/assets/simpleIndex.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										6
									
								
								test/assets/simpleIndex.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								test/assets/simpleIndex.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| <?xml version="1.0" ?><fdroid><repo icon="fdroid-icon.png" name="F-Droid" pubkey="308201ee30820157a0030201020204300d845b300d06092a864886f70d01010b0500302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e301e170d3134303432373030303633315a170d3431303931323030303633315a302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e30819f300d06092a864886f70d010101050003818d0030818902818100a439472e4b6d01141bfc94ecfe131c7c728fdda670bb14c57ca60bd1c38a8b8bc0879d22a0a2d0bc0d6fdd4cb98d1d607c2caefbe250a0bd0322aedeb365caf9b236992fac13e6675d3184a6c7c6f07f73410209e399a9da8d5d7512bbd870508eebacff8b57c3852457419434d34701ccbf692267cbc3f42f1c5d1e23762d790203010001a321301f301d0603551d0e041604140b1840691dab909746fde4bfe28207d1cae15786300d06092a864886f70d01010b05000381810062424c928ffd1b6fd419b44daafef01ca982e09341f7077fb865905087aeac882534b3bd679b51fdfb98892cef38b63131c567ed26c9d5d9163afc775ac98ad88c405d211d6187bde0b0d236381cc574ba06ef9080721a92ae5a103a7301b2c397eecc141cc850dd3e123813ebc41c59d31ddbcb6e984168280c53272f6a442b" timestamp="1398733213" url="https://f-droid.org/repo" version="12"><description> | ||||
| The official repository of the F-Droid client. Applications in this repository | ||||
| are either official binaries built by the original application developers, or | ||||
| are binaries built from source by the admin of f-droid.org using the tools on | ||||
| https://gitorious.org/f-droid. | ||||
| </description></repo></fdroid> | ||||
							
								
								
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithCorruptedCertificate.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithCorruptedCertificate.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithCorruptedEverything.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithCorruptedEverything.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithCorruptedManifest.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithCorruptedManifest.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithCorruptedSignature.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithCorruptedSignature.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithoutSignature.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/assets/simpleIndexWithoutSignature.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								test/libs/commons-io-2.2.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/libs/commons-io-2.2.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										5
									
								
								test/libs/commons-io-2.2.jar.README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								test/libs/commons-io-2.2.jar.README
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| 
 | ||||
| Downloaded from: | ||||
| https://archive.apache.org/dist/commons/io/binaries/commons-io-2.2-bin.zip | ||||
| https://archive.apache.org/dist/commons/io/binaries/commons-io-2.2-bin.zip.asc | ||||
| https://archive.apache.org/dist/commons/io/binaries/commons-io-2.2-bin.zip.sha1 | ||||
							
								
								
									
										142
									
								
								test/src/org/fdroid/fdroid/updater/SignedRepoUpdaterTest.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								test/src/org/fdroid/fdroid/updater/SignedRepoUpdaterTest.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,142 @@ | ||||
| 
 | ||||
| package org.fdroid.fdroid.updater; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.test.InstrumentationTestCase; | ||||
| 
 | ||||
| import org.apache.commons.io.FileUtils; | ||||
| import org.fdroid.fdroid.Utils; | ||||
| import org.fdroid.fdroid.data.Repo; | ||||
| import org.fdroid.fdroid.updater.RepoUpdater.UpdateException; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.FileOutputStream; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.io.OutputStream; | ||||
| 
 | ||||
| public class SignedRepoUpdaterTest extends InstrumentationTestCase { | ||||
| 
 | ||||
|     private Context context; | ||||
|     private RepoUpdater repoUpdater; | ||||
| 
 | ||||
|     String simpleIndexPubkey = "308201ee30820157a0030201020204300d845b300d06092a864886f70d01010b0500302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e301e170d3134303432373030303633315a170d3431303931323030303633315a302a3110300e060355040b1307462d44726f6964311630140603550403130d70616c6174736368696e6b656e30819f300d06092a864886f70d010101050003818d0030818902818100a439472e4b6d01141bfc94ecfe131c7c728fdda670bb14c57ca60bd1c38a8b8bc0879d22a0a2d0bc0d6fdd4cb98d1d607c2caefbe250a0bd0322aedeb365caf9b236992fac13e6675d3184a6c7c6f07f73410209e399a9da8d5d7512bbd870508eebacff8b57c3852457419434d34701ccbf692267cbc3f42f1c5d1e23762d790203010001a321301f301d0603551d0e041604140b1840691dab909746fde4bfe28207d1cae15786300d06092a864886f70d01010b05000381810062424c928ffd1b6fd419b44daafef01ca982e09341f7077fb865905087aeac882534b3bd679b51fdfb98892cef38b63131c567ed26c9d5d9163afc775ac98ad88c405d211d6187bde0b0d236381cc574ba06ef9080721a92ae5a103a7301b2c397eecc141cc850dd3e123813ebc41c59d31ddbcb6e984168280c53272f6a442b"; | ||||
| 
 | ||||
|     @Override | ||||
|     protected void setUp() { | ||||
|         context = getInstrumentation().getContext(); | ||||
|         Repo repo = new Repo(); | ||||
|         repo.pubkey = this.simpleIndexPubkey; | ||||
|         repoUpdater = RepoUpdater.createUpdaterFor(context, repo); | ||||
|     } | ||||
| 
 | ||||
|     private InputStream getInputStreamFromAssets(String fileName) { | ||||
|         try { | ||||
|             return context.getResources().getAssets().open(fileName); | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     private File getTestFile(String fileName) { | ||||
|         File indexFile; | ||||
|         InputStream input = null; | ||||
|         OutputStream output = null; | ||||
|         try { | ||||
|             indexFile = File.createTempFile("index-", ".xml", context.getFilesDir()); | ||||
|             input = getInputStreamFromAssets(fileName); | ||||
|             output = new FileOutputStream(indexFile); | ||||
|             Utils.copy(input, output); | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|             return null; | ||||
|         } finally { | ||||
|             Utils.closeQuietly(output); | ||||
|             Utils.closeQuietly(input); | ||||
|         } | ||||
|         return indexFile; | ||||
|     } | ||||
| 
 | ||||
|     public void testExtractIndexFromJar() { | ||||
|         File simpleIndexXml = getTestFile("simpleIndex.xml"); | ||||
|         File simpleIndexJar = getTestFile("simpleIndex.jar"); | ||||
|         File testFile = null; | ||||
| 
 | ||||
|         // these are supposed to succeed | ||||
|         try { | ||||
|             testFile = repoUpdater.getIndexFromFile(simpleIndexJar); | ||||
|             assertTrue(testFile.length() == simpleIndexXml.length()); | ||||
|             assertEquals(FileUtils.readFileToString(testFile), | ||||
|                     FileUtils.readFileToString(simpleIndexXml)); | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|             fail(); | ||||
|         } catch (UpdateException e) { | ||||
|             e.printStackTrace(); | ||||
|             fail(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void testExtractIndexFromJarWithoutSignatureJar() { | ||||
|         // this is supposed to fail | ||||
|         try { | ||||
|             repoUpdater.getIndexFromFile(getTestFile("simpleIndexWithoutSignature.jar")); | ||||
|             fail(); | ||||
|         } catch (UpdateException e) { | ||||
|             // success! | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void testExtractIndexFromJarWithCorruptedManifestJar() { | ||||
|         // this is supposed to fail | ||||
|         try { | ||||
|             repoUpdater.getIndexFromFile(getTestFile("simpleIndexWithCorruptedManifest.jar")); | ||||
|             fail(); | ||||
|         } catch (UpdateException e) { | ||||
|             e.printStackTrace(); | ||||
|             fail(); | ||||
|         } catch (SecurityException e) { | ||||
|             // success! | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void testExtractIndexFromJarWithCorruptedSignature() { | ||||
|         // this is supposed to fail | ||||
|         try { | ||||
|             repoUpdater.getIndexFromFile(getTestFile("simpleIndexWithCorruptedSignature.jar")); | ||||
|             fail(); | ||||
|         } catch (UpdateException e) { | ||||
|             e.printStackTrace(); | ||||
|             fail(); | ||||
|         } catch (SecurityException e) { | ||||
|             // success! | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void testExtractIndexFromJarWithCorruptedCertificate() { | ||||
|         // this is supposed to fail | ||||
|         try { | ||||
|             repoUpdater.getIndexFromFile(getTestFile("simpleIndexWithCorruptedCertificate.jar")); | ||||
|             fail(); | ||||
|         } catch (UpdateException e) { | ||||
|             e.printStackTrace(); | ||||
|             fail(); | ||||
|         } catch (SecurityException e) { | ||||
|             // success! | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void testExtractIndexFromJarWithCorruptedEverything() { | ||||
|         // this is supposed to fail | ||||
|         try { | ||||
|             repoUpdater.getIndexFromFile(getTestFile("simpleIndexWithCorruptedEverything.jar")); | ||||
|             fail(); | ||||
|         } catch (UpdateException e) { | ||||
|             e.printStackTrace(); | ||||
|             fail(); | ||||
|         } catch (SecurityException e) { | ||||
|             // success! | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Daniel Martí
						Daniel Martí