public async Task <ActionResult <DTOServer> > PostServer(DTOServer dtoserver)
        {
            var server = _mapper.Map <Server>(dtoserver);

            if (!await ParseServer(server))
            {
                return(BadRequest());
            }

            _context.Servers.Add(server);
            await _context.SaveChangesAsync();

            // Defer, going to take long to complete
            _ = Task.Run(async delegate
            {
                //await _ipcClient.ComsClient.Connected();
                var tempVar = await _ipcClient.ComsClient.ServerInstall(server.Id);
            });

            return(CreatedAtAction("GetServer", new { id = server.Id }, server));
        }
        public async Task <ActionResult> PatchServer(int id, DTOServer dtoserver)
        {
            if (id != dtoserver.Id)
            {
                return(BadRequest());
            }

            var server = _mapper.Map <Server>(dtoserver);

            // Auth
            var authResult = await _authorizationService.AuthorizeAsync(User, server, "ServersModify");

            if (!authResult.Succeeded)
            {
                return(Forbid());
            }

            if (!await ParseServer(server))
            {
                return(BadRequest());
            }

            _context.Entry(server).State = EntityState.Modified;

            // Read only properties
            //_context.Entry(server).Property(x => x.Created).IsModified = false;
            //_context.Entry(server).Property(x => x.LastModified).IsModified = false;
            _context.Entry(server).Property(x => x.LastStart).IsModified        = false;
            _context.Entry(server).Property(x => x.LastUpdate).IsModified       = false;
            _context.Entry(server).Property(x => x.LastUpdateFailed).IsModified = false;

            // Admin only properties
            if (!User.IsInRole("Admin"))
            {
                _context.Entry(server).Property(x => x.Owner).IsModified             = false;
                _context.Entry(server).Property(x => x.Group).IsModified             = false;
                _context.Entry(server).Property(x => x.Enabled).IsModified           = false;
                _context.Entry(server).Property(x => x.StartParamsHidden).IsModified = false;
                _context.Entry(server).Property(x => x.Game).IsModified       = false;
                _context.Entry(server).Property(x => x.Path).IsModified       = false;
                _context.Entry(server).Property(x => x.Executable).IsModified = false;
                _context.Entry(server).Property(x => x.IP).IsModified         = false;
                _context.Entry(server).Property(x => x.DisplayIP).IsModified  = false;
                _context.Entry(server).Property(x => x.Port).IsModified       = false;
            }
            // _context.Entry(server).Property(x => x.PROPERTY).IsModified = false;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ServerExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }