feat: leave alliance/kick alliance members
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Build / build (20) (push) Failing after 44s
				
			
		
			
				
	
				Build / build (22) (push) Failing after 20s
				
			
		
			
				
	
				Build / build (18) (push) Failing after 29s
				
			
		
			
				
	
				Build / build (20) (pull_request) Failing after 19s
				
			
		
			
				
	
				Build / build (18) (pull_request) Failing after 45s
				
			
		
			
				
	
				Build / build (22) (pull_request) Failing after 27s
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Build / build (20) (push) Failing after 44s
				
			Build / build (22) (push) Failing after 20s
				
			Build / build (18) (push) Failing after 29s
				
			Build / build (20) (pull_request) Failing after 19s
				
			Build / build (18) (pull_request) Failing after 45s
				
			Build / build (22) (pull_request) Failing after 27s
				
			This commit is contained in:
		
							parent
							
								
									2746e243c9
								
							
						
					
					
						commit
						fcac995be2
					
				
							
								
								
									
										38
									
								
								src/controllers/api/removeFromAllianceController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/controllers/api/removeFromAllianceController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					import { AllianceMember, Guild, GuildMember } from "@/src/models/guildModel";
 | 
				
			||||||
 | 
					import { deleteAlliance } from "@/src/services/guildService";
 | 
				
			||||||
 | 
					import { getAccountForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { GuildPermission } from "@/src/types/guildTypes";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const removeFromAllianceController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    // Check requester is a warlord in their guild
 | 
				
			||||||
 | 
					    const account = await getAccountForRequest(req);
 | 
				
			||||||
 | 
					    const guildMember = (await GuildMember.findOne({ accountId: account._id, status: 0 }))!;
 | 
				
			||||||
 | 
					    if (guildMember.rank > 1) {
 | 
				
			||||||
 | 
					        res.status(400).json({ Error: 104 });
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let allianceMember = (await AllianceMember.findOne({ guildId: guildMember.guildId }))!;
 | 
				
			||||||
 | 
					    if (!guildMember.guildId.equals(req.query.guildId as string)) {
 | 
				
			||||||
 | 
					        // Removing a guild that is not our own needs additional permissions
 | 
				
			||||||
 | 
					        if (!(allianceMember.Permissions & GuildPermission.Ruler)) {
 | 
				
			||||||
 | 
					            res.status(400).json({ Error: 104 });
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Update allianceMember to point to the alliance to kick
 | 
				
			||||||
 | 
					        allianceMember = (await AllianceMember.findOne({ guildId: req.query.guildId }))!;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (allianceMember.Permissions & GuildPermission.Ruler) {
 | 
				
			||||||
 | 
					        await deleteAlliance(allianceMember.allianceId);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        await Promise.all([
 | 
				
			||||||
 | 
					            await Guild.updateOne({ _id: allianceMember.guildId }, { $unset: { AllianceId: "" } }),
 | 
				
			||||||
 | 
					            await AllianceMember.deleteOne({ _id: allianceMember._id })
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    res.end();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -92,6 +92,7 @@ import { purchaseController } from "@/src/controllers/api/purchaseController";
 | 
				
			|||||||
import { queueDojoComponentDestructionController } from "@/src/controllers/api/queueDojoComponentDestructionController";
 | 
					import { queueDojoComponentDestructionController } from "@/src/controllers/api/queueDojoComponentDestructionController";
 | 
				
			||||||
import { redeemPromoCodeController } from "@/src/controllers/api/redeemPromoCodeController";
 | 
					import { redeemPromoCodeController } from "@/src/controllers/api/redeemPromoCodeController";
 | 
				
			||||||
import { releasePetController } from "@/src/controllers/api/releasePetController";
 | 
					import { releasePetController } from "@/src/controllers/api/releasePetController";
 | 
				
			||||||
 | 
					import { removeFromAllianceController } from "@/src/controllers/api/removeFromAllianceController";
 | 
				
			||||||
import { removeFromGuildController } from "@/src/controllers/api/removeFromGuildController";
 | 
					import { removeFromGuildController } from "@/src/controllers/api/removeFromGuildController";
 | 
				
			||||||
import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
 | 
					import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
 | 
				
			||||||
import { retrievePetFromStasisController } from "@/src/controllers/api/retrievePetFromStasisController";
 | 
					import { retrievePetFromStasisController } from "@/src/controllers/api/retrievePetFromStasisController";
 | 
				
			||||||
@ -173,6 +174,7 @@ apiRouter.get("/marketRecommendations.php", marketRecommendationsController);
 | 
				
			|||||||
apiRouter.get("/marketSearchRecommendations.php", marketRecommendationsController);
 | 
					apiRouter.get("/marketSearchRecommendations.php", marketRecommendationsController);
 | 
				
			||||||
apiRouter.get("/modularWeaponSale.php", modularWeaponSaleController);
 | 
					apiRouter.get("/modularWeaponSale.php", modularWeaponSaleController);
 | 
				
			||||||
apiRouter.get("/queueDojoComponentDestruction.php", queueDojoComponentDestructionController);
 | 
					apiRouter.get("/queueDojoComponentDestruction.php", queueDojoComponentDestructionController);
 | 
				
			||||||
 | 
					apiRouter.get("/removeFromAlliance.php", removeFromAllianceController);
 | 
				
			||||||
apiRouter.get("/setActiveQuest.php", setActiveQuestController);
 | 
					apiRouter.get("/setActiveQuest.php", setActiveQuestController);
 | 
				
			||||||
apiRouter.get("/setActiveShip.php", setActiveShipController);
 | 
					apiRouter.get("/setActiveShip.php", setActiveShipController);
 | 
				
			||||||
apiRouter.get("/setBootLocation.php", setBootLocationController);
 | 
					apiRouter.get("/setBootLocation.php", setBootLocationController);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
import { Request } from "express";
 | 
					import { Request } from "express";
 | 
				
			||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
import { getInventory } from "@/src/services/inventoryService";
 | 
					import { getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
import { AllianceMember, Guild, GuildAd, GuildMember, TGuildDatabaseDocument } from "@/src/models/guildModel";
 | 
					import { Alliance, AllianceMember, Guild, GuildAd, GuildMember, TGuildDatabaseDocument } from "@/src/models/guildModel";
 | 
				
			||||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
 | 
					import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    GuildPermission,
 | 
					    GuildPermission,
 | 
				
			||||||
@ -612,9 +612,26 @@ export const deleteGuild = async (guildId: Types.ObjectId): Promise<void> => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    await GuildAd.deleteOne({ GuildId: guildId });
 | 
					    await GuildAd.deleteOne({ GuildId: guildId });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await AllianceMember.deleteMany({ guildId });
 | 
					    // If guild is the creator of an alliance, delete that as well.
 | 
				
			||||||
 | 
					    const allianceMember = await AllianceMember.findOne({ guildId, Pending: false });
 | 
				
			||||||
 | 
					    if (allianceMember) {
 | 
				
			||||||
 | 
					        if (allianceMember.Permissions & GuildPermission.Ruler) {
 | 
				
			||||||
 | 
					            await deleteAlliance(allianceMember.allianceId);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TODO: If this guild was the founding guild of an alliance (ruler permission), that would need to be forcefully deleted now as well.
 | 
					    await AllianceMember.deleteMany({ guildId });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const deleteAlliance = async (allianceId: Types.ObjectId): Promise<void> => {
 | 
				
			||||||
 | 
					    const allianceMembers = await AllianceMember.find({ allianceId, Pending: false });
 | 
				
			||||||
 | 
					    await parallelForeach(allianceMembers, async allianceMember => {
 | 
				
			||||||
 | 
					        await Guild.updateOne({ _id: allianceMember.guildId }, { $unset: { AllianceId: "" } });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await AllianceMember.deleteMany({ allianceId });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await Alliance.deleteOne({ _id: allianceId });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const getAllianceClient = async (
 | 
					export const getAllianceClient = async (
 | 
				
			||||||
 | 
				
			|||||||
@ -71,11 +71,11 @@ export interface ILongMOTD {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// 32 seems to be reserved
 | 
					// 32 seems to be reserved
 | 
				
			||||||
export enum GuildPermission {
 | 
					export enum GuildPermission {
 | 
				
			||||||
    Ruler = 1, // Clan: Change hierarchy. Alliance: Kick clans.
 | 
					    Ruler = 1, // Clan: Change hierarchy. Alliance (Creator only): Kick clans.
 | 
				
			||||||
    Advertiser = 8192,
 | 
					    Advertiser = 8192,
 | 
				
			||||||
    Recruiter = 2, // Send invites (Clans & Alliances)
 | 
					    Recruiter = 2, // Send invites (Clans & Alliances)
 | 
				
			||||||
    Regulator = 4, // Kick members
 | 
					    Regulator = 4, // Kick members
 | 
				
			||||||
    Promoter = 8, // Clan: Promote and demote members. Alliance: Change clan permissions.
 | 
					    Promoter = 8, // Clan: Promote and demote members. Alliance (Creator only): Change clan permissions.
 | 
				
			||||||
    Architect = 16, // Create and destroy rooms
 | 
					    Architect = 16, // Create and destroy rooms
 | 
				
			||||||
    Decorator = 1024, // Create and destroy decos
 | 
					    Decorator = 1024, // Create and destroy decos
 | 
				
			||||||
    Treasurer = 64, // Clan: Contribute from vault and edit tax rate. Alliance: Divvy vault.
 | 
					    Treasurer = 64, // Clan: Contribute from vault and edit tax rate. Alliance: Divvy vault.
 | 
				
			||||||
@ -318,5 +318,4 @@ export interface IAllianceMemberDatabase {
 | 
				
			|||||||
    Permissions: number;
 | 
					    Permissions: number;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO: GET /api/removeFromAlliance.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0
 | 
					 | 
				
			||||||
// TODO: GET /api/setAllianceGuildPermissions.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=000000000000000000000042&perms=2
 | 
					// TODO: GET /api/setAllianceGuildPermissions.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=000000000000000000000042&perms=2
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user