- Improve transformer implementations of authority invokers
- LoginAuthority now just returns the token string.
- Remove non-projectable GetId implementation from UserAuthority.
- Improve Rest Paginated implementations and add transformer support.
- Made GQL `User` derive from `UserName`.
- Remove `ILegacyApiTransformable` from user models.
TODO:
- Implement `NotImplementedException`s.
- Consider removing `IApiTransformable`.
- Consider wrapping LoginResult in its own authority-based DTO. Maybe a record struct also containing the expiry.
- Extract dubiously guarded `SwarmService` variables into `volatile` handler class with `Interlocked` writes.
- `SwarmService.Abort` can no longer be cancelled, but it short circuits more easily.
- Improved `SwarmRpcMapper`'s handling of `CancellationToken`s.
When running a distributed swarm server update, only the initiator server will download the update package directly from GitHub. It will then make the package available to the other nodes via a `SwarmController` hosted variant of the `FileTransferService` which they will use to retrieve their copies of the package.
Because of this, it's possible for the update package to be accessed via the regular `TransferController` duing this process. This is acceptable for three reasons:
- We use crytographically secure strings for the transfer service tickets
- If a malicious user steals one or more of the Swarm's update package tickets, the update will simply be aborted.
- An update package is not considered secure data what with this being OSS.
- No longer registers for restart unnecessarily
- Fixed infinite wait when committing update
- Fixed unregistering without a registration
- Abort updates if the controller health check fails