From 63121aecf9c3361a3a4b3dbb10fcb0f478f5c5a7 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Sun, 14 Apr 2013 17:59:08 +0100
Subject: [PATCH] Prevent users from trying to post to blogs that aren't
 theirs.

---
 briar-android/res/values/strings.xml          |  2 ++
 .../sf/briar/android/blogs/BlogActivity.java  | 20 +++++++++++-----
 .../briar/android/blogs/BlogListAdapter.java  |  1 +
 .../android/blogs/NotYourBlogDialog.java      | 24 +++++++++++++++++++
 .../android/blogs/ReadBlogPostActivity.java   | 23 +++++++++++-------
 5 files changed, 56 insertions(+), 14 deletions(-)
 create mode 100644 briar-android/src/net/sf/briar/android/blogs/NotYourBlogDialog.java

diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index 5e9dfba96c..4ad9695b87 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -61,6 +61,8 @@
 	<string name="choose_blog_name">Choose a name for your blog:</string>
 	<string name="blog_visible_to_all">Share this blog with all contacts</string>
 	<string name="blog_visible_to_some">Share this blog with chosen contacts</string>
+	<string name="not_your_blog">Only the creator of this blog can write posts</string>
+	<string name="ok_button">OK</string>
 	<string name="compose_blog_title">New Post</string>
 	<string name="new_blog_item">New blog\u2026</string>
 	<string name="create_nickname_item">New nickname\u2026</string>
diff --git a/briar-android/src/net/sf/briar/android/blogs/BlogActivity.java b/briar-android/src/net/sf/briar/android/blogs/BlogActivity.java
index b30e276402..04c3404ded 100644
--- a/briar-android/src/net/sf/briar/android/blogs/BlogActivity.java
+++ b/briar-android/src/net/sf/briar/android/blogs/BlogActivity.java
@@ -15,7 +15,7 @@ import java.util.logging.Logger;
 
 import net.sf.briar.R;
 import net.sf.briar.android.AscendingHeaderComparator;
-import net.sf.briar.android.BriarActivity;
+import net.sf.briar.android.BriarFragmentActivity;
 import net.sf.briar.android.BriarService;
 import net.sf.briar.android.BriarService.BriarServiceConnection;
 import net.sf.briar.android.widgets.HorizontalBorder;
@@ -44,8 +44,8 @@ import android.widget.ListView;
 
 import com.google.inject.Inject;
 
-public class BlogActivity extends BriarActivity implements DatabaseListener,
-OnClickListener, OnItemClickListener {
+public class BlogActivity extends BriarFragmentActivity
+implements DatabaseListener, OnClickListener, OnItemClickListener {
 
 	private static final Logger LOG =
 			Logger.getLogger(BlogActivity.class.getName());
@@ -54,6 +54,7 @@ OnClickListener, OnItemClickListener {
 			new BriarServiceConnection();
 
 	private String groupName = null;
+	private boolean postable = false;
 	private BlogAdapter adapter = null;
 	private ListView list = null;
 
@@ -73,6 +74,7 @@ OnClickListener, OnItemClickListener {
 		groupName = i.getStringExtra("net.sf.briar.GROUP_NAME");
 		if(groupName == null) throw new IllegalStateException();
 		setTitle(groupName);
+		postable = i.getBooleanExtra("net.sf.briar.POSTABLE", false);
 
 		LinearLayout layout = new LinearLayout(this);
 		layout.setLayoutParams(MATCH_MATCH);
@@ -208,9 +210,14 @@ OnClickListener, OnItemClickListener {
 	}
 
 	public void onClick(View view) {
-		Intent i = new Intent(this, WriteBlogPostActivity.class);
-		i.putExtra("net.sf.briar.GROUP_ID", groupId.getBytes());
-		startActivity(i);
+		if(postable) {
+			Intent i = new Intent(this, WriteBlogPostActivity.class);
+			i.putExtra("net.sf.briar.GROUP_ID", groupId.getBytes());
+			startActivity(i);
+		} else {
+			NotYourBlogDialog dialog = new NotYourBlogDialog();
+			dialog.show(getSupportFragmentManager(), "NotYourBlogDialog");
+		}
 	}
 
 	public void onItemClick(AdapterView<?> parent, View view, int position,
@@ -223,6 +230,7 @@ OnClickListener, OnItemClickListener {
 		Intent i = new Intent(this, ReadBlogPostActivity.class);
 		i.putExtra("net.sf.briar.GROUP_ID", groupId.getBytes());
 		i.putExtra("net.sf.briar.GROUP_NAME", groupName);
+		i.putExtra("net.sf.briar.POSTABLE", postable);
 		i.putExtra("net.sf.briar.MESSAGE_ID", item.getId().getBytes());
 		Author author = item.getAuthor();
 		if(author != null) {
diff --git a/briar-android/src/net/sf/briar/android/blogs/BlogListAdapter.java b/briar-android/src/net/sf/briar/android/blogs/BlogListAdapter.java
index f37c1f04f2..af935b7fa3 100644
--- a/briar-android/src/net/sf/briar/android/blogs/BlogListAdapter.java
+++ b/briar-android/src/net/sf/briar/android/blogs/BlogListAdapter.java
@@ -103,6 +103,7 @@ implements OnItemClickListener {
 		Intent i = new Intent(getContext(), BlogActivity.class);
 		i.putExtra("net.sf.briar.GROUP_ID", item.getGroupId().getBytes());
 		i.putExtra("net.sf.briar.GROUP_NAME", item.getGroupName());
+		i.putExtra("net.sf.briar.POSTABLE", item.isPostable());
 		getContext().startActivity(i);
 	}
 }
diff --git a/briar-android/src/net/sf/briar/android/blogs/NotYourBlogDialog.java b/briar-android/src/net/sf/briar/android/blogs/NotYourBlogDialog.java
new file mode 100644
index 0000000000..c306339de1
--- /dev/null
+++ b/briar-android/src/net/sf/briar/android/blogs/NotYourBlogDialog.java
@@ -0,0 +1,24 @@
+package net.sf.briar.android.blogs;
+
+import net.sf.briar.R;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+
+public class NotYourBlogDialog extends DialogFragment {
+
+	private static final DialogInterface.OnClickListener IGNORE =
+			new DialogInterface.OnClickListener() {
+		public void onClick(DialogInterface dialog, int which) {}
+	};
+
+	@Override
+	public Dialog onCreateDialog(Bundle state) {
+		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+		builder.setMessage(R.string.not_your_blog);
+		builder.setPositiveButton(R.string.ok_button, IGNORE);
+		return builder.create();
+	}
+}
diff --git a/briar-android/src/net/sf/briar/android/blogs/ReadBlogPostActivity.java b/briar-android/src/net/sf/briar/android/blogs/ReadBlogPostActivity.java
index bb97cbca53..33b672e1b4 100644
--- a/briar-android/src/net/sf/briar/android/blogs/ReadBlogPostActivity.java
+++ b/briar-android/src/net/sf/briar/android/blogs/ReadBlogPostActivity.java
@@ -21,7 +21,7 @@ import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 
 import net.sf.briar.R;
-import net.sf.briar.android.BriarActivity;
+import net.sf.briar.android.BriarFragmentActivity;
 import net.sf.briar.android.BriarService;
 import net.sf.briar.android.BriarService.BriarServiceConnection;
 import net.sf.briar.android.widgets.HorizontalBorder;
@@ -49,7 +49,7 @@ import android.widget.TextView;
 
 import com.google.inject.Inject;
 
-public class ReadBlogPostActivity extends BriarActivity
+public class ReadBlogPostActivity extends BriarFragmentActivity
 implements OnClickListener {
 
 	static final int RESULT_REPLY = RESULT_FIRST_USER;
@@ -64,6 +64,7 @@ implements OnClickListener {
 
 	@Inject private BundleEncrypter bundleEncrypter;
 	private GroupId groupId = null;
+	private boolean postable = false;
 	private Rating rating = UNRATED;
 	private boolean read;
 	private ImageView thumb = null;
@@ -89,6 +90,7 @@ implements OnClickListener {
 		String groupName = i.getStringExtra("net.sf.briar.GROUP_NAME");
 		if(groupName == null) throw new IllegalStateException();
 		setTitle(groupName);
+		postable = i.getBooleanExtra("net.sf.briar.POSTABLE", false);
 		b = i.getByteArrayExtra("net.sf.briar.MESSAGE_ID");
 		if(b == null) throw new IllegalStateException();
 		messageId = new MessageId(b);
@@ -324,12 +326,17 @@ implements OnClickListener {
 			setResult(RESULT_NEXT);
 			finish();
 		} else if(view == replyButton) {
-			Intent i = new Intent(this, WriteBlogPostActivity.class);
-			i.putExtra("net.sf.briar.GROUP_ID", groupId.getBytes());
-			i.putExtra("net.sf.briar.PARENT_ID", messageId.getBytes());
-			startActivity(i);
-			setResult(RESULT_REPLY);
-			finish();
+			if(postable) {
+				Intent i = new Intent(this, WriteBlogPostActivity.class);
+				i.putExtra("net.sf.briar.GROUP_ID", groupId.getBytes());
+				i.putExtra("net.sf.briar.PARENT_ID", messageId.getBytes());
+				startActivity(i);
+				setResult(RESULT_REPLY);
+				finish();
+			} else {
+				NotYourBlogDialog dialog = new NotYourBlogDialog();
+				dialog.show(getSupportFragmentManager(), "NotYourBlogDialog");
+			}
 		}
 	}
 
-- 
GitLab