mirror of
				https://github.com/NicolasConstant/BirdsiteLive
				synced 2025-06-05 21:49:16 +02:00 
			
		
		
		
	Merge pull request #95 from NicolasConstant/topic_post-unlisted
Topic post unlisted
This commit is contained in:
		| @@ -46,6 +46,7 @@ If both whitelisting and blacklisting are set, only the whitelisting will be act | ||||
| * `Instance:Name` (default: BirdsiteLIVE) the name of the instance | ||||
| * `Instance:ResolveMentionsInProfiles` (default: true) to enable or disable mentions parsing in profile's description. Resolving it will consume more User's API calls since newly discovered account can also contain references to others accounts as well. On a big instance it is recommended to disable it. | ||||
| * `Instance:PublishReplies` (default: false) to enable or disable replies publishing. | ||||
| * `Instance:UnlistedTwitterAccounts` (default: null) to enable unlisted publication for selected twitter accounts, separated by `;` (please limit this to brands and other public profiles).  | ||||
|  | ||||
| # Docker Compose full example | ||||
|  | ||||
| @@ -76,6 +77,7 @@ services: | ||||
| +           - Instance:Name=MyTwitterRelay | ||||
| +           - Instance:ResolveMentionsInProfiles=false | ||||
| +           - Instance:PublishReplies=true | ||||
| +           - Instance:UnlistedTwitterAccounts=cocacola;twitter | ||||
|         networks: | ||||
|         [...] | ||||
|  | ||||
|   | ||||
| @@ -8,5 +8,7 @@ | ||||
|         public bool ResolveMentionsInProfiles { get; set; } | ||||
|         public bool PublishReplies { get; set; } | ||||
|         public int MaxUsersCapacity { get; set; } | ||||
|  | ||||
|         public string UnlistedTwitterAccounts { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -26,10 +26,10 @@ namespace BirdsiteLive.Domain.Repository | ||||
|         #region Ctor | ||||
|         public ModerationRepository(ModerationSettings settings) | ||||
|         { | ||||
|             var parsedFollowersWhiteListing = ModerationParser.Parse(settings.FollowersWhiteListing); | ||||
|             var parsedFollowersBlackListing = ModerationParser.Parse(settings.FollowersBlackListing); | ||||
|             var parsedTwitterAccountsWhiteListing = ModerationParser.Parse(settings.TwitterAccountsWhiteListing); | ||||
|             var parsedTwitterAccountsBlackListing = ModerationParser.Parse(settings.TwitterAccountsBlackListing); | ||||
|             var parsedFollowersWhiteListing = PatternsParser.Parse(settings.FollowersWhiteListing); | ||||
|             var parsedFollowersBlackListing = PatternsParser.Parse(settings.FollowersBlackListing); | ||||
|             var parsedTwitterAccountsWhiteListing = PatternsParser.Parse(settings.TwitterAccountsWhiteListing); | ||||
|             var parsedTwitterAccountsBlackListing = PatternsParser.Parse(settings.TwitterAccountsBlackListing); | ||||
|  | ||||
|             _followersWhiteListing = parsedFollowersWhiteListing | ||||
|                 .Select(x => ModerationRegexParser.Parse(ModerationEntityTypeEnum.Follower, x)) | ||||
|   | ||||
							
								
								
									
										30
									
								
								src/BirdsiteLive.Domain/Repository/PublicationRepository.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/BirdsiteLive.Domain/Repository/PublicationRepository.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| using System.Linq; | ||||
| using BirdsiteLive.Common.Settings; | ||||
| using BirdsiteLive.Domain.Tools; | ||||
|  | ||||
| namespace BirdsiteLive.Domain.Repository | ||||
| { | ||||
|     public interface IPublicationRepository | ||||
|     { | ||||
|         bool IsUnlisted(string twitterAcct); | ||||
|     } | ||||
|  | ||||
|     public class PublicationRepository : IPublicationRepository | ||||
|     { | ||||
|         private readonly string[] _unlistedAccounts; | ||||
|  | ||||
|         #region Ctor | ||||
|         public PublicationRepository(InstanceSettings settings) | ||||
|         { | ||||
|             _unlistedAccounts = PatternsParser.Parse(settings.UnlistedTwitterAccounts); | ||||
|         } | ||||
|         #endregion | ||||
|  | ||||
|         public bool IsUnlisted(string twitterAcct) | ||||
|         { | ||||
|             if (_unlistedAccounts == null || !_unlistedAccounts.Any()) return false; | ||||
|  | ||||
|             return _unlistedAccounts.Contains(twitterAcct.ToLowerInvariant()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -7,6 +7,7 @@ using BirdsiteLive.ActivityPub; | ||||
| using BirdsiteLive.ActivityPub.Converters; | ||||
| using BirdsiteLive.ActivityPub.Models; | ||||
| using BirdsiteLive.Common.Settings; | ||||
| using BirdsiteLive.Domain.Repository; | ||||
| using BirdsiteLive.Domain.Statistics; | ||||
| using BirdsiteLive.Domain.Tools; | ||||
| using BirdsiteLive.Twitter.Models; | ||||
| @@ -25,13 +26,15 @@ namespace BirdsiteLive.Domain | ||||
|         private readonly InstanceSettings _instanceSettings; | ||||
|         private readonly IStatusExtractor _statusExtractor; | ||||
|         private readonly IExtractionStatisticsHandler _statisticsHandler; | ||||
|          | ||||
|         private readonly IPublicationRepository _publicationRepository; | ||||
|  | ||||
|         #region Ctor | ||||
|         public StatusService(InstanceSettings instanceSettings, IStatusExtractor statusExtractor, IExtractionStatisticsHandler statisticsHandler) | ||||
|         public StatusService(InstanceSettings instanceSettings, IStatusExtractor statusExtractor, IExtractionStatisticsHandler statisticsHandler, IPublicationRepository publicationRepository) | ||||
|         { | ||||
|             _instanceSettings = instanceSettings; | ||||
|             _statusExtractor = statusExtractor; | ||||
|             _statisticsHandler = statisticsHandler; | ||||
|             _publicationRepository = publicationRepository; | ||||
|         } | ||||
|         #endregion | ||||
|  | ||||
| @@ -42,6 +45,11 @@ namespace BirdsiteLive.Domain | ||||
|  | ||||
|             var to = $"{actorUrl}/followers"; | ||||
|  | ||||
|             var isUnlisted = _publicationRepository.IsUnlisted(username); | ||||
|             var cc = new string[0]; | ||||
|             if (isUnlisted) | ||||
|                 cc = new[] {"https://www.w3.org/ns/activitystreams#Public"}; | ||||
|              | ||||
|             var extractedTags = _statusExtractor.Extract(tweet.MessageContent); | ||||
|             _statisticsHandler.ExtractedStatus(extractedTags.tags.Count(x => x.type == "Mention")); | ||||
|  | ||||
| @@ -71,8 +79,7 @@ namespace BirdsiteLive.Domain | ||||
|                 inReplyTo = inReplyTo, | ||||
|  | ||||
|                 to = new[] { to }, | ||||
|                 //cc = new[] { "https://www.w3.org/ns/activitystreams#Public" }, | ||||
|                 cc = new string[0], | ||||
|                 cc = cc, | ||||
|  | ||||
|                 sensitive = false, | ||||
|                 content = $"<p>{content}</p>", | ||||
|   | ||||
| @@ -3,7 +3,7 @@ using System.Linq; | ||||
| 
 | ||||
| namespace BirdsiteLive.Domain.Tools | ||||
| { | ||||
|     public class ModerationParser | ||||
|     public class PatternsParser | ||||
|     { | ||||
|         public static string[] Parse(string entry) | ||||
|         { | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <TargetFramework>netcoreapp3.1</TargetFramework> | ||||
|     <UserSecretsId>d21486de-a812-47eb-a419-05682bb68856</UserSecretsId> | ||||
|     <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> | ||||
|     <Version>0.15.0</Version> | ||||
|     <Version>0.16.0</Version> | ||||
|   </PropertyGroup> | ||||
|  | ||||
|   <ItemGroup> | ||||
|   | ||||
| @@ -90,10 +90,17 @@ namespace BirdsiteLive.Controllers | ||||
|                     published = nowString, | ||||
|                     url = noteUrl, | ||||
|                     attributedTo = actor, | ||||
|  | ||||
|                     // Unlisted | ||||
|                     to = new[] { to }, | ||||
|                     //cc = new [] { "https://www.w3.org/ns/activitystreams#Public" }, | ||||
|                     cc = new [] { "https://www.w3.org/ns/activitystreams#Public" }, | ||||
|  | ||||
|                     //// Public | ||||
|                     //to = new[] { "https://www.w3.org/ns/activitystreams#Public" }, | ||||
|                     //cc = new[] { to }, | ||||
|  | ||||
|                     sensitive = false, | ||||
|                     content = "<p>Woooot</p>", | ||||
|                     content = "<p>TEST PUBLIC</p>", | ||||
|                     attachment = new Attachment[0], | ||||
|                     tag = new Tag[0] | ||||
|                 } | ||||
|   | ||||
| @@ -19,8 +19,9 @@ | ||||
|     "Domain": "domain.name", | ||||
|     "AdminEmail": "me@domain.name", | ||||
|     "ResolveMentionsInProfiles": true, | ||||
|     "PublishReplies": false,  | ||||
|     "MaxUsersCapacity": 800  | ||||
|     "PublishReplies": false, | ||||
|     "MaxUsersCapacity": 800, | ||||
|     "UnlistedTwitterAccounts":  null  | ||||
|   }, | ||||
|   "Db": { | ||||
|     "Type": "postgres", | ||||
|   | ||||
| @@ -5,7 +5,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
| namespace BirdsiteLive.Domain.Tests.Tools | ||||
| { | ||||
|     [TestClass] | ||||
|     public class ModerationParserTests | ||||
|     public class PatternsParserTests | ||||
|     { | ||||
|         [TestMethod] | ||||
|         public void Parse_Simple_Test() | ||||
| @@ -14,7 +14,7 @@ namespace BirdsiteLive.Domain.Tests.Tools | ||||
|             var entry = "test"; | ||||
|             #endregion | ||||
| 
 | ||||
|             var result = ModerationParser.Parse(entry); | ||||
|             var result = PatternsParser.Parse(entry); | ||||
| 
 | ||||
|             #region Validations | ||||
|             Assert.AreEqual(1, result.Length); | ||||
| @@ -29,7 +29,7 @@ namespace BirdsiteLive.Domain.Tests.Tools | ||||
|             string entry = null; | ||||
|             #endregion | ||||
| 
 | ||||
|             var result = ModerationParser.Parse(entry); | ||||
|             var result = PatternsParser.Parse(entry); | ||||
| 
 | ||||
|             #region Validations | ||||
|             Assert.AreEqual(0, result.Length); | ||||
| @@ -43,7 +43,7 @@ namespace BirdsiteLive.Domain.Tests.Tools | ||||
|             var entry = "  "; | ||||
|             #endregion | ||||
| 
 | ||||
|             var result = ModerationParser.Parse(entry); | ||||
|             var result = PatternsParser.Parse(entry); | ||||
| 
 | ||||
|             #region Validations | ||||
|             Assert.AreEqual(0, result.Length); | ||||
| @@ -57,7 +57,7 @@ namespace BirdsiteLive.Domain.Tests.Tools | ||||
|             var entry = "test|test2"; | ||||
|             #endregion | ||||
| 
 | ||||
|             var result = ModerationParser.Parse(entry); | ||||
|             var result = PatternsParser.Parse(entry); | ||||
| 
 | ||||
|             #region Validations | ||||
|             Assert.AreEqual(2, result.Length); | ||||
| @@ -73,7 +73,7 @@ namespace BirdsiteLive.Domain.Tests.Tools | ||||
|             var entry = "test;test2"; | ||||
|             #endregion | ||||
| 
 | ||||
|             var result = ModerationParser.Parse(entry); | ||||
|             var result = PatternsParser.Parse(entry); | ||||
| 
 | ||||
|             #region Validations | ||||
|             Assert.AreEqual(2, result.Length); | ||||
| @@ -89,7 +89,7 @@ namespace BirdsiteLive.Domain.Tests.Tools | ||||
|             var entry = "test,test2"; | ||||
|             #endregion | ||||
| 
 | ||||
|             var result = ModerationParser.Parse(entry); | ||||
|             var result = PatternsParser.Parse(entry); | ||||
| 
 | ||||
|             #region Validations | ||||
|             Assert.AreEqual(2, result.Length); | ||||
| @@ -105,7 +105,7 @@ namespace BirdsiteLive.Domain.Tests.Tools | ||||
|             var entry = "test;test2;"; | ||||
|             #endregion | ||||
| 
 | ||||
|             var result = ModerationParser.Parse(entry); | ||||
|             var result = PatternsParser.Parse(entry); | ||||
| 
 | ||||
|             #region Validations | ||||
|             Assert.AreEqual(2, result.Length); | ||||
| @@ -121,7 +121,7 @@ namespace BirdsiteLive.Domain.Tests.Tools | ||||
|             var entry = "test; test2"; | ||||
|             #endregion | ||||
| 
 | ||||
|             var result = ModerationParser.Parse(entry); | ||||
|             var result = PatternsParser.Parse(entry); | ||||
| 
 | ||||
|             #region Validations | ||||
|             Assert.AreEqual(2, result.Length); | ||||
| @@ -137,7 +137,7 @@ namespace BirdsiteLive.Domain.Tests.Tools | ||||
|             var entry = "test; test2; "; | ||||
|             #endregion | ||||
| 
 | ||||
|             var result = ModerationParser.Parse(entry); | ||||
|             var result = PatternsParser.Parse(entry); | ||||
| 
 | ||||
|             #region Validations | ||||
|             Assert.AreEqual(2, result.Length); | ||||
		Reference in New Issue
	
	Block a user