diff --git a/app/src/main/java/asgardius/page/s3manager/ObjectPolicy.java b/app/src/main/java/asgardius/page/s3manager/ObjectPolicy.java index 94cd831..7229293 100644 --- a/app/src/main/java/asgardius/page/s3manager/ObjectPolicy.java +++ b/app/src/main/java/asgardius/page/s3manager/ObjectPolicy.java @@ -63,10 +63,23 @@ public class ObjectPolicy extends AppCompatActivity { String policy = s3client.getBucketPolicy(bucket).getPolicyText(); publicbucket = policy.contains("arn:aws:s3:::"+bucket+"/*") && policy.contains("s3:GetObject"); publicobject = false; - if(!publicbucket) { - publicobject = (policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"*\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"**\"")) && policy.contains("s3:GetObject"); + if(!publicbucket && policy.contains("s3:GetObject")) { + if((policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"*\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filename+"**\"")) && policy.contains("s3:GetObject")) { + publicobject = true; + } else { + String[] path = filename.split("/"); + String filepath = ""; + for (int i = 0; i < path.length-1; i++) { + filepath = filepath+path[i]+"/"; + //System.out.println(filepath); + if(policy.contains("\"arn:aws:s3:::"+bucket+"/"+filepath+"*\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filepath+"**\"")) { + publicobject = true; + i = path.length; + } + } + } } - System.out.println(policy); + //System.out.println(policy); runOnUiThread(new Runnable() { @@ -75,13 +88,14 @@ public class ObjectPolicy extends AppCompatActivity { //Your code goes here if(publicbucket){ permission.setText(getResources().getString(R.string.public_bucket)); + setprivate.setVisibility(View.VISIBLE); }else if(publicobject) { permission.setText(getResources().getString(R.string.public_object)); + setprivate.setVisibility(View.VISIBLE); }else { - permission.setText(getResources().getString(R.string.custom_policy)); + permission.setText(getResources().getString(R.string.private_object)); setpublic.setVisibility(View.VISIBLE); } - setprivate.setVisibility(View.VISIBLE); simpleProgressBar.setVisibility(View.INVISIBLE); } }); diff --git a/app/src/main/java/asgardius/page/s3manager/Share.java b/app/src/main/java/asgardius/page/s3manager/Share.java index 9398438..09136fa 100644 --- a/app/src/main/java/asgardius/page/s3manager/Share.java +++ b/app/src/main/java/asgardius/page/s3manager/Share.java @@ -36,7 +36,7 @@ import java.util.List; public class Share extends AppCompatActivity { String username, password, endpoint, bucket, object, location, title, objectlist; - boolean mediafile, style, publicbucket; + boolean mediafile, style, publicobject; TextView expirationtext; ProgressBar simpleProgressBar; Region region; @@ -127,6 +127,25 @@ public class Share extends AppCompatActivity { try { //Your code goes here String policy = s3client.getBucketPolicy(bucket).getPolicyText(); + publicobject = false; + if(policy.contains("arn:aws:s3:::"+bucket+"/*") && policy.contains("s3:GetObject")) { + publicobject = true; + } else if(policy.contains("s3:GetObject")) { + if((policy.contains("\"arn:aws:s3:::"+bucket+"/"+object+"\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+object+"*\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+object+"**\"")) && policy.contains("s3:GetObject")) { + publicobject = true; + } else { + String[] path = object.split("/"); + String filepath = ""; + for (int i = 0; i < path.length-1; i++) { + filepath = filepath+path[i]+"/"; + //System.out.println(filepath); + if(policy.contains("\"arn:aws:s3:::"+bucket+"/"+filepath+"*\"") || policy.contains("\"arn:aws:s3:::"+bucket+"/"+filepath+"**\"")) { + publicobject = true; + i = path.length; + } + } + } + } //System.out.println(policy); runOnUiThread(new Runnable() { @@ -134,12 +153,10 @@ public class Share extends AppCompatActivity { @Override public void run() { //Your code goes here - if(policy.contains("arn:aws:s3:::"+bucket+"/*") && policy.contains("s3:GetObject")){ - publicbucket = true; + if(publicobject){ expirationtext.setText(getResources().getString(R.string.expiration_not_required)); } else { - publicbucket = false; datepick.setEnabled(true); hourpick.setEnabled(true); minutepick.setEnabled(true); @@ -162,7 +179,7 @@ public class Share extends AppCompatActivity { @Override public void run() { - publicbucket = false; + publicobject = false; datepick.setEnabled(true); hourpick.setEnabled(true); minutepick.setEnabled(true); @@ -354,7 +371,7 @@ public class Share extends AppCompatActivity { objectlist = ""; List objects = result.getObjectSummaries(); for (S3ObjectSummary os : objects) { - if(publicbucket) { + if(publicobject) { objectlist = objectlist+s3client.getUrl(bucket, os.getKey()).toString()+"\n"; } else { request = new GeneratePresignedUrlRequest(bucket, os.getKey()).withExpiration(expiration); @@ -365,7 +382,7 @@ public class Share extends AppCompatActivity { result = s3client.listNextBatchOfObjects (result); objects = result.getObjectSummaries(); for (S3ObjectSummary os : objects) { - if(publicbucket) { + if(publicobject) { objectlist = objectlist+s3client.getUrl(bucket, os.getKey()).toString()+"\n"; } else { request = new GeneratePresignedUrlRequest(bucket, os.getKey()).withExpiration(expiration); @@ -377,7 +394,7 @@ public class Share extends AppCompatActivity { } private void sharefile() { - if(publicbucket) { + if(publicobject) { objectURL = s3client.getUrl(bucket, object); } else { if (datepick.getText().toString().equals("")) { diff --git a/app/src/main/res/layout/activity_bucket_policy.xml b/app/src/main/res/layout/activity_bucket_policy.xml index aa792d5..5912f8c 100644 --- a/app/src/main/res/layout/activity_bucket_policy.xml +++ b/app/src/main/res/layout/activity_bucket_policy.xml @@ -27,14 +27,14 @@ android:id="@+id/set_public" android:layout_width="match_parent" android:layout_height="70dp" - android:text="@string/set_public_bucket" + android:text="@string/set_public" android:visibility="gone" />