2020-03-21 08:29:36 +01:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2020-06-29 02:27:03 +02:00
|
|
|
|
using System.IO;
|
2020-03-21 08:29:36 +01:00
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading.Tasks;
|
2021-12-09 08:02:30 +01:00
|
|
|
|
using BirdsiteLive.ActivityPub;
|
|
|
|
|
using BirdsiteLive.ActivityPub.Models;
|
|
|
|
|
using BirdsiteLive.Domain;
|
|
|
|
|
using BirdsiteLive.Tools;
|
2020-03-21 08:29:36 +01:00
|
|
|
|
using Microsoft.AspNetCore.Http;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
2021-04-16 03:21:22 +02:00
|
|
|
|
using Microsoft.Extensions.Logging;
|
2020-03-21 08:29:36 +01:00
|
|
|
|
|
|
|
|
|
namespace BirdsiteLive.Controllers
|
|
|
|
|
{
|
|
|
|
|
[ApiController]
|
|
|
|
|
public class InboxController : ControllerBase
|
|
|
|
|
{
|
2021-04-16 03:21:22 +02:00
|
|
|
|
private readonly ILogger<InboxController> _logger;
|
2021-12-09 08:02:30 +01:00
|
|
|
|
private readonly IUserService _userService;
|
2021-04-16 03:21:22 +02:00
|
|
|
|
|
|
|
|
|
#region Ctor
|
2021-12-09 08:02:30 +01:00
|
|
|
|
public InboxController(ILogger<InboxController> logger, IUserService userService)
|
2021-04-16 03:21:22 +02:00
|
|
|
|
{
|
|
|
|
|
_logger = logger;
|
2021-12-09 08:02:30 +01:00
|
|
|
|
_userService = userService;
|
2021-04-16 03:21:22 +02:00
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
2020-03-21 08:29:36 +01:00
|
|
|
|
[Route("/inbox")]
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public async Task<IActionResult> Inbox()
|
|
|
|
|
{
|
2022-02-09 07:54:35 +01:00
|
|
|
|
try
|
2020-06-29 02:27:03 +02:00
|
|
|
|
{
|
2022-02-09 07:54:35 +01:00
|
|
|
|
var r = Request;
|
|
|
|
|
using (var reader = new StreamReader(Request.Body))
|
|
|
|
|
{
|
|
|
|
|
var body = await reader.ReadToEndAsync();
|
2021-04-16 03:21:22 +02:00
|
|
|
|
|
2022-02-09 07:54:35 +01:00
|
|
|
|
_logger.LogTrace("Inbox: {Body}", body);
|
|
|
|
|
//System.IO.File.WriteAllText($@"C:\apdebug\inbox\{Guid.NewGuid()}.json", body);
|
2020-06-29 02:27:03 +02:00
|
|
|
|
|
2022-02-09 07:54:35 +01:00
|
|
|
|
var activity = ApDeserializer.ProcessActivity(body);
|
|
|
|
|
var signature = r.Headers["Signature"].First();
|
2021-12-09 08:02:30 +01:00
|
|
|
|
|
2022-02-09 07:54:35 +01:00
|
|
|
|
switch (activity?.type)
|
2021-12-09 08:02:30 +01:00
|
|
|
|
{
|
2022-02-09 07:54:35 +01:00
|
|
|
|
case "Delete":
|
|
|
|
|
{
|
|
|
|
|
var succeeded = await _userService.DeleteRequestedAsync(signature, r.Method, r.Path,
|
2023-01-11 07:13:23 +01:00
|
|
|
|
r.QueryString.ToString(), HeaderHandler.RequestHeaders(r.Headers),
|
|
|
|
|
activity as ActivityDelete, body);
|
2022-02-09 07:54:35 +01:00
|
|
|
|
if (succeeded) return Accepted();
|
|
|
|
|
else return Unauthorized();
|
|
|
|
|
}
|
2021-12-09 08:02:30 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-06-29 02:27:03 +02:00
|
|
|
|
}
|
2023-01-11 07:13:23 +01:00
|
|
|
|
catch (FollowerIsGoneException) { }
|
2020-06-29 02:27:03 +02:00
|
|
|
|
|
2020-08-01 04:52:40 +02:00
|
|
|
|
return Accepted();
|
2020-03-21 08:29:36 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|