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