diff --git a/src/BirdsiteLive.ActivityPub/Models/Actor.cs b/src/BirdsiteLive.ActivityPub/Models/Actor.cs index 0552f25..886b862 100644 --- a/src/BirdsiteLive.ActivityPub/Models/Actor.cs +++ b/src/BirdsiteLive.ActivityPub/Models/Actor.cs @@ -23,5 +23,6 @@ namespace BirdsiteLive.ActivityPub public Image icon { get; set; } public Image image { get; set; } public EndPoints endpoints { get; set; } + public UserAttachment[] attachment { get; set; } } } diff --git a/src/BirdsiteLive.ActivityPub/Models/UserAttachment.cs b/src/BirdsiteLive.ActivityPub/Models/UserAttachment.cs new file mode 100644 index 0000000..1b7df37 --- /dev/null +++ b/src/BirdsiteLive.ActivityPub/Models/UserAttachment.cs @@ -0,0 +1,9 @@ +namespace BirdsiteLive.ActivityPub +{ + public class UserAttachment + { + public string type { get; set; } + public string name { get; set; } + public string value { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive.Domain/UserService.cs b/src/BirdsiteLive.Domain/UserService.cs index c203977..549e0ea 100644 --- a/src/BirdsiteLive.Domain/UserService.cs +++ b/src/BirdsiteLive.Domain/UserService.cs @@ -75,6 +75,15 @@ namespace BirdsiteLive.Domain mediaType = "image/jpeg", url = twitterUser.ProfileBannerURL }, + attachment = new [] + { + new UserAttachment + { + type = "PropertyValue", + name = "Official", + value = $"https://twitter.com/{acct}" + } + }, endpoints = new EndPoints { sharedInbox = $"https://{_instanceSettings.Domain}/inbox" diff --git a/src/BirdsiteLive/BirdsiteLive.csproj b/src/BirdsiteLive/BirdsiteLive.csproj index b20520f..d6851c5 100644 --- a/src/BirdsiteLive/BirdsiteLive.csproj +++ b/src/BirdsiteLive/BirdsiteLive.csproj @@ -4,7 +4,7 @@ netcoreapp3.1 d21486de-a812-47eb-a419-05682bb68856 Linux - 0.3.3 + 0.4.0 diff --git a/src/BirdsiteLive/Controllers/UsersController.cs b/src/BirdsiteLive/Controllers/UsersController.cs index 78941d5..ca222ae 100644 --- a/src/BirdsiteLive/Controllers/UsersController.cs +++ b/src/BirdsiteLive/Controllers/UsersController.cs @@ -39,8 +39,12 @@ namespace BirdsiteLive.Controllers [Route("/users")] public IActionResult Index() { - var r = Request.Headers["Accept"].First(); - if (r.Contains("application/activity+json")) return NotFound(); + var acceptHeaders = Request.Headers["Accept"]; + if (acceptHeaders.Any()) + { + var r = acceptHeaders.First(); + if (r.Contains("application/activity+json")) return NotFound(); + } return View("UserNotFound"); } @@ -48,16 +52,20 @@ namespace BirdsiteLive.Controllers [Route("/users/{id}")] public IActionResult Index(string id) { - id = id.Trim(new[] {' ', '@'}).ToLowerInvariant(); + id = id.Trim(new[] { ' ', '@' }).ToLowerInvariant(); var user = _twitterService.GetUser(id); - var r = Request.Headers["Accept"].First(); - if (r.Contains("application/activity+json")) + var acceptHeaders = Request.Headers["Accept"]; + if (acceptHeaders.Any()) { - if (user == null) return NotFound(); - var apUser = _userService.GetUser(user); - var jsonApUser = JsonConvert.SerializeObject(apUser); - return Content(jsonApUser, "application/activity+json; charset=utf-8"); + var r = acceptHeaders.First(); + if (r.Contains("application/activity+json")) + { + if (user == null) return NotFound(); + var apUser = _userService.GetUser(user); + var jsonApUser = JsonConvert.SerializeObject(apUser); + return Content(jsonApUser, "application/activity+json; charset=utf-8"); + } } if (user == null) return View("UserNotFound"); @@ -79,22 +87,26 @@ namespace BirdsiteLive.Controllers [Route("/users/{id}/statuses/{statusId}")] public IActionResult Tweet(string id, string statusId) { - var r = Request.Headers["Accept"].First(); - if (r.Contains("application/activity+json")) + var acceptHeaders = Request.Headers["Accept"]; + if (acceptHeaders.Any()) { - if (!long.TryParse(statusId, out var parsedStatusId)) - return NotFound(); + var r = acceptHeaders.First(); + if (r.Contains("application/activity+json")) + { + if (!long.TryParse(statusId, out var parsedStatusId)) + return NotFound(); - var tweet = _twitterService.GetTweet(parsedStatusId); - if (tweet == null) - return NotFound(); + var tweet = _twitterService.GetTweet(parsedStatusId); + if (tweet == null) + return NotFound(); - //var user = _twitterService.GetUser(id); - //if (user == null) return NotFound(); + //var user = _twitterService.GetUser(id); + //if (user == null) return NotFound(); - var status = _statusService.GetStatus(id, tweet); - var jsonApUser = JsonConvert.SerializeObject(status); - return Content(jsonApUser, "application/activity+json; charset=utf-8"); + var status = _statusService.GetStatus(id, tweet); + var jsonApUser = JsonConvert.SerializeObject(status); + return Content(jsonApUser, "application/activity+json; charset=utf-8"); + } } return View("Tweet", statusId);