briar issueshttps://code.briarproject.org/briar/briar/-/issues2018-06-12T11:32:27Zhttps://code.briarproject.org/briar/briar/-/issues/382Deliver messages to incoming message hook after their dependencies2018-06-12T11:32:27ZakwizgranDeliver messages to incoming message hook after their dependenciesThe sync layer should keep track of each message's dependencies and deliver messages to the incoming message hook after their dependencies. If any dependency is invalid or in a different group, the message is invalid and should be delete...The sync layer should keep track of each message's dependencies and deliver messages to the incoming message hook after their dependencies. If any dependency is invalid or in a different group, the message is invalid and should be deleted.
Messages that are waiting for dependencies should not be visible to clients.
Subtask of #122.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/383Database error after OS update2018-06-12T11:32:27ZErnir ErlingssonDatabase error after OS updateUpdated my device from 5.1.1 to 6.0.1 and Briar stopped working, I get a DB_ERROR in BriarService.java.
`
W/LifecycleManagerImpl: org.briarproject.api.db.DbException
org.briarproject.api.db.DbException
at org.briarproject.db.Jd...Updated my device from 5.1.1 to 6.0.1 and Briar stopped working, I get a DB_ERROR in BriarService.java.
`
W/LifecycleManagerImpl: org.briarproject.api.db.DbException
org.briarproject.api.db.DbException
at org.briarproject.db.JdbcDatabase.open(JdbcDatabase.java:256)
at org.briarproject.db.H2Database.open(H2Database.java:41)
at org.briarproject.db.DatabaseComponentImpl.open(DatabaseComponentImpl.java:106)
at org.briarproject.lifecycle.LifecycleManagerImpl.startServices(LifecycleManagerImpl.java:79)
at org.briarproject.android.BriarService$1.run(BriarService.java:94)
05-11 10:16:29.398 18637-19779/org.briarproject W/BriarService: Startup failed: DB_ERROR
`
https://code.briarproject.org/briar/briar/-/issues/384Create conversation manager2021-07-05T13:41:40ZakwizgranCreate conversation managerThe UI combines private messages, introduction messages and forum sharing messages into a single conversation. This requires various parts of the UI (contact list, conversation view, notification manager) to combine messages from the mes...The UI combines private messages, introduction messages and forum sharing messages into a single conversation. This requires various parts of the UI (contact list, conversation view, notification manager) to combine messages from the messaging, introduction, and forum sharing clients. Create a ConversationManager in the core that deals with combining these messages and presents a unified API (including events) to the UI.https://code.briarproject.org/briar/briar/-/issues/385Add BQP support to the LAN plugin2018-06-12T11:32:27ZakwizgranAdd BQP support to the LAN pluginThis will allow us to work around Bluetooth issues when both devices are connected to the same LAN.This will allow us to work around Bluetooth issues when both devices are connected to the same LAN.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/386NullPointerException when rotating screen2018-06-12T11:32:27ZTorsten GroteNullPointerException when rotating screenJust rotate the screen in the contact or forum list. This was probably caused by the recent merge of !130
```
05-11 12:43:23.935 22116-22116/org.briarproject E/ACRA: ACRA caught a RuntimeException for org.briarproject
...Just rotate the screen in the contact or forum list. This was probably caused by the recent merge of !130
```
05-11 12:43:23.935 22116-22116/org.briarproject E/ACRA: ACRA caught a RuntimeException for org.briarproject
java.lang.RuntimeException: Unable to resume activity {org.briarproject/org.briarproject.android.NavDrawerActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2111)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)
at android.app.ActivityThread.access$700(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4904)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at org.briarproject.android.contact.ContactListFragment.onResume(ContactListFragment.java:150)
at android.support.v4.app.Fragment.performResume(Fragment.java:2020)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1107)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1234)
at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:2056)
at android.support.v4.app.FragmentController.dispatchResume(FragmentController.java:196)
at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:505)
at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:494)
at android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:174)
at android.app.Activity.performResume(Activity.java:5332)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2608)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2111)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)
at android.app.ActivityThread.access$700(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
```Milestone Chttps://code.briarproject.org/briar/briar/-/issues/387Allow to Unshare Forum2021-10-21T15:47:36ZTorsten GroteAllow to Unshare ForumWe switched the forum sharing paradigm from sharing as state to sharing as action and now there's no way to unshare a forum with someone without leaving the forum. I guess we can just misuse the LEAVE messages without actually leaving th...We switched the forum sharing paradigm from sharing as state to sharing as action and now there's no way to unshare a forum with someone without leaving the forum. I guess we can just misuse the LEAVE messages without actually leaving the forum, so we don't have to alter the protocol.
However, where in the UI do we allow to unshare a forum with someone?https://code.briarproject.org/briar/briar/-/issues/388Possible Race-Condition when Two Contacts Share Same Forum with each other2018-01-28T11:30:28ZTorsten GrotePossible Race-Condition when Two Contacts Share Same Forum with each other> What happens if Alice and Bob invite each other to the forum, then some time later both their invitations are delivered? It seems to me that each of them will consult `canBeShared()` for the incoming invitation, see that they've sent a...> What happens if Alice and Bob invite each other to the forum, then some time later both their invitations are delivered? It seems to me that each of them will consult `canBeShared()` for the incoming invitation, see that they've sent an invitation, and delete the incoming invitation. Does that sound right to you? Does that mean neither of them will receive the other's invitation?
Yes, their invitations are most likely deleted without any indication to them.
![forum-sharing-same](/uploads/a267b5ec4a46f4a8f6dc8a83b233d6f9/forum-sharing-same.png)
> Regardless of the answer to this specific question, I think you're right to be concerned about treating symptoms rather than causes. Unfortunately I think the problem might be quite fundamental. We're trying to keep the state of the forum (are we subscribed, is it visible to the contact) consistent with the state of each session - but there can be multiple sessions relating to a given forum. Can we be sure that those sessions will always produce consistent answers to (a) whether we belong to the forum, and (b) whether the contact belongs to it?
> The message queue ensures that our messages are delivered to the contact in order and vice versa, but if we want to be sure that a given set of messages always produces the same state, we need a canonical ordering for all the messages: ours and the contact's. Within each session, we can use knowledge of the protocol to order certain messages (for example, a response must follow an invitation), but I'm not sure we can do that across multiple sessions in the general case.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/389Crash on App restart/rotate2018-06-12T11:32:27ZErnir ErlingssonCrash on App restart/rotateBriar crashes on config changes, e.g. rotate, and when app is re-opened in the Navigation drawer. This is an unforeseen error due to #274 that was merged today.Briar crashes on config changes, e.g. rotate, and when app is re-opened in the Navigation drawer. This is an unforeseen error due to #274 that was merged today.https://code.briarproject.org/briar/briar/-/issues/390Allow changing the password2018-06-12T11:32:27ZTorsten GroteAllow changing the passwordIt has been requested for it to be possible to change the initially chosen password.It has been requested for it to be possible to change the initially chosen password.Milestone Dhttps://code.briarproject.org/briar/briar/-/issues/391Handle responses to forum invitations by multiple contacts2018-01-28T11:30:28ZTorsten GroteHandle responses to forum invitations by multiple contactsMilestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/392Use new metadata queries for forum client2018-06-12T11:32:27ZTorsten GroteUse new metadata queries for forum clientUse new queries introduced in !187.Use new queries introduced in !187.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/393Sort threaded messages2018-06-12T11:32:27ZakwizgranSort threaded messagesWrite code for sorting a forest of threaded messages:
* Roots in timestamp order
* Children below their parents
* Siblings in timestamp order
The input will be an unsorted collection of messages with parent pointers. The code mus...Write code for sorting a forest of threaded messages:
* Roots in timestamp order
* Children below their parents
* Siblings in timestamp order
The input will be an unsorted collection of messages with parent pointers. The code must not use more than O(n log n) time or space. Algorithms presumably exist already, find them!
Subtask of #122.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/394Add text input area to ForumActivity2018-06-12T11:32:27ZakwizgranAdd text input area to ForumActivityThe compose button should show the text input area. Touching the list of messages should hide the text input area.
WriteForumPostActivity and ReadForumPostActivity can be removed.
Subtask of #122.The compose button should show the text input area. Touching the list of messages should hide the text input area.
WriteForumPostActivity and ReadForumPostActivity can be removed.
Subtask of #122.Milestone Chttps://code.briarproject.org/briar/briar/-/issues/395Convert CreateIdentityActivity to XML2018-06-12T11:32:27ZakwizgranConvert CreateIdentityActivity to XMLSubtask of #53.Subtask of #53.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/396Convert ExpiredActivity to XML2018-06-12T11:32:27ZakwizgranConvert ExpiredActivity to XMLSubtask of #53.Subtask of #53.Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/397Remove unused Java layout helpers2018-06-12T11:32:27ZakwizgranRemove unused Java layout helpersVarious classes in org.briarproject.android.util can be removed once the last layouts have been converted to XML.
Subtask of #53.Various classes in org.briarproject.android.util can be removed once the last layouts have been converted to XML.
Subtask of #53.Milestone DTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/398Forum Sharing Status2018-06-12T11:32:27ZTorsten GroteForum Sharing Status![Forum Sharing Status](https://code.briarproject.org/akwizgran/briar/uploads/2aad92e52a41c235a44d38293c2b7f68/Metainformation_Overflow3.jpg)![Forum Sharing Status](https://code.briarproject.org/akwizgran/briar/uploads/2aad92e52a41c235a44d38293c2b7f68/Metainformation_Overflow3.jpg)Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/399Contact List Unread Messages2018-06-12T11:32:27ZTorsten GroteContact List Unread MessagesCurrently the background of the contact changes when there are unread messages. Don't do this, but instead use little bubbles to indicate unread messages like so:
![screenshot_contacts](/uploads/934ee90a8f941cc1043540a23118026e/screen...Currently the background of the contact changes when there are unread messages. Don't do this, but instead use little bubbles to indicate unread messages like so:
![screenshot_contacts](/uploads/934ee90a8f941cc1043540a23118026e/screenshot_contacts.jpg)Milestone CTorsten GroteTorsten Grotehttps://code.briarproject.org/briar/briar/-/issues/400Show Active Forum Members2020-11-21T19:00:39ZTorsten GroteShow Active Forum MembersIntroduce a screen reachable from a forum's overflow menu that shows the active members of a forum.
![Metainformation_Overflow3](/uploads/e7f88f57219c5ca3a112479f125db6de/Metainformation_Overflow3.jpg)Introduce a screen reachable from a forum's overflow menu that shows the active members of a forum.
![Metainformation_Overflow3](/uploads/e7f88f57219c5ca3a112479f125db6de/Metainformation_Overflow3.jpg)https://code.briarproject.org/briar/briar/-/issues/401Blog Protocol2018-04-16T16:24:37ZTorsten GroteBlog ProtocolDesign a protocol to be used for blog.
It should also be documented [in the wiki](https://code.briarproject.org/akwizgran/briar/wikis/BlogClient).
# Message types
Each blog has its own group. For exchanging invitations, the clie...Design a protocol to be used for blog.
It should also be documented [in the wiki](https://code.briarproject.org/akwizgran/briar/wikis/BlogClient).
# Message types
Each blog has its own group. For exchanging invitations, the client uses a separate group for each pair of contacts.
## Blog Group
The group descriptor is a BDF list with three elements: `name` (string), `author_name` (string) and `public_key` (raw). Posts are signed with the corresponding private key.
**0: POST** - The content is a BDF list with two elements: `content` (list) and `signature` (raw).
`content` is a list with six elements: `parent_id` (raw or null), `content_type` (string), `title` (string or null), `body` (raw), and `attachments` (dictionary or null). `parent_id` is the identifier of a post to which this is a follow-up. This parent post needs to be in the same blog group as this post. A blog clients must support a `content_type` of 'text/plain' for posts. Each key in `attachments` is the name of an attachment, and the value is a list with two elements: `content_type` (string) and `message_id` (raw).
`signature` is a signature over a list with three elements: `group_id` (raw), `timestamp` (int), and `content` (list). `group_id` and `timestamp` are taken from the [message header](BSP#message-format). `content` is described above.
**1: ATTACHMENT** - The content is raw data.
## Invitation Group
The group descriptor is a BDF list containing the unique IDs of the contacts' identities, sorted in ascending order as byte strings.
**0: INVITATION** - The content is a BDF list with four elements: `name` (string), `description` (string), `author` (list), and `message` (string or null).
The `author` is a list with two elements: `author_name` (string) and `public_key` (raw).
The identifier of the blog group to which the invitation refers can be calculated from `name`, `author_name` and `public_key`, as described above. `message` is an optional message from the inviter to the invitee.
**1: ACCEPT RESPONSE** - Response that indicates the peer wants to subscribe to the blog. The content is a BDF list with one element: `invitation_id` (raw) which is the identifier of an invitation created by the opposite peer.
**2: DECLINE RESPONSE** - Response that indicates the peer does not want to subscribe to the blog. The content is a BDF list with one element: `invitation_id` (raw) which is the identifier of an invitation created by the opposite peer.
**3: LEAVE** - The content is a BDF list with one element: `invitation_id` (raw), which is the identifier of an invitation created by either peer.
![blog-sharing](/uploads/3086686b3a8380d8c2e80c0014e20edf/blog-sharing.png)
# Open Questions
1. ~~Who can invite to blogs? Only the creator or everybody who subscribes to the blog?~~
* Every subscriber can invite others.
2. ~~Who can send a LEAVE message? Only subscribers or the creator as well?~~
* Both, the creator and the subscribers can send LEAVE messages at any time.
3. ~~How can we enforce that only the creator can post to the blog group? Should other clients reject message based on signature? If so, how do they verify?~~
* The signature on blog posts is verified using the public_key of the blog.
4. Which key pair is used for the blog? The long-term key-pair of its creator or a special blog key-pair?
5. What will be the `content_type` of blog posts? Are we going to support HTML initially? How will people create/edit the HTML?
* This has been outsourced to #421, but we need to know what kind of content type to accept and validate for the protocol.
* All blog clients should support `text/html` for the content type.
6. ~~Should blog posts not have a title as well? It is currently not part of the **POST** message.~~
* A `title` has been added to the **POST** message.
7. ~~Do we really need a note/message to be send along with the response?~~
* No! It has been removed from both responses.
8. Will blog authors be able to edit their post after they have published it already? If so, how? Special update message or re-use of `MessageId`?
* For the first phase, we'll assume that blog authors cannot edit published posts
9. Are we really going to use the 'sharing as action' paradigm for blogs? Maybe 'sharing as state' would be more suitable and allow for blogs to be available to more people more easily. ([discussion](https://code.briarproject.org/akwizgran/briar/issues/405#note_6043))
* akwizgran decided to do sharing as action as with forums, because this is easier to understand for users due to familiar metaphors.
* later we can add automatic sharing on top of the current mechanism
10. Should there be an option/flag that signals contacts you share the blog with that they automatically should share it with all of their contacts? (metadata leak?)
* If we do sharing as action, then no. At least, initially. Later we can add automatic sharing, but don't necessarily need a flag for it.
11. Are we going to support comments initially? If not, it might still be worth looking into how they could work, so the protocol does not need to be changed too much later on.
* WordPress-style comments won't be supported
* However, we could support Tumblr-style "reblog and add your own text" comments
* Reblogging would not be a phase 1 feature however
12. How do we tie the creator's identity to the blog (and its key pair)?
* the blog descriptor includes the creator's public key and she uses her private key to sign all posts.
13. Should the blog description be part of the group descriptor? If yes, it can never be changed, if no, it could be changed by sharers.Milestone DTorsten GroteTorsten Grote