From b70a1f677314c846176225ad62e01484159634b4 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 30 Jan 2025 03:10:28 +0200 Subject: [PATCH] added kick and ban qortalRequests --- src/background.ts | 4 +- .../Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 27 ++++- src/qortalRequests/get.ts | 104 +++++++++++++++++- 4 files changed, 131 insertions(+), 6 deletions(-) diff --git a/src/background.ts b/src/background.ts index c0b4e24..3469e99 100644 --- a/src/background.ts +++ b/src/background.ts @@ -2535,7 +2535,7 @@ async function removeAdmin({ groupId, qortalAddress }) { return res; } -async function banFromGroup({ +export async function banFromGroup({ groupId, qortalAddress, rBanReason = "", @@ -2569,7 +2569,7 @@ async function banFromGroup({ return res; } -async function kickFromGroup({ groupId, qortalAddress, rBanReason = "" }) { +export async function kickFromGroup({ groupId, qortalAddress, rBanReason = "" }) { const lastReference = await getLastRef(); const resKeyPair = await getKeyPair(); const parsedData = JSON.parse(resKeyPair); diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index c8c8ebf..6067962 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -243,7 +243,7 @@ const UIQortalRequests = [ 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', - 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'DECRYPT_QORTAL_GROUP_DATA', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP' + 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'DECRYPT_QORTAL_GROUP_DATA', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index 0ef585e..6f8d6c7 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,5 +1,5 @@ -import { gateways, getApiKeyFromStorage } from "./background"; -import { addForeignServer, addListItems, adminAction, cancelSellOrder, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, leaveGroupRequest, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; +import { banFromGroup, gateways, getApiKeyFromStorage } from "./background"; +import { addForeignServer, addListItems, adminAction, cancelSellOrder, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; const listOfAllQortalRequests = [ 'GET_USER_ACCOUNT', 'DECRYPT_DATA', 'SEND_COIN', 'GET_LIST_ITEMS', @@ -672,7 +672,30 @@ chrome?.runtime?.onMessage.addListener((request, sender, sendResponse) => { }); break; } + case "KICK_FROM_GROUP" : { + const data = request.payload; + kickFromGroupRequest(data, isFromExtension) + .then((res) => { + sendResponse(res); + }) + .catch((error) => { + sendResponse({ error: error.message }); + }); + break; + } + case "BAN_FROM_GROUP" : { + const data = request.payload; + + banFromGroup(data, isFromExtension) + .then((res) => { + sendResponse(res); + }) + .catch((error) => { + sendResponse({ error: error.message }); + }); + break; + } } } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 19f4910..410e2e2 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -21,7 +21,9 @@ import { registerName, getNameInfoForOthers, leaveGroup, - inviteToGroup + inviteToGroup, + banFromGroup, + kickFromGroup } from "../background"; import { decryptGroupEncryption, getNameInfo, uint8ArrayToObject } from "../backgroundFunctions/encryption"; import { QORT_DECIMALS } from "../constants/constants"; @@ -2646,6 +2648,7 @@ export const sendCoin = async (data, isFromExtension) => { text1: "Do you give this application permission to send coins?", text2: `To: ${recipient}`, highlightedText: `${amount} ${checkCoin}`, + fee: fee }, isFromExtension); const { accepted } = resPermission; @@ -3982,6 +3985,105 @@ export const inviteToGroupRequest = async (data, isFromExtension) => { }) return response + } else { + throw new Error("User declined request"); + } +}; + +export const kickFromGroupRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "qortalAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + const qortalAddress = data?.qortalAddress + const reason = data?.reason + + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const displayInvitee = await getNameInfoForOthers(qortalAddress) + + const fee = await getFee("GROUP_KICK"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to kick ${displayInvitee || qortalAddress} from the group?`, + highlightedText: `Group: ${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await kickFromGroup({ + groupId, + qortalAddress, + rBanReason: reason + }) + return response + + } else { + throw new Error("User declined request"); + } +}; + +export const banFromGroupRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "qortalAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + const qortalAddress = data?.qortalAddress + const rBanTime = data?.banTime + const reason = data?.reason + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const displayInvitee = await getNameInfoForOthers(qortalAddress) + + const fee = await getFee("GROUP_BAN"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to ban ${displayInvitee || qortalAddress} from the group?`, + highlightedText: `Group: ${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await banFromGroup({ + groupId, + qortalAddress, + rBanTime, + rBanReason: reason + }) + return response + } else { throw new Error("User declined request"); }