diff --git a/WebInterface/Controllers/api/UAC.cs b/WebInterface/Controllers/api/UAC.cs index 291b302..d9b73a0 100644 --- a/WebInterface/Controllers/api/UAC.cs +++ b/WebInterface/Controllers/api/UAC.cs @@ -123,4 +123,91 @@ public class UACController: ControllerBase Rememberer.RememberUAC(uacFromDb); return Ok(uacFromDb); } + [HttpPatch] + [Route("UnlinkUser")] + [Produces("application/json")] + public IActionResult UnlinkUser([FromBody] extraSpecialObjectReadGlorifiedTupleFor_LinkUser req) + { + var uac_guid = req.uac_guid; + var user_guid = req.user_guid; + var uacFromDb = Rememberer.SearchUAC(uac => uac.Id == uac_guid); + if (uacFromDb == null) + { + _logger.LogError($"attempt to unlink uac for uac {uac_guid}, not found"); + return NotFound(); + } + var userFromDb = Rememberer.SearchUser(c => c.Id == user_guid); + if (userFromDb == null) + { + _logger.LogError($"attempt to unlink user for user {user_guid}, not found"); + return NotFound(); + } + + uacFromDb.Users ??= []; + if (!uacFromDb.Users.Contains(userFromDb)) + { + return BadRequest("user not linked"); + } + uacFromDb.Users.Remove(userFromDb); + Rememberer.RememberUAC(uacFromDb); + return Ok(uacFromDb); + } + [HttpPatch] + [Route("UnlinkAccount")] + [Produces("application/json")] + public IActionResult UnlinkAccount([FromBody] extraSpecialObjectReadGlorifiedTupleFor_LinkAccount req) + { + var uac_guid = req.uac_guid; + var account_guid = req.account_guid; + var uacFromDb = Rememberer.SearchUAC(uac => uac.Id == uac_guid); + if (uacFromDb == null) + { + _logger.LogError($"attempt to unlink uac for uac {uac_guid}, not found"); + return NotFound(); + } + var accountFromDb = Rememberer.SearchAccount(a => a.Id == account_guid); + if (accountFromDb == null) + { + _logger.LogError($"attempt to unlink account for user {account_guid}, not found"); + return NotFound(); + } + + uacFromDb.AccountInChannels ??= []; + if (!uacFromDb.AccountInChannels.Contains(accountFromDb)) + { + return BadRequest("account not linked"); + } + uacFromDb.AccountInChannels.Remove(accountFromDb); + Rememberer.RememberUAC(uacFromDb); + return Ok(uacFromDb); + } + [HttpPatch] + [Route("UnlinkChannel")] + [Produces("application/json")] + public IActionResult UnlinkChannel([FromBody] extraSpecialObjectReadGlorifiedTupleFor_LinkChannel req) + { + var uac_guid = req.uac_guid; + var channel_guid = req.channel_guid; + var uacFromDb = Rememberer.SearchUAC(uac => uac.Id == uac_guid); + if (uacFromDb == null) + { + _logger.LogError($"attempt to unlink channal for uac {uac_guid}, not found"); + return NotFound(); + } + var channelFromDb = Rememberer.SearchChannel(c => c.Id == channel_guid); + if (channelFromDb == null) + { + _logger.LogError($"attempt to unlink user for user {channel_guid}, not found"); + return NotFound(); + } + + uacFromDb.Users ??= []; + if (!uacFromDb.Channels.Contains(channelFromDb)) + { + return BadRequest("user not linked"); + } + uacFromDb.Channels.Remove(channelFromDb); + Rememberer.RememberUAC(uacFromDb); + return Ok(uacFromDb); + } } diff --git a/WebInterface/Views/UACs/Details.cshtml b/WebInterface/Views/UACs/Details.cshtml index 3a662b0..7fdbf62 100644 --- a/WebInterface/Views/UACs/Details.cshtml +++ b/WebInterface/Views/UACs/Details.cshtml @@ -38,7 +38,7 @@
+