Skip to content

Commit

Permalink
Merge pull request #95 from NicolasConstant/topic_post-unlisted
Browse files Browse the repository at this point in the history
Topic post unlisted
  • Loading branch information
NicolasConstant authored Feb 28, 2021
2 parents 467135e + 699f422 commit fcdb73d
Show file tree
Hide file tree
Showing 10 changed files with 73 additions and 24 deletions.
2 changes: 2 additions & 0 deletions VARIABLES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -76,6 +77,7 @@ services:
+ - Instance:Name=MyTwitterRelay
+ - Instance:ResolveMentionsInProfiles=false
+ - Instance:PublishReplies=true
+ - Instance:UnlistedTwitterAccounts=cocacola;twitter
networks:
[...]

Expand Down
2 changes: 2 additions & 0 deletions src/BirdsiteLive.Common/Settings/InstanceSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@ public class InstanceSettings
public bool ResolveMentionsInProfiles { get; set; }
public bool PublishReplies { get; set; }
public int MaxUsersCapacity { get; set; }

public string UnlistedTwitterAccounts { get; set; }
}
}
8 changes: 4 additions & 4 deletions src/BirdsiteLive.Domain/Repository/ModerationRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ public class ModerationRepository : IModerationRepository
#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))
Expand Down
30 changes: 30 additions & 0 deletions src/BirdsiteLive.Domain/Repository/PublicationRepository.cs
Original file line number Diff line number Diff line change
@@ -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());
}
}
}
15 changes: 11 additions & 4 deletions src/BirdsiteLive.Domain/StatusService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
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;
Expand All @@ -25,13 +26,15 @@ public class StatusService : IStatusService
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

Expand All @@ -42,6 +45,11 @@ public Note GetStatus(string username, ExtractedTweet tweet)

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

Expand Down Expand Up @@ -71,8 +79,7 @@ public Note GetStatus(string username, ExtractedTweet tweet)
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>",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace BirdsiteLive.Domain.Tools
{
public class ModerationParser
public class PatternsParser
{
public static string[] Parse(string entry)
{
Expand Down
2 changes: 1 addition & 1 deletion src/BirdsiteLive/BirdsiteLive.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
11 changes: 9 additions & 2 deletions src/BirdsiteLive/Controllers/DebugingController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,10 +90,17 @@ public async Task<IActionResult> PostNote()
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]
}
Expand Down
5 changes: 3 additions & 2 deletions src/BirdsiteLive/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@
"Domain": "domain.name",
"AdminEmail": "[email protected]",
"ResolveMentionsInProfiles": true,
"PublishReplies": false,
"MaxUsersCapacity": 800
"PublishReplies": false,
"MaxUsersCapacity": 800,
"UnlistedTwitterAccounts": null
},
"Db": {
"Type": "postgres",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace BirdsiteLive.Domain.Tests.Tools
{
[TestClass]
public class ModerationParserTests
public class PatternsParserTests
{
[TestMethod]
public void Parse_Simple_Test()
Expand All @@ -14,7 +14,7 @@ public void Parse_Simple_Test()
var entry = "test";
#endregion

var result = ModerationParser.Parse(entry);
var result = PatternsParser.Parse(entry);

#region Validations
Assert.AreEqual(1, result.Length);
Expand All @@ -29,7 +29,7 @@ public void Parse_Null_Test()
string entry = null;
#endregion

var result = ModerationParser.Parse(entry);
var result = PatternsParser.Parse(entry);

#region Validations
Assert.AreEqual(0, result.Length);
Expand All @@ -43,7 +43,7 @@ public void Parse_WhiteSpace_Test()
var entry = " ";
#endregion

var result = ModerationParser.Parse(entry);
var result = PatternsParser.Parse(entry);

#region Validations
Assert.AreEqual(0, result.Length);
Expand All @@ -57,7 +57,7 @@ public void Parse_PipeSeparator_Test()
var entry = "test|test2";
#endregion

var result = ModerationParser.Parse(entry);
var result = PatternsParser.Parse(entry);

#region Validations
Assert.AreEqual(2, result.Length);
Expand All @@ -73,7 +73,7 @@ public void Parse_SemicolonSeparator_Test()
var entry = "test;test2";
#endregion

var result = ModerationParser.Parse(entry);
var result = PatternsParser.Parse(entry);

#region Validations
Assert.AreEqual(2, result.Length);
Expand All @@ -89,7 +89,7 @@ public void Parse_CommaSeparator_Test()
var entry = "test,test2";
#endregion

var result = ModerationParser.Parse(entry);
var result = PatternsParser.Parse(entry);

#region Validations
Assert.AreEqual(2, result.Length);
Expand All @@ -105,7 +105,7 @@ public void Parse_SemicolonSeparator_EmptyEntry_Test()
var entry = "test;test2;";
#endregion

var result = ModerationParser.Parse(entry);
var result = PatternsParser.Parse(entry);

#region Validations
Assert.AreEqual(2, result.Length);
Expand All @@ -121,7 +121,7 @@ public void Parse_SemicolonSeparator_WhiteSpace_Test()
var entry = "test; test2";
#endregion

var result = ModerationParser.Parse(entry);
var result = PatternsParser.Parse(entry);

#region Validations
Assert.AreEqual(2, result.Length);
Expand All @@ -137,7 +137,7 @@ public void Parse_SemicolonSeparator_EmptyEntry_WhiteSpace_Test()
var entry = "test; test2; ";
#endregion

var result = ModerationParser.Parse(entry);
var result = PatternsParser.Parse(entry);

#region Validations
Assert.AreEqual(2, result.Length);
Expand Down

0 comments on commit fcdb73d

Please sign in to comment.