Merge pull request #95 from NicolasConstant/topic_post-unlisted

Topic post unlisted
This commit is contained in:
Nicolas Constant 2021-02-28 04:23:37 +01:00 committed by GitHub
commit fcdb73d391
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 73 additions and 24 deletions

View file

@ -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:
[...]

View file

@ -8,5 +8,7 @@
public bool ResolveMentionsInProfiles { get; set; }
public bool PublishReplies { get; set; }
public int MaxUsersCapacity { get; set; }
public string UnlistedTwitterAccounts { get; set; }
}
}

View file

@ -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))

View 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());
}
}
}

View file

@ -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>",

View file

@ -3,7 +3,7 @@ using System.Linq;
namespace BirdsiteLive.Domain.Tools
{
public class ModerationParser
public class PatternsParser
{
public static string[] Parse(string entry)
{

View file

@ -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>

View file

@ -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]
}

View file

@ -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",

View file

@ -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);