public async Task <IActionResult> Inuvation()
        {
            var userId = await GetUserId();

            var body = await Request.Body.ToStringAsync();

            var id = GetConnectionId();

            var command = new ParseClientInfoCommand
            {
                Identifier    = id,
                RawClientInfo = body,
                UserId        = userId,
                Game          = Game.Rs3,
                IsXor         = true
            };

            var client = await Mediator.Send(command);

            if (client == null)
            {
                return(BadRequest("Client data returned null after parsing."));
            }

            client.Game = Game.Rs3;

            try
            {
                await _mediator.Send(new SaveClientInfoBulkCommand
                {
                    Clients = new[] { client }
                });
            }
            catch (Exception)
            {
                // ignored
            }

            var hasAccess = await Mediator.Send(new HasGroupQuery(userId, GroupConstants.InuvationId,
                                                                  GroupConstants.InuvationMaintainerId));

            if (!hasAccess)
            {
                return(Unauthorized("You do not have access to Inuvation."));
            }

            var xor    = StringExtensions.Xor(client.Hash, _configuration.GetValue <string>("Encryption:XorInuvation"));
            var base64 = Convert.ToBase64String(xor);

            return(Ok(base64));
        }
        public async Task <IActionResult> Update()
        {
            var userId = await GetUserId();

            var body = await Request.Body.ToStringAsync();

            var id = GetConnectionId();

            var command = new ParseClientInfoCommand
            {
                Identifier    = id,
                RawClientInfo = body,
                UserId        = userId,
                IsXor         = true
            };

            var client = await Mediator.Send(command);

            if (client == null)
            {
                return(BadRequest("Client data returned null after parsing."));
            }

            client.Game = Game.Osrs;

            try
            {
                await _mediator.Send(new SaveClientInfoBulkCommand
                {
                    Clients = new[] { client }
                });
            }
            catch (Exception)
            {
                // ignored
            }

            var over = await Mediator.Send(new IsClientOverLimitQuery { Tag = id, UserId = userId });

            if (over)
            {
                return(BadRequest("You are currently over your instance limit."));
            }

            var xor    = StringExtensions.Xor(client.Hash, _configuration.GetValue <string>("Encryption:Xor"));
            var base64 = Convert.ToBase64String(xor);

            return(Ok(base64));
        }