├── .github ├── FUNDING.yml └── workflows │ └── dotnet-core.yml ├── src ├── BirdsiteLive │ ├── Views │ │ ├── _ViewStart.cshtml │ │ ├── _ViewImports.cshtml │ │ ├── Home │ │ │ ├── Privacy.cshtml │ │ │ └── Index.cshtml │ │ ├── Shared │ │ │ ├── _ValidationScriptsPartial.cshtml │ │ │ ├── Error.cshtml │ │ │ ├── Components │ │ │ │ └── NodeInfo │ │ │ │ │ └── Default.cshtml │ │ │ └── _Layout.cshtml │ │ ├── Users │ │ │ ├── UserNotFound.cshtml │ │ │ ├── ApiSaturated.cshtml │ │ │ └── Tweet.cshtml │ │ ├── About │ │ │ ├── Blacklisting.cshtml │ │ │ ├── Whitelisting.cshtml │ │ │ └── Index.cshtml │ │ ├── Debuging │ │ │ └── Index.cshtml │ │ ├── Statistics │ │ │ └── Index.cshtml │ │ └── Migration │ │ │ ├── Delete.cshtml │ │ │ └── Index.cshtml │ ├── wwwroot │ │ ├── favicon.ico │ │ ├── js │ │ │ └── site.js │ │ ├── lib │ │ │ ├── jquery-validation-unobtrusive │ │ │ │ └── LICENSE.txt │ │ │ ├── jquery-validation │ │ │ │ └── LICENSE.md │ │ │ ├── bootstrap │ │ │ │ └── LICENSE │ │ │ └── jquery │ │ │ │ └── LICENSE.txt │ │ └── css │ │ │ ├── pattern.css │ │ │ ├── site.css │ │ │ └── birdsite.css │ ├── Models │ │ ├── WellKnownModels │ │ │ ├── Users.cs │ │ │ ├── Metadata.cs │ │ │ ├── WellKnownNodeInfo.cs │ │ │ ├── Link.cs │ │ │ ├── Usage.cs │ │ │ ├── Software.cs │ │ │ ├── Services.cs │ │ │ ├── WebFingerLink.cs │ │ │ ├── SoftwareV21.cs │ │ │ ├── WebFingerResult.cs │ │ │ ├── NodeInfoV21.cs │ │ │ └── NodeInfoV20.cs │ │ ├── ErrorViewModel.cs │ │ ├── StatisticsModels │ │ │ └── Statistics.cs │ │ ├── DisplayTwitterUser.cs │ │ └── MigrationData.cs │ ├── Tools │ │ ├── InitStateSynchronization.cs │ │ └── HeaderHandler.cs │ ├── Properties │ │ └── launchSettings.json │ ├── Program.cs │ ├── Controllers │ │ ├── HomeController.cs │ │ ├── StatisticsController.cs │ │ ├── AboutController.cs │ │ └── InboxController.cs │ ├── appsettings.json │ ├── BirdsiteLive.csproj │ ├── Services │ │ ├── TweetCleanUpService.cs │ │ ├── CachedStatisticsService.cs │ │ └── FederationService.cs │ └── Component │ │ └── NodeInfoViewComponent.cs ├── BirdsiteLive.ActivityPub │ ├── Models │ │ ├── ActivityCreate.cs │ │ ├── EndPoints.cs │ │ ├── Attachment.cs │ │ ├── Image.cs │ │ ├── PublicKey.cs │ │ ├── ActivityUndo.cs │ │ ├── UserAttachment.cs │ │ ├── ActivityAccept.cs │ │ ├── ActivityFollow.cs │ │ ├── Tombstone.cs │ │ ├── ActivityUndoFollow.cs │ │ ├── ActivityAcceptFollow.cs │ │ ├── ActivityRejectFollow.cs │ │ ├── Tag.cs │ │ ├── ActivityAcceptUndoFollow.cs │ │ ├── ActivityDelete.cs │ │ ├── ActivityCreateNote.cs │ │ ├── Activity.cs │ │ ├── Followers.cs │ │ ├── Note.cs │ │ └── Actor.cs │ ├── BirdsiteLive.ActivityPub.csproj │ ├── Converters │ │ ├── UrlFactory.cs │ │ └── ContextArrayConverter.cs │ └── ApDeserializer.cs ├── BirdsiteLive.Common │ ├── Structs │ │ └── DbTypes.cs │ ├── BirdsiteLive.Common.csproj │ ├── Settings │ │ ├── LogsSettings.cs │ │ ├── TwitterSettings.cs │ │ ├── DbSettings.cs │ │ ├── ModerationSettings.cs │ │ └── InstanceSettings.cs │ ├── Regexes │ │ ├── HeaderRegexes.cs │ │ ├── HashtagRegexes.cs │ │ ├── UserRegexes.cs │ │ └── UrlRegexes.cs │ └── Extensions │ │ └── EnumerableExt.cs ├── BirdsiteLive.Domain │ ├── Exceptions │ │ └── FollowerIsGoneException.cs │ ├── Enum │ │ └── MigrationTypeEnum.cs │ ├── Tools │ │ ├── SigValidationResultExtractor.cs │ │ ├── PatternsParser.cs │ │ └── ModerationRegexParser.cs │ ├── BirdsiteLive.Domain.csproj │ ├── Factories │ │ └── MagicKeyFactory.cs │ ├── Repository │ │ └── PublicationRepository.cs │ ├── BusinessUseCases │ │ ├── ProcessUnfollowUser.cs │ │ ├── ProcessDeleteUser.cs │ │ └── ProcessFollowUser.cs │ └── CryptoService.cs ├── BirdsiteLive.Twitter │ ├── Exceptions │ │ ├── UserNotFoundException.cs │ │ ├── RateLimitExceededException.cs │ │ └── UserHasBeenSuspendedException.cs │ ├── Models │ │ ├── ExtractedMedia.cs │ │ ├── TwitterUser.cs │ │ ├── ExtractedTweet.cs │ │ └── ApiStatistics.cs │ ├── BirdsiteLive.Twitter.csproj │ ├── Tools │ │ └── TwitterAuthenticationInitializer.cs │ └── CachedTwitterService.cs ├── BirdsiteLive.Pipeline │ ├── Models │ │ ├── TweetToDelete.cs │ │ └── UserWithDataToSync.cs │ ├── Contracts │ │ ├── TweetsCleanUp │ │ │ ├── IDeleteTweetsProcessor.cs │ │ │ ├── ISaveDeletedTweetStatusProcessor.cs │ │ │ └── IRetrieveTweetsToDeleteProcessor.cs │ │ └── Federation │ │ │ ├── ISaveProgressionProcessor.cs │ │ │ ├── ISendTweetsToFollowersProcessor.cs │ │ │ ├── IRetrieveTweetsProcessor.cs │ │ │ ├── IRefreshTwitterUserStatusProcessor.cs │ │ │ ├── IRetrieveTwitterUsersProcessor.cs │ │ │ └── IRetrieveFollowersProcessor.cs │ ├── Processors │ │ ├── TweetsCleanUp │ │ │ ├── Base │ │ │ │ └── RetentionBase.cs │ │ │ ├── SaveDeletedTweetStatusProcessor.cs │ │ │ ├── DeleteTweetsProcessor.cs │ │ │ └── RetrieveTweetsToDeleteProcessor.cs │ │ └── Federation │ │ │ ├── SubTasks │ │ │ └── SendTweetsTaskBase.cs │ │ │ ├── RetrieveFollowersProcessor.cs │ │ │ └── SaveProgressionProcessor.cs │ ├── BirdsiteLive.Pipeline.csproj │ └── Tools │ │ └── MaxUsersNumberProvider.cs ├── BSLManager │ ├── Tools │ │ ├── BasicLogger.cs │ │ └── ConsoleGui.cs │ ├── BSLManager.csproj │ ├── Program.cs │ └── Domain │ │ └── FollowersListState.cs ├── DataAccessLayers │ ├── BirdsiteLive.DAL │ │ ├── BirdsiteLive.DAL.csproj │ │ ├── Contracts │ │ │ ├── ICachedTweetsDal.cs │ │ │ ├── IDbInitializerDal.cs │ │ │ ├── ISyncTweetsPostgresDal.cs │ │ │ ├── IFollowersDal.cs │ │ │ └── ITwitterUserDal.cs │ │ ├── Models │ │ │ ├── SyncTweet.cs │ │ │ ├── Follower.cs │ │ │ ├── SyncTwitterUser.cs │ │ │ └── CachedTweet.cs │ │ ├── Tools │ │ │ └── RandomGenerator.cs │ │ └── DatabaseInitializer.cs │ └── BirdsiteLive.DAL.Postgres │ │ ├── BirdsiteLive.DAL.Postgres.csproj │ │ ├── Settings │ │ └── PostgresSettings.cs │ │ ├── DataAccessLayers │ │ └── Base │ │ │ └── PostgresBase.cs │ │ └── Tools │ │ └── PostgresTools.cs ├── Tests │ ├── BirdsiteLive.Cryptography.Tests │ │ ├── RsaGeneratorTests.cs │ │ ├── MagicKeyTests.cs │ │ ├── BirdsiteLive.Cryptography.Tests.csproj │ │ └── RsaKeysTests.cs │ ├── BSLManager.Tests │ │ └── BSLManager.Tests.csproj │ ├── BirdsiteLive.Common.Tests │ │ ├── BirdsiteLive.Common.Tests.csproj │ │ └── Regexes │ │ │ └── UrlRegexesTests.cs │ ├── BirdsiteLive.ActivityPub.Tests │ │ ├── BirdsiteLive.ActivityPub.Tests.csproj │ │ ├── ActivityTests.cs │ │ └── ActorTests.cs │ ├── BirdsiteLive.DAL.Postgres.Tests │ │ ├── BirdsiteLive.DAL.Postgres.Tests.csproj │ │ └── DataAccessLayers │ │ │ ├── Base │ │ │ └── PostgresTestingBase.cs │ │ │ ├── DbInitializerPostgresDalTests.cs │ │ │ └── CachedTweetsPostgresDalTests.cs │ ├── BirdsiteLive.DAL.Tests │ │ └── BirdsiteLive.DAL.Tests.csproj │ ├── BirdsiteLive.Moderation.Tests │ │ └── BirdsiteLive.Moderation.Tests.csproj │ ├── BirdsiteLive.Domain.Tests │ │ ├── BirdsiteLive.Domain.Tests.csproj │ │ ├── TheFedInfoServiceTests.cs │ │ ├── StatusServiceTests.cs │ │ └── Tools │ │ │ └── ModerationRegexParserTests.cs │ └── BirdsiteLive.Pipeline.Tests │ │ ├── BirdsiteLive.Pipeline.Tests.csproj │ │ ├── TweetCleanUpPipelineTests.cs │ │ ├── StatusPublicationPipelineTests.cs │ │ ├── Processors │ │ ├── Federation │ │ │ └── RetrieveFollowersProcessorTests.cs │ │ └── TweetsCleanUp │ │ │ └── SaveDeletedTweetStatusProcessorTests.cs │ │ └── Tools │ │ └── MaxUsersNumberProviderTests.cs ├── BirdsiteLive.Cryptography │ ├── BirdsiteLive.Cryptography.csproj │ └── ASN1.cs └── BirdsiteLive.Moderation │ ├── BirdsiteLive.Moderation.csproj │ ├── Actions │ ├── RemoveFollowerAction.cs │ ├── RejectFollowingAction.cs │ ├── RejectAllFollowingsAction.cs │ └── RemoveTwitterAccountAction.cs │ ├── Processors │ ├── TwitterAccountModerationProcessor.cs │ └── FollowerModerationProcessor.cs │ └── ModerationPipeline.cs ├── .dockerignore ├── Dockerfile ├── docker-compose.yml ├── README.md └── BSLManager.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | patreon: nicolasconstant 2 | -------------------------------------------------------------------------------- /src/BirdsiteLive/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /src/BirdsiteLive/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasConstant/BirdsiteLive/HEAD/src/BirdsiteLive/wwwroot/favicon.ico -------------------------------------------------------------------------------- /src/BirdsiteLive/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using BirdsiteLive 2 | @using BirdsiteLive.Models 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | -------------------------------------------------------------------------------- /src/BirdsiteLive.ActivityPub/Models/ActivityCreate.cs: -------------------------------------------------------------------------------- 1 | namespace BirdsiteLive.ActivityPub 2 | { 3 | public class ActivityCreate 4 | { 5 | 6 | } 7 | } -------------------------------------------------------------------------------- /src/BirdsiteLive.ActivityPub/Models/EndPoints.cs: -------------------------------------------------------------------------------- 1 | namespace BirdsiteLive.ActivityPub 2 | { 3 | public class EndPoints 4 | { 5 | public string sharedInbox { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/BirdsiteLive.Common/Structs/DbTypes.cs: -------------------------------------------------------------------------------- 1 | namespace BirdsiteLive.Common.Structs 2 | { 3 | public struct DbTypes 4 | { 5 | public static string Postgres = "postgres"; 6 | } 7 | } -------------------------------------------------------------------------------- /src/BirdsiteLive/Models/WellKnownModels/Users.cs: -------------------------------------------------------------------------------- 1 | namespace BirdsiteLive.Models.WellKnownModels 2 | { 3 | public class Users 4 | { 5 | public int total { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/BirdsiteLive.Domain/Exceptions/FollowerIsGoneException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace BirdsiteLive.Domain 4 | { 5 | public class FollowerIsGoneException : Exception 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/BirdsiteLive/Views/Home/Privacy.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Privacy Policy"; 3 | } 4 |
Use this page to detail your site's privacy policy.
7 | -------------------------------------------------------------------------------- /src/BirdsiteLive.Twitter/Exceptions/UserNotFoundException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace BirdsiteLive.Twitter 4 | { 5 | public class UserNotFoundException : Exception 6 | { 7 | 8 | } 9 | } -------------------------------------------------------------------------------- /src/BirdsiteLive/Models/WellKnownModels/Metadata.cs: -------------------------------------------------------------------------------- 1 | namespace BirdsiteLive.Models.WellKnownModels 2 | { 3 | public class Metadata 4 | { 5 | public string email { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/BirdsiteLive.Common/BirdsiteLive.Common.csproj: -------------------------------------------------------------------------------- 1 |
9 |
10 | The API is saturated.
11 | Please consider using another instance.
12 |
7 | 8 |Embedded tweet Tweet
This node is blacklisting some instances and/or Fediverse users.
This node is blacklisting some twitter users.
This node is not using blacklisting.
TODO
*@ 27 |
This node is whitelisting some instances and/or Fediverse users.
This node is whitelisting some twitter users.
This node is not using whitelisting.
TODO
*@ 27 |
12 | Request ID: @Model.RequestId
13 |
18 | Swapping to Development environment will display more detailed information about the error that occurred. 19 |
20 |21 | The Development environment shouldn't be enabled for deployed applications. 22 | It can result in displaying sensitive information from exceptions to end users. 23 | For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development 24 | and restarting the app. 25 |
26 | -------------------------------------------------------------------------------- /src/Tests/BirdsiteLive.Moderation.Tests/BirdsiteLive.Moderation.Tests.csproj: -------------------------------------------------------------------------------- 1 |
10 |
11 | This node usage is at @Model.Saturation%
12 |
13 |
BirdsiteLIVE rely on the Twitter API to provide high quality content. This API has limitations and therefore limits node capacity.
19 | 20 |
23 | When the saturation rate goes above 100% the node will no longer update all accounts every 15 minutes and instead will reduce the pooling rate to stay under the API limits, the more saturated a node is the less efficient it will be.
24 | The software doesn't scale, and it's by design.
25 |
If you're not on your own node, be reasonable and don't follow too much accounts. And if you can, host your own node. BirdsiteLIVE doesn't require a lot of resources to work and therefore is really cheap to self-host.
30 |
9 |
10 | BirdsiteLIVE is a Twitter to ActivityPub bridge.
11 | Find a Twitter account below:
12 |
You'll need access to the Twitter account to provide proof of ownership.
28 | 29 |
32 | Deletion will remove all followers, delete the account and will be blacklisted so that it can't be recreated.
33 |
Please copy and post this string in a public Tweet (the string must be untampered, but you can write anything you want before or after it):
39 | 40 | 41 |You'll need a Fediverse account and access to the Twitter account to provide proof of ownership.
28 | 29 |
32 | Migration will notify followers of the migration of the mirror account to your fediverse account and will be disabled after that.
33 |
Please copy and post this string in a public Tweet (the string must be untampered, but you can write anything you want before or after it):
39 | 40 | 41 |