diff --git a/VARIABLES.md b/VARIABLES.md index 42276d4..e17b3a5 100644 --- a/VARIABLES.md +++ b/VARIABLES.md @@ -47,6 +47,7 @@ If both whitelisting and blacklisting are set, only the whitelisting will be act * `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). +* `Instance:SensitiveTwitterAccounts` (default: null) mark all media from given accounts as sensitive by default, separated by `;`. # Docker Compose full example @@ -78,6 +79,7 @@ services: + - Instance:ResolveMentionsInProfiles=false + - Instance:PublishReplies=true + - Instance:UnlistedTwitterAccounts=cocacola;twitter ++ - Instance:SensitiveTwitterAccounts=archillect networks: [...] diff --git a/src/BirdsiteLive.Common/Settings/InstanceSettings.cs b/src/BirdsiteLive.Common/Settings/InstanceSettings.cs index 678c45d..9353398 100644 --- a/src/BirdsiteLive.Common/Settings/InstanceSettings.cs +++ b/src/BirdsiteLive.Common/Settings/InstanceSettings.cs @@ -10,5 +10,6 @@ public int MaxUsersCapacity { get; set; } public string UnlistedTwitterAccounts { get; set; } + public string SensitiveTwitterAccounts { get; set; } } -} \ No newline at end of file +} diff --git a/src/BirdsiteLive.Domain/Repository/PublicationRepository.cs b/src/BirdsiteLive.Domain/Repository/PublicationRepository.cs index 31e94ef..042aeb2 100644 --- a/src/BirdsiteLive.Domain/Repository/PublicationRepository.cs +++ b/src/BirdsiteLive.Domain/Repository/PublicationRepository.cs @@ -7,16 +7,19 @@ namespace BirdsiteLive.Domain.Repository public interface IPublicationRepository { bool IsUnlisted(string twitterAcct); + bool IsSensitive(string twitterAcct); } public class PublicationRepository : IPublicationRepository { private readonly string[] _unlistedAccounts; + private readonly string[] _sensitiveAccounts; #region Ctor public PublicationRepository(InstanceSettings settings) { _unlistedAccounts = PatternsParser.Parse(settings.UnlistedTwitterAccounts); + _sensitiveAccounts = PatternsParser.Parse(settings.SensitiveTwitterAccounts); } #endregion @@ -26,5 +29,12 @@ namespace BirdsiteLive.Domain.Repository return _unlistedAccounts.Contains(twitterAcct.ToLowerInvariant()); } + + public bool IsSensitive(string twitterAcct) + { + if (_sensitiveAccounts == null || !_sensitiveAccounts.Any()) return false; + + return _sensitiveAccounts.Contains(twitterAcct.ToLowerInvariant()); + } } -} \ No newline at end of file +} diff --git a/src/BirdsiteLive.Domain/StatusService.cs b/src/BirdsiteLive.Domain/StatusService.cs index e901db8..04cee27 100644 --- a/src/BirdsiteLive.Domain/StatusService.cs +++ b/src/BirdsiteLive.Domain/StatusService.cs @@ -50,6 +50,11 @@ namespace BirdsiteLive.Domain if (isUnlisted) cc = new[] {"https://www.w3.org/ns/activitystreams#Public"}; + string summary = null; + var sensitive = _publicationRepository.IsSensitive(username); + if (sensitive) + summary = "Potential Content Warning"; + var extractedTags = _statusExtractor.Extract(tweet.MessageContent); _statisticsHandler.ExtractedStatus(extractedTags.tags.Count(x => x.type == "Mention")); @@ -81,7 +86,8 @@ namespace BirdsiteLive.Domain to = new[] { to }, cc = cc, - sensitive = false, + sensitive = sensitive, + summary = summary, content = $"

{content}

", attachment = Convert(tweet.Media), tag = extractedTags.tags @@ -104,4 +110,4 @@ namespace BirdsiteLive.Domain }).ToArray(); } } -} \ No newline at end of file +} diff --git a/src/BirdsiteLive/appsettings.json b/src/BirdsiteLive/appsettings.json index 8b12018..d37ee5e 100644 --- a/src/BirdsiteLive/appsettings.json +++ b/src/BirdsiteLive/appsettings.json @@ -21,7 +21,8 @@ "ResolveMentionsInProfiles": true, "PublishReplies": false, "MaxUsersCapacity": 1500, - "UnlistedTwitterAccounts": null + "UnlistedTwitterAccounts": null, + "SensitiveTwitterAccounts": null }, "Db": { "Type": "postgres",