Commit Graph

291 Commits

Author SHA1 Message Date
Mykhailo Prakhov fc401bc8a7
fix(communities)_: kick AC notification after control node device change (#5472)
fix(communities)_: kick AC notification after control node device change
2024-07-05 10:38:12 +02:00
Patryk Osmaczko cb20c4c64a feat(communities)_: introduce bloom filter members list
iterates: status-im/status-desktop#15064
2024-07-04 17:54:29 +02:00
Ivan Belyakov 3983114ae5 test(wallet)_: add unit tests for balance fetcher
replace types with interfaces where necessary to allow mocking
implement fake eth scanner and erc20 contracts
2024-07-04 09:29:49 +02:00
Patryk Osmaczko 89e7e7f24b refactor(communities)_: expand `channelEncrypted` usage 2024-06-27 20:15:42 +02:00
Jonathan Rainville d942ad1a1f
fix(manager)_: make sure createCommunityPermission schedules the reeval (#5404)
Fixes https://github.com/status-im/status-desktop/issues/15175

The problem was that we used StartMembersReevaluaitonLoop in createCommunityPermission, in case the loop was never started. Indeed it worked if it was the first ever permission, because the loop would then start and members would be re-evaluated.

However, if the loop was already started, in the case where there were previous permissions, the call would just early exit, because it was already started.

The solution here is to use `ScheduleMembersReevaluaiton` like other permission functions use. To make sure a first permission still works, we call startLoop in schedule if the task doesn't exist.
2024-06-25 14:46:29 -04:00
Godfrain Jacques 892fcffce4
chore(communities)_: make member use wallet tokens during permission checking (#5268)
fixes #14913
2024-06-11 14:00:04 -07:00
Patryk Osmaczko ec9e29ef92 chore(communities)_: reevaluate permissions with pre-fetched owners
That's an optimisation. Instead of fetching collectibles owners for each
member, it is fetched once, before members iteration.

It should significantly reduce amount of queries to providers.

closes: status-im/status-desktop#14914
2024-06-07 23:46:20 +02:00
Mikhail Rogachev b0213e6a41
feat_: delete or update permission when deleting a channel (#5297)
* feat_: delete or update channel permissions when deleting a channel

* chore_: review fixes

* chore_: review fixes (second iteration, squash it!)
2024-06-07 18:30:01 +02:00
Samuel Hawksby-Robinson 1be465d23c chore(no-torrent)_: Refactored NewArchiveManager to use config pattern 2024-06-07 13:44:12 +01:00
Samuel Hawksby-Robinson 3d68013332 chore(no-torrent)_: Renamed Torrent to Archive
I've renamed TorrentManager to ArchiveManager, ArchiveManager to ArchiveFileManager, TorrentContract to ArchiveService, ArchiveContract to ArchiveFileService. I've also renamed all init functions and struct fields to the appropriate archive-centric naming.
2024-06-07 13:44:12 +01:00
Samuel Hawksby-Robinson a9c7db6f25 chore(no-torrent)_: Replaced entirely LogStdout with default logger 2024-06-07 13:44:12 +01:00
Samuel Hawksby-Robinson 66cd084084 chore(no-torrent)_: Copy and pasted Andrea's work
https://github.com/status-im/status-go/pull/5295
2024-06-07 13:44:12 +01:00
Samuel Hawksby-Robinson 9b458c63e0 chore(no-torrent)_: I've fully split Manager from TorrentManager
I've removed any mention or dependency of TorrentManager from Manager. There is still more work to do, but Messenger now communicates directly with a TorrentManager rather than asking the communities Manager to handle it. I've ensured that LogStdout() is only called from TorrentManager and removed entirely from Manager, this functionality seems to be some kind of debug tool specifically for torrent related functionality. Next I need to focus on functions within Messenger that call a TorrentManager and see how to isolate these from the main flows, following that I also need fix the tests that are broken. I will also need to refactor torrentClientReady() so that it is a function of TorrentManager, this may allow for pushing more functions into TorrentManager which will lead to better torrent encapsulation.
2024-06-07 13:44:12 +01:00
Samuel Hawksby-Robinson 6c52d0b120 chore(no-torrent)_: Resolved TorrentManager dep injection
I'm not particularly proud of this work. I've just passed in all the deps as vars, there are way too many concerns handled by the TorrentManager that I don't know what is the best approach to removing them. I've even resorted to declaring an 'Publisher' interface to handle all the 'publish()' calls the TorrentManager makes. Next up I need to resolved the communities Manager API, because I've removed all of its end points. The TorrentManager needs to be a lot more simple than it is.
2024-06-07 13:44:12 +01:00
Samuel Hawksby-Robinson c084ca4230 chore(no-torrent)_: Ensured move of all torrent funcs and structs
I also ensured that the order of functions matches the original code, to make comparison easier during review.
2024-06-07 13:44:12 +01:00
Samuel Hawksby-Robinson 21325345f9 chore(no-torrent)_: Initial migration of all torrent dependent code
Code moved into new TorrentManager. This commit is BROKEN! The code is not ready to use so don't use it, lots more work to do. Biggest problem is that the torrent management in Manager is very tightly coupled to sending encrypting etc. All of that needs to be prised apart
2024-06-07 13:44:12 +01:00
Michal Iskierko b38a9f5878 fix_: Publish token actions to privileged members
Send information to owners and token masters about operations: burn, airdrop, remote destruct.
Add CommunityTokenActionSignal to signalize client side.

Fix #13371
2024-06-03 12:19:19 +02:00
Mykhailo Prakhov 2053bd323b
fix(community)_: handle outdated request to join and request to join response when we have been joined (#5271) 2024-05-31 19:16:45 +02:00
Jonathan Rainville 64d2860571
chore_: remove Light permission checks that are no longer needed (#5267) 2024-05-31 10:22:08 -04:00
Godfrain Jacques 07de481b69
fix_: fix deleted communities query (#5232)
Removes the community_id IS NULL condition when fetching deleted
communities and cleanup. This fixes #5222
2024-05-27 10:09:15 -07:00
Igor Sirotin 19875ed9b5
fix: archive decryption fail (#5076)
* fix_: delay archive import if decryption failed

* chore_: minor cleanup

* chore_: test archive import of encrypted channel

* test(TestImportDecryptedArchiveMessages)_: first iteration

* feat_: GetHashRatchetMessagesCountForGroup

* chore_: log community description and shard info message ids

* test(TestImportDecryptedArchiveMessages)_: cleanup

* fix_: rebase issues

* chore_: remove temporal test

* test(TestImportDecryptedArchiveMessages)_: cleanup

* chore_: lint fix

* fix(TestImportDecryptedArchiveMessages)_: ForceMembersReevaluation
2024-05-27 13:49:09 +01:00
Jonathan Rainville cc505d3018
chore_: up re-evaluation interval to 8 hours to avoid Alchemy limit (#5228) (#5230) 2024-05-24 16:21:56 -04:00
Andrey Bocharnikov 49b6ef4aaf
fix(communities)_: Receiving mention notifications (@everyone) from spectated communities (#5180)
fix(communities)_: Receiving mention notifications (@everyone) from spectated communities #14798

Fix condition to check if user has joined community isCommunityJoinedBeforeClock

Fixes #14798
2024-05-24 00:13:48 +04:00
Mykhailo Prakhov d80db940d7
chore_: 'CheckAllChannelsPermissions' fn optimization (#5196) 2024-05-23 19:06:50 +02:00
Patryk Osmaczko cec5985066 chore(communities)_: separate changes application in `reevaluateMembers`
This avoids locking of the community until the end of reevaluation.

There is no special handling for community changes while reevaluation is
ongoing. If members are added or removed, the function will behave
correctly. If permissions are changed, they will be accommodated in the
next reevaluation.

fixes: status-im/status-desktop#14775
2024-05-23 09:52:38 +02:00
Godfrain Jacques 133ad0946b
fix_: persist left communities even for restored account (#5174)
This PR fixes #7858 by making sure left persisted communities are
restored during the backup restore flow
2024-05-21 14:01:14 -07:00
Jonathan Rainville af66f517f5
fix_: fill missing community tokens in controlled communities (#5154) (#5188)
Needed for https://github.com/status-im/status-desktop/issues/14679

On app start, fills controlled communities with missing deployed community tokens if there are.
2024-05-21 12:00:32 -04:00
Michal Iskierko 6f1b82966a feat_: light, no-network versions of permission checking functions
Light functions are based on the fact that permissions are met if the user is on community/channel member list.
If the user is not on the list, permissions will not be met and the client is responsible to use regular permissions-check functions.
For all permissions-check functions, corresponding light versions are added: CheckAllChannelsPermissionsLight,
CheckChannelPermissionsLight, CheckPermissionToJoinLight.

Issue #14220
2024-05-20 14:17:40 +02:00
Mykhailo Prakhov 77541725aa
chore(community)_: reevaluateMembers optimization (#5169)
* chore(community)_: reevaluateMembers optinizations
2024-05-17 18:15:39 +02:00
osmaczko 948e09af03
fix(communities)_: ensure `ScheduleMembersReevaluation` is non-blocking (#5176) 2024-05-17 15:06:33 +02:00
Michal Iskierko 574450289c feat_: Move community tokens transaction listening to status-go
Use EventWatcher to catch wallet events.
Handling all community tokens wallet events in communitytokens service (database and messenger operations).
Adding new signal to nim: CommunityTokenTransactionSignal, which is emitted everytime when the event is received.

Issue #4351
2024-05-16 16:18:15 +02:00
Godfrain Jacques 627e23ffa5
fix_: mitigate permission stuck in pending state (#5070)
This PR mitigates permission stuck in pending state upon making device a
control node. It fixes [#14023](status-im/status-desktop#14023)
2024-05-10 08:56:40 -07:00
Igor Sirotin 349ea8ad6e
feat_: force members reevaluation (#5139)
* chore_: enable adding community manager options from messenger config

* chore_: make `reevaluateMembers` private method

* fix(MessengerCommunitiesTokenPermissionsSuite)_: proper waiting

* feat_: `ForceMembersReevaluation` method

* test_: increate some test timeouts
2024-05-09 22:59:51 +03:00
Andrey Bocharnikov 6b5315b1fd fix(communities)_: delay starting torrent client until connection is established
Fixes # 14510
2024-05-09 11:00:53 +07:00
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