Commit Graph

307 Commits

Author SHA1 Message Date
Jonathan Rainville 5f4aab3121
feat(community)_: send signals about member reevaluation in progress (#5120)
Needed for https://github.com/status-im/status-desktop/issues/14378
2024-05-08 15:55:30 -04:00
Igor Sirotin 3e4367a7cf
fix_: community members reevaluation fixes (#5117)
* fix_: prevent publishing older community description

* fix_: schedule member reevaluation instead of reevaluating in parallel

* fix_: lock community on members reevaluation

* fix(TestJoinCommunityAsAdminWithMemberAndAdminPermission)_: setup waitOnCommunitiesEvent in advance

* fix(TestEditSharedAddresses)_: remove redundant community description retrieval
2024-05-08 16:32:46 +01:00
Igor Sirotin 1c43b7a29b
chore_: better community json log (#5118) 2024-05-08 15:49:41 +01:00
Jonathan Rainville 9c2c638aaf
fix(communities)_: fix curated comm fetch not starting for unknown comm (#5110) (#5111) 2024-05-03 13:17:11 -04:00
Jonathan Rainville 852a5beb39
feat_: limit number of members in a community and number of pending requests (#5107)
* feat(community): limit nb of requests to join and members

Needed for https://github.com/status-im/status-desktop/issues/14532

* chore: simplify TestRequestAccessAgain

* chore: add a test for the member limit
2024-05-01 13:27:31 -04:00
Ajay Sivan 0ef4fb8cc7
chore_: log revealed addresses on join/edit (#5073) 2024-04-24 18:54:25 -07:00
Patryk Osmaczko bd91f5ab49 fix_: keep community locks map unreleased when Manager stops
`ReevaluateMembers` is run as a separate goroutine and sometimes it is
executed after `Manager` has been stopped. It tries to use the lock and
in consequence, it panics. Ensuring the map is still there prevents that.

^Happened in test: `TestCreateTokenPermission`.
2024-04-17 17:31:38 +02:00
Patryk Osmaczko 9d309886f7 fix_: mitigate race conditions on community
mitigates: status-im/status-desktop#14432
2024-04-17 17:31:38 +02:00
Mikhail Rogachev 6da423fc71
feat: Add an expiration and periodical publishing for community grants (#5024)
* feat_: add periodical publishing for community grants
feat_: Validate grant when receiving it
feat_: add expiration for grants
feat_: add test for grants expiration
fix_: move grants test to profile showcase, fix a few bugs
* feat_: use one group mesage to update grants
* chore_: review fixes
2024-04-17 16:53:51 +02:00
Jonathan Rainville 6c82a6c2be fix(manager): make both perms satisfied if viewAndPost is satisfied
Fixes https://github.com/status-im/status-desktop/issues/14209
2024-04-04 14:34:59 -04:00
yqrashawn aa73a0512c
feat: add contact customization color (#4869) 2024-04-03 22:49:57 +08:00
Mykhailo Prakhov 3c76fdc626
fix: crash in dbRecordBundleToCommunity if event was signed not by a control node (#5009) 2024-04-03 14:51:28 +02:00
Patryk Osmaczko 7f44d4d12a refactor: remove unused `COMMUNITY_EVENTS_MESSAGE_REJECTED` 2024-03-25 13:18:20 +01:00
Andrea Maria Piana 894eb5758e Add canView to chat & fix admin role 2024-03-20 16:48:07 -04:00
Andrea Maria Piana 67dfff2324 Add index to hash ratchet & cache processed description 2024-03-13 11:35:11 +00:00
Jonathan Rainville 6f119b9c53 fix(community): fix member role not being updated 2024-03-12 11:04:45 -04:00
Jonathan Rainville 605e3a4ed0 fix(community): fix editing a community channel loses the members 2024-03-12 11:04:45 -04:00
Patryk Osmaczko b02e3b19e2 feat: add permissions reevaluation request
Token master can't manage members directly, so it must request
reevaluation from the control node.

fixes: status-im/status-desktop#13778
2024-03-12 14:15:01 +01:00
Patryk Osmaczko 1de61d1933 fix: channel members evaluation on request acceptance
If there is only `viewAndPost` permission set on a channel, members who
don't satisfy the criteria shouldn't be able to view the channel.
2024-03-12 14:15:01 +01:00
Igor Sirotin bdb2b261a6
feature: view only channel reactions (#4820)
* CommunityMember channel role

* make generate
2024-03-01 17:15:38 +00:00
Mykhailo Prakhov 84713384bb
fix: TestAdminBanMemberWithDeletingAllMessages test fix (#4855) 2024-03-01 17:37:20 +01:00
Michal Iskierko df930b1d73 feat: New field in TokenCriteria proto
AmountInWei will have a wei-like units.
Amount field becomes deprecated because it kept string with float value.

Comparison (in case of Decimals == 5):
Amount (deprecated) = "1.2"
AmountInWei = "120000"

Issue #11588
2024-02-27 16:25:26 +01:00
Mykhailo Prakhov 92bc64bb41
feat: kicked/banned member should not have spectated mode after the kick/ban (#4806) 2024-02-26 13:33:07 +01:00
frank 4581c4f5f7
fix: sometimes channels do not randomly appear in test community after its creation (#4669) 2024-02-23 10:16:51 +08:00
Michał Iskierko ba7faea027
fix: Use correct chains when checking permissions: mainnet or testnet (#4793)
Fix #18896
2024-02-22 10:17:35 -05:00
Mykhailo Prakhov 3959948c4c
chore: fix ban/unban flow and delete all messages feature (#4743)
feat: delete all messages for banned member and ban/unban AC notifications
2024-02-22 11:25:13 +01:00
Mikhail Rogachev eb5bad4868
Feat: Profile showcase validate collectible ownership (#4737)
* feat: profile showcase checks then presenting collectibles

* chore: more obvious CollectiblesManager configuration
2024-02-22 11:08:58 +03:00
Patryk Osmaczko e2cab1a8ae fix: ensure community events eventual consistency
- Extracted `community_events_factory.go`
- Introduced `eventsProcessor`
  - Improved processing logic order
  - Improved events filtering
- Introduced concept of `EventTypeID` to prevent redundant events handling
- Added sanity check before events appliance when reading community from
  database
- Removed reject&re-apply scheme (no more ping-pong issue)
- Fixed and added more variants to eventual consistency test

fixes: status-im/status-desktop#13387
fixes: status-im/status-desktop#13388
2024-02-20 21:07:01 +01:00
Mikhail Rogachev 526e3d74f1
Feat: proof of membership for profile showcase communities (#4713)
* chore: move profile showcase structures to the indentity package

* feat: implement proof of membership for unecrypted communities

* feat: implement proof of membership for encrypted communties with grants
2024-02-15 22:13:12 +03:00
Andrea Maria Piana daef5c56e2 Add HighestRole & ordered roles to permission response
This commit adds HighestRole & a list of permissions in order of
importance to the CheckPermissionToJoinResponse.

This simplify client code so that it doesn't need to be calculated on
the client.
2024-02-12 12:18:56 +00:00
Mikhail Rogachev 3ea2002904
Feat: Modify grants for profile showcase use (#4694)
* chore: regenerate proto binaries

* feat: remove unused grant code for community's canPost
2024-02-11 15:11:04 +03:00
Michal Iskierko cc66f43713 fix: fix permissions checker
Improve CheckPermissions function.
Check separately member and admin+tokenmaster permissions..

Issue #12884
2024-02-09 19:00:43 +01:00
Icaro Motta b727f1e14b Extract entire permissioned balances logic to separate file 2024-02-07 20:10:49 +00:00
Icaro Motta 105703e2eb Remove zombie code from experiments 2024-02-07 20:10:49 +00:00
Icaro Motta 4f8a66fc07 Create endpoint to get permissioned balances 2024-02-07 20:10:49 +00:00
Andrea Maria Piana 605fe40e32 Fix encryption metadata issues #4613
This commit fixes a few issues with communities encryption:

Key distribution was disconnected from the community description, this created a case where the key would arrive after the community description and that would result in the client thinking that it was kicked.
To overcome this, we added a message that signals the user that is kicked. Also, we distribute the key with the community description so that there's no more issues with timing.
This is a bit expensive for large communities, and it will require some further optimizations.

Key distribution is now also connected to the request to join response, so there are no timing issues.

Fixes an issue with key distribution (race condition) where the community would be modified before being compared, resulting in a comparison of two identical communities, which would result in no key being distributed. This commit only partially address the issue.
2024-02-07 10:25:41 +00:00
richΛrd 98c1ebec05
fix: handle community shard unassignment and update (#4627) 2024-01-30 13:56:59 -04:00
Patryk Osmaczko ac81c15805 fix: ignore outdated COMMUNITY_SHARD_KEY messages
This mitigates issue where community shard on client's side was not in
sync with owner's.

relates to: status-im/status-desktop#13217
2024-01-29 18:21:51 +01:00
Patryk Osmaczko 1a85a29b1b chore: cover community sharding with tests
closes: #4262
2024-01-24 14:24:57 +01:00
Ibrahem Khalil 436d229856
Add last opened at key for community (#4514) 2024-01-21 12:55:14 +02:00
Siddarth Kumar 926f6a3c72 Revert "test: bump go-libp2p"
This reverts commit d0ca4447c6.
2024-01-18 20:29:33 +00:00
Richard Ramos d0ca4447c6
test: bump go-libp2p 2024-01-18 14:28:06 +00:00
Igor Sirotin a5acffc001
fix: TestFetchRealCommunity with shards fleet (#4553)
* fix: TestFetchRealCommunity with shards fleet
* fix: DefaultShardPubsubTopic
* chore: print waku query request id
2024-01-16 13:38:41 +03:00
Mykhailo Prakhov 94bee02ef7
chore: fetch comunity token metadata during handling community description (#4562) 2024-01-16 09:08:56 +01:00
Patryk Osmaczko 2a5dc6dec0 chore: remove boilerplate check of `communities.GetByID` clients
motivated by:
https://github.com/status-im/status-go/pull/4514#discussion_r1445808116
2024-01-10 18:58:17 +01:00
Ibrahem Khalil e1b52f9eae
Add joined at key to communities (#4513) 2024-01-09 20:36:47 +02:00
Igor Sirotin 405d468e0e
fix: force verifiedOwner in `handleSyncInstallationCommunity` (#4405) (#4538) 2024-01-08 15:57:57 +00:00
Mykhailo Prakhov 5c704b2ec2
chore: check and manualy verify community if during the fetchCommunity, community was added to the verification loop (#4533) 2024-01-05 18:09:38 +01:00
Patryk Osmaczko 1d3c618fb4 feat: encrypt `CommunityDescription` fields
Extended `CommunityDescription` with a `privateData` map. This map
associates each hash ratchet `key_id` and `seq_no` with an encrypted
`CommunityDescription`. Each encrypted instance includes only data
requiring encryption.

closes: status-im/status-desktop#12851
closes: status-im/status-desktop#12852
closes: status-im/status-desktop#12853
2023-12-22 18:17:06 +01:00
Mykhailo Prakhov 134137f9c5
feat: implemented a mechanism to retrieve shard information for a given community ID (#4499)
* feat: a mechanism to retrieve shard information for a given community ID
2023-12-22 13:37:37 +01:00
Boris Melnik 6d77fb771a
fix(windows-build): Remove free space check for archives (#4485) 2023-12-20 21:21:02 +03:00
Mykhailo Prakhov a5f6a6c2f6
fix: privileged member accepted/rejected request to join action is not approved by the control node after the member leaved and tries to join the community again (#4487) 2023-12-19 14:45:34 +01:00
Igor Sirotin e3ef8c649a
chore: store node requests manager (#4446) 2023-12-15 19:50:12 +00:00
Ibrahem Khalil 90c31afe7c
New way of sharing communities (#4341) 2023-12-15 13:55:32 +02:00
Boris Melnik af9d3bc7b3
fix(history-archive): Skip dowloading data from torrent if free space is not enought (#4449) 2023-12-14 12:52:10 +03:00
Ibrahem Khalil be8568e174
Community member joins the community if he sends a request to join an… (#4321) 2023-12-09 14:46:30 +02:00
Mykhailo Prakhov fe604b2806
fix: tokenMaster does not have members revealed addresses (#4425) 2023-12-07 17:27:14 +01:00
Mykhailo Prakhov 04c533b8d5
chore: API for getting all non-approved requests to join for all communities (#4422) 2023-12-05 15:50:45 +01:00
Mykhailo Prakhov 058120fad9
chore: parse all non confirmed requests to join of the community during getting all communities (#4409) 2023-12-04 19:20:09 +01:00
Patryk Osmaczko 9820acd74d refactor(communities)_: delegate Community creation in Persistence
In persistence.go, the lack of sufficient knowledge for constructing
fully initialized Community objects required clients to manually call
`initializeCommunity`. This commit addresses the issue by delegating
Community creation to Manager. It also removes queries and logic
duplication.
2023-12-04 12:41:39 +01:00
Mikhail Rogachev 317ad2f906
feat: Ignore AC notifications created before the request to join the community (#4385)
* fix: Ignore AC notifications created before the request to join the community

* review fixes
2023-11-29 19:28:04 +04:00
Mykhailo Prakhov 5cd20ded4e
chore: fix sending request to join msg's to the new owner (#4371) 2023-11-23 16:58:43 +01:00
Richard Ramos d198ac63fc fix: find free port for torrent 2023-11-22 16:41:27 -04:00
Richard Ramos c012f94681 fix: send request on non protected topics, and add missing shard information on invite 2023-11-18 12:12:06 -04:00
Vitaly Vlasov 1794b93c16 Always set PubsubTopic in filters 2023-11-18 02:26:34 +02:00
Dario Gabriel Lipicar e17d4606b1 fix: implement cancellable collectibles requests 2023-11-17 10:35:30 -03:00
Patryk Osmaczko 2c55b9c676 feat: cache curated communities in db
closes: status-im/status-desktop#12277
2023-11-16 17:21:28 +01:00
richΛrd 2c954d42cf
feat: replace DefaultPubsubTopic by Shard 32 (#4161) 2023-11-09 20:29:15 -04:00
Mykhailo Prakhov b15fa6d2c8
fix: promote self to community control node event if we are not a community member (#4270) 2023-11-07 14:18:59 +01:00
Patryk Osmaczko 4fddcb54ff refactor: extract Community.ChatID 2023-11-04 00:11:40 +01:00
Patryk Osmaczko 953ed4c8e4 chore: update directory abi and addresses
closes: status-im/status-desktop#12569
2023-11-03 17:56:21 +01:00
Patryk Osmaczko 25f25e9853 chore: populate Community with PubsubTopicPrivateKey
part of: status-im/status-desktop#12408
2023-11-03 11:27:43 +01:00
Sale Djenic 11a3612290 feat: support signing of a join/edit community request from within the app or keycard 2023-11-03 07:49:01 +01:00
Mykhailo Prakhov eb437e9d8d
feat: kick all members after ownership change and auto-accept after sharing the address (#4187)
feat: kick all members after the ownership change and auto-accept after sharing the address
2023-10-31 15:20:40 +01:00
Patryk Osmaczko 627ac9449b refactor: remove always nil `shard` parameter in `HandleCommunityDescriptionMessage` 2023-10-31 10:03:31 +01:00
Jonathan Rainville 0cac2af1db
fix(community): getting kicked out of a community should still spectate (#4217)
Fixes https://github.com/status-im/status-desktop/issues/12558

When getting kicked out of  a community, before we used to leave the community completely, but just keep the filters on.
That created a problem when reopening the app, because the community disappeared and could even create a problem in desktop where it tried to open the last opened community but it's no longer there.

The fix now is that when getting kicked out, we instead just remove ourselves from the community and set Joined to false, but we keep the community spectated.
2023-10-27 15:20:08 -04:00
Patryk Osmaczko e304fe3344 chore: enable community rekey loop 2023-10-27 16:29:26 +02:00
Patryk Osmaczko 445135eb94 fix: ensure receivedMessage.CommunityID in chat message handler is set
This enables clients to obtain invitation's community ID even when
description processing is queued.

part of: status-im/status-desktop#12481
2023-10-25 20:10:01 +02:00
Patryk Osmaczko 3452eb72a8 refactor: remove community invitation only access 2023-10-25 17:34:37 +02:00
Patryk Osmaczko b262d7e88c refactor: rename Community.OnRequest() -> AutoAccept() 2023-10-25 17:34:37 +02:00
Patryk Osmaczko b321f28c9d refactor: update community access enum naming 2023-10-25 17:34:37 +02:00
Andrea Maria Piana 23f71c1125 Fix encryption id && rekey with a single message
This commit changes the format of the encryption id to be based off 3
things:

1) The group id
2) The timestamp
3) The actual key

Previously this was solely based on the timestamp and the group id, but
this might lead to conflicts. Moreover the format of the key was an
uint32 and so it would wrap periodically.

The migration is a bit tricky, so first we cleared the cache of keys,
that's easier than migrating, and second we set the new field hash_id to
the concatenation of group_id / key_id.
This might lead on some duplication in case keys are re-received, but it
should not have an impact on the correctness of the code.

I have added 2 tests covering compatibility between old/new clients, as
this should not be a breaking change.

It also adds a new message to rekey in a single go, instead of having to
send multiple messages
2023-10-24 20:48:54 +01:00
Patryk Osmaczko bd245ab45b refactor: unify `Owned()` and `ControlledCommunities()` 2023-10-22 21:50:41 +02:00
Patryk Osmaczko 345851c396 feat: ensure unique control node across devices
closes: status-im/status-desktop#11962
2023-10-22 21:50:41 +02:00
Patryk Osmaczko 05db628406 chore: omit `CommunityDescription` queuing if owner is already verified 2023-10-19 22:11:53 +02:00
Mykhailo Prakhov 74c13fd363
fix: setup owner as CommunityDescription signer after minting community owner token (#4168) 2023-10-19 13:03:41 +02:00
Patryk Osmaczko 246b68a8c0 refactor: rename and simplify `UpdatePrivateKeyAndControlNode` 2023-10-18 22:32:29 +02:00
Patryk Osmaczko a9cde06e44 refactor: simplify community requests logic
With the recent introduction of pending states, the community requests
logic became more complex. This commit simplifies the flow and
appropriately delegates logic to its corresponding abstraction levels:
messenger, manager and community. Additionally, it eliminates
redundancies in notifications and request-saving mechanism.
2023-10-18 17:11:20 +02:00
Patryk Osmaczko 0881d8cdb0 Add queue for processing community description & configurable control node 2023-10-17 21:00:24 +01:00
Michal Iskierko f2464cccfd fix: HandleCommunityTokensMetadata
Add all tokens in the loop.
Get MaxSupply instead of TotalSupply

Issue #12104
2023-10-15 20:32:47 +02:00
Richard Ramos de5c7b8e5b feat: shard fleet
Adds shard.test fleet and changes the non protected shard index to 64
2023-10-12 17:07:57 -04:00
Richard Ramos 350a952116 waku2: static shards
- use protected topics for communities
- associate chats to pubsub topics and populate these depending if the chat belongs to a community or not
- mailserver functions should be aware of pubsub topics
- generate private key for pubsub topic protection when creating a community
- add shard cluster and index to communities
- setup shards for existing communities
- distribute pubsubtopic password
2023-10-12 17:07:57 -04:00
richΛrd ba5ed725ce
waku2: static shards (#3944)
- use protected topics for communities
- associate chats to pubsub topics and populate these depending if the chat belongs to a community or not
- mailserver functions should be aware of pubsub topics
- generate private key for pubsub topic protection when creating a community
- add shard cluster and index to communities
- setup shards for existing communities
- distribute pubsubtopic password
- fix: do not send the requests to join and cancel in the protected topic
- fix: undefined shard values for backward compatibility
- refactor: use shard message in protobuffers
2023-10-12 15:21:49 -04:00
Jonathan Rainville 11f670636b
fix(communities): set state correctly on request accept or decline (#4144)
Fixes https://github.com/status-im/status-desktop/issues/12413
2023-10-11 15:55:52 -04:00
Jonathan Rainville 736779d94b
fix(communities): make sure to join the community if we are a member (#4118)
Fixes https://github.com/status-im/status-desktop/issues/12368
2023-10-10 14:03:55 -04:00
Patryk Osmaczko bb7273cf6f feat: allow for pending community request state changes
iterates: status-im/status-desktop#11842
2023-10-05 09:24:45 +02:00
Michal Iskierko c85a110a31 feat(CommunityTokens): New deployment contracts and handling signer pub key
New contracts and contract go functions.
Adjust owner&master tokens deployment flow.
Create deployment signature.
CommunityTokens API for handling signer pubkey.

Issue #11954
2023-10-04 11:33:57 +02:00
Patryk Osmaczko 9d374bcadc chore: use lamport timestamp for communities
closes: status-im/status-desktop#11961
2023-10-03 21:45:28 +02:00
Patryk Osmaczko 475036e9f2 fix: stop sending channels members over the wire
fixes: status-im/status-desktop#12114
2023-09-26 13:01:30 +02:00
Dario Gabriel Lipicar ba5cd9c1a4 feat(wallet): add community info to collectibles 2023-09-22 17:55:30 -03:00