예제 #1
0
        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
                       ));
        }
예제 #2
0
        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
                       ));
        }
예제 #3
0
        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
                       ));
        }
예제 #4
0
        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));
        }