added unlisted publication capability
This commit is contained in:
parent
ff5b5e2b5a
commit
834c999d53
7 changed files with 61 additions and 21 deletions
|
@ -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)
|
||||
{
|
|
@ -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 a new issue