public object DoAdminActionOnPlayerById( Guid userId, string act, [FromBody] AdminActionParameters actionParameters ) { if (!Enum.TryParse <AdminActions>(act, true, out var adminAction)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, @"Invalid action.")); } if (Guid.Empty == userId) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Invalid user id '{userId}'.")); } Tuple <Client, User> fetchResult; fetchResult = Database.PlayerData.User.Fetch(userId); return(DoAdminActionOnUser( () => fetchResult, () => Request.CreateErrorResponse(HttpStatusCode.NotFound, $@"No user with id '{userId}'."), adminAction, actionParameters )); }
public object DoAdminActionOnPlayerByName( string userName, string act, [FromBody] AdminActionParameters actionParameters ) { if (!Enum.TryParse <AdminActions>(act, true, out var adminAction)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, @"Invalid action.")); } if (string.IsNullOrWhiteSpace(userName)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Invalid user name '{userName}'.")); } Tuple <Client, User> fetchResult; fetchResult = Database.PlayerData.User.Fetch(userName); return(DoAdminActionOnUser( () => fetchResult, () => Request.CreateErrorResponse(HttpStatusCode.NotFound, $@"No user with name '{userName}'."), adminAction, actionParameters )); }
public object DoAdminActionOnPlayerByName( LookupKey lookupKey, string act, [FromBody] AdminActionParameters actionParameters ) { if (!Enum.TryParse <AdminActions>(act, true, out var adminAction)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, @"Invalid action.")); } if (lookupKey.IsInvalid) { return(Request.CreateErrorResponse( HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name." )); } Tuple <Client, Player> fetchResult; fetchResult = Player.Fetch(lookupKey); return(DoAdminActionOnPlayer( () => fetchResult, () => Request.CreateErrorResponse( HttpStatusCode.NotFound, lookupKey.HasId ? $@"No player with id '{lookupKey.Id}'." : $@"No player with name '{lookupKey.Name}'." ), adminAction, actionParameters )); }
private object DoAdminActionOnUser( Func <Tuple <Client, User> > fetch, Func <HttpResponseMessage> onError, AdminActions adminAction, AdminActionParameters actionParameters ) { var(client, user) = fetch(); if (user == null) { return(onError()); } var player = client?.Entity; var targetIp = client?.GetIp() ?? ""; switch (adminAction) { case AdminActions.Ban: if (string.IsNullOrEmpty(Ban.CheckBan(user, ""))) { Ban.Add( user.Id, actionParameters.Duration, actionParameters.Reason ?? "", actionParameters.Moderator ?? @"api", actionParameters.Ip ? targetIp : "" ); client?.Disconnect(); PacketSender.SendGlobalMsg(Strings.Account.banned.ToString(user.Name)); return(Request.CreateMessageResponse( HttpStatusCode.OK, Strings.Account.banned.ToString(user.Name) )); } else { return(Request.CreateMessageResponse( HttpStatusCode.BadRequest, Strings.Account.alreadybanned.ToString(user.Name) )); } case AdminActions.UnBan: Ban.Remove(user.Id, false); PacketSender.SendGlobalMsg(Strings.Account.unbanned.ToString(user.Name)); return(Request.CreateMessageResponse( HttpStatusCode.OK, Strings.Account.unbanned.ToString(user.Name) )); case AdminActions.Mute: if (string.IsNullOrEmpty(Mute.FindMuteReason(user.Id, ""))) { Mute.Add( user, actionParameters.Duration, actionParameters.Reason ?? "", actionParameters.Moderator ?? @"api", actionParameters.Ip ? targetIp : "" ); PacketSender.SendGlobalMsg(Strings.Account.muted.ToString(user.Name)); return(Request.CreateMessageResponse( HttpStatusCode.OK, Strings.Account.muted.ToString(user.Name) )); } else { return(Request.CreateMessageResponse( HttpStatusCode.BadRequest, Strings.Account.alreadymuted.ToString(user.Name) )); } case AdminActions.UnMute: Mute.Remove(user); PacketSender.SendGlobalMsg(Strings.Account.unmuted.ToString(user.Name)); return(Request.CreateMessageResponse( HttpStatusCode.OK, Strings.Account.unmuted.ToString(user.Name) )); case AdminActions.WarpTo: if (player != null) { var mapId = actionParameters.MapId == Guid.Empty ? player.MapId : actionParameters.MapId; player.Warp(mapId, (byte)player.X, (byte)player.Y); return(Request.CreateMessageResponse( HttpStatusCode.OK, $@"Warped '{player.Name}' to {mapId} ({player.X}, {player.Y})." )); } break; case AdminActions.WarpToLoc: if (player != null) { var mapId = actionParameters.MapId == Guid.Empty ? player.MapId : actionParameters.MapId; player.Warp(mapId, actionParameters.X, actionParameters.Y, true); return(Request.CreateMessageResponse( HttpStatusCode.OK, $@"Warped '{player.Name}' to {mapId} ({actionParameters.X}, {actionParameters.Y})." )); } break; case AdminActions.Kick: if (client != null) { client.Disconnect(actionParameters.Reason); PacketSender.SendGlobalMsg(Strings.Player.serverkicked.ToString(player?.Name)); return(Request.CreateMessageResponse( HttpStatusCode.OK, Strings.Player.serverkicked.ToString(player?.Name) )); } break; case AdminActions.Kill: if (client != null && client.Entity != null) { lock (client.Entity.EntityLock) { client.Entity.Die(); } PacketSender.SendGlobalMsg(Strings.Player.serverkilled.ToString(player?.Name)); return(Request.CreateMessageResponse( HttpStatusCode.OK, Strings.Commandoutput.killsuccess.ToString(player?.Name) )); } break; case AdminActions.WarpMeTo: case AdminActions.WarpToMe: return(Request.CreateErrorResponse( HttpStatusCode.BadRequest, $@"'{adminAction.ToString()}' not supported by the API." )); case AdminActions.SetSprite: case AdminActions.SetFace: case AdminActions.SetAccess: default: return(Request.CreateErrorResponse(HttpStatusCode.NotImplemented, adminAction.ToString())); } return(Request.CreateErrorResponse(HttpStatusCode.NotFound, Strings.Player.offline)); }