From 631347aed80d219a303d25556be2054c2b3d4f36 Mon Sep 17 00:00:00 2001 From: adam Date: Thu, 24 Apr 2025 12:54:30 -0400 Subject: [PATCH] admin interface works --- WebInterface/Controllers/api/UAC.cs | 87 +++++++++++++++++++++ WebInterface/Views/UACs/Details.cshtml | 85 +++++++++++++++++--- wwwroot/js/site.js | 104 +++++++++++++++++++++++-- 3 files changed, 258 insertions(+), 18 deletions(-) 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 @@ + + + @section Scripts{ } diff --git a/wwwroot/js/site.js b/wwwroot/js/site.js index ac259c4..2f7e360 100644 --- a/wwwroot/js/site.js +++ b/wwwroot/js/site.js @@ -21,7 +21,6 @@ function patchModel(model, deprecated_apiUrl) var type=components[1]; // var id=components[3]; - console.log("dexter impression: I am now ready to post the following content:"); console.log(JSON.stringify(model)); fetch(apiUrl + type + '/', { method: 'PATCH', @@ -53,6 +52,7 @@ function deleteModel(model, deprecated_apiUrl) // console.log("wtf are you doing? " + components[2] + " is something other than Details"); // } var type=components[1]; + let result = null; // var id=components[3]; fetch(apiUrl + type + '/', { method: 'DELETE', @@ -70,13 +70,15 @@ function deleteModel(model, deprecated_apiUrl) .then(returnedSuccessdata => { // perhaps a success callback console.log('returnedSuccessdata:', returnedSuccessdata); + if(callback !== null) { callback(); } }) .catch(error => { console.error('Error:', error); }); -} -function linkUAC_Channel(channel_guid) + } +function linkUAC_Channel(channel_guid, callback) { + var components = window.location.pathname.split('/'); var id=components[3]; let model={"uac_guid": id, @@ -97,12 +99,13 @@ function linkUAC_Channel(channel_guid) .then(returnedSuccessdata => { // perhaps a success callback console.log('returnedSuccessdata:', returnedSuccessdata); + if(callback !== null) { callback(); } }) .catch(error => { console.error('Error:', error); }); -} -function linkUAC_User(user_guid) + } +function linkUAC_User(user_guid, callback) { var components = window.location.pathname.split('/'); var id=components[3]; @@ -124,13 +127,15 @@ function linkUAC_User(user_guid) .then(returnedSuccessdata => { // perhaps a success callback console.log('returnedSuccessdata:', returnedSuccessdata); + if(callback !== null) { callback(); } }) .catch(error => { console.error('Error:', error); }); -} -function linkUAC_Account(account_guid) + } +function linkUAC_Account(account_guid, callback) { + var reuslt = null; var components = window.location.pathname.split('/'); var id=components[3]; let model={"uac_guid": id, @@ -151,6 +156,91 @@ function linkUAC_Account(account_guid) .then(returnedSuccessdata => { // perhaps a success callback console.log('returnedSuccessdata:', returnedSuccessdata); + if(callback !== null) { callback(); } + }) + .catch(error => { + console.error('Error:', error); + }); + } +function unlinkUAC_User(user_guid, callback) +{ + var components = window.location.pathname.split('/'); + var id=components[3]; + let model={"uac_guid": id, + "user_guid": user_guid}; + fetch(apiUrl + "UAC/UnlinkUser/", { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(model), + }) + .then(response => { + if (!response.ok) { + throw new Error('Network response was not "ok". which is not ok.'); + } + return response.json(); + }) + .then(returnedSuccessdata => { + // perhaps a success callback + console.log('returnedSuccessdata:', returnedSuccessdata); + if(callback !== null) { callback(); } + }) + .catch(error => { + console.error('Error:', error); + }); + } +function unlinkUAC_Account(account_guid, callback) +{ + var components = window.location.pathname.split('/'); + var id=components[3]; + let model={"uac_guid": id, + "account_guid": account_guid}; + fetch(apiUrl + "UAC/UnlinkAccount/", { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(model), + }) + .then(response => { + if (!response.ok) { + throw new Error('Network response was not "ok". which is not ok.'); + } + return response.json(); + }) + .then(returnedSuccessdata => { + // perhaps a success callback + console.log('returnedSuccessdata:', returnedSuccessdata); + if(callback !== null) { callback(); } + }) + .catch(error => { + console.error('Error:', error); + }); +} +function unlinkUAC_Channel(user_guid, callback) +{ + var components = window.location.pathname.split('/'); + var id=components[3]; + let model={"uac_guid": id, + "channel_guid": user_guid}; + fetch(apiUrl + "UAC/UnlinkChannel/", { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(model), + }) + .then(response => { + if (!response.ok) { + throw new Error('Network response was not "ok". which is not ok.'); + } + return response.json(); + }) + .then(returnedSuccessdata => { + // perhaps a success callback + console.log('returnedSuccessdata:', returnedSuccessdata); + if(callback !== null) { callback(); } }) .catch(error => { console.error('Error:', error);