public async Task <IActionResult> PostUsers([FromBody] PassedData <PassedNewEmail> data)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            DateTime now = DateTime.UtcNow;

            if (data.UserToken == null)
            {
                return(BadRequest(new DataError("securityErr", "No authorization controll.")));
            }
            UserToken dbtoken = Security.CheckUserToken(this._context, data.UserToken);

            if (dbtoken == null)
            {
                return(BadRequest(new DataError("securityErr", "Your data has probably been stolen or modified manually. We suggest password's change.")));
            }
            else
            {
                if (!dbtoken.IsTimeValid(now))
                {
                    return(BadRequest(new DataError("timeoutErr", "You have been too long inactive. Relogin is required.")));
                }
                else
                {
                    dbtoken.UpdateToken(now);
                }
            }
            Users user = _context.Users.FirstOrDefault(e => e.Name == dbtoken.UserName);

            if (user.Password != HashClass.GenHash(data.Data.Password))
            {
                return(BadRequest(new DataError("passwordErr", "Password is incorrect.")));
            }
            if (data.Data.NewEmail != data.Data.ConfirmEmail)
            {
                return(BadRequest(new DataError("newEmailErr", "New email was not confirmed correctly.")));
            }
            //all went well
            user.Email = data.Data.NewEmail;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (_context.Users.FirstOrDefault(e => ((e.Email == data.Data.NewEmail) && (e.Name != dbtoken.UserName))) != null)
                {
                    return(BadRequest(new DataError("newEmailErr", "New email has been already used.")));
                }
                return(BadRequest(new DataError("serverErr", "Failed to save new password.")));
            }
            return(Ok(new { success = true }));
        }
        public async Task <IActionResult> PostTokens([FromBody] PassedData <string> passedData)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            DateTime now = DateTime.UtcNow;

            if (passedData.UserToken == null)
            {
                return(BadRequest(new DataError("securityErr", "No authorization controll.")));
            }
            UserToken dbtoken = Security.CheckUserToken(this._context, passedData.UserToken);

            if (dbtoken == null)
            {
                return(BadRequest(new DataError("securityErr", "Your data has probably been stolen or modified manually. We suggest password's change.")));
            }
            else
            {
                if (!dbtoken.IsTimeValid(now))
                {
                    return(BadRequest(new DataError("timeoutErr", "You have been too long inactive. Relogin is required.")));
                }
                else
                {
                    dbtoken.UpdateToken(now);
                }
            }
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                return(BadRequest(new DataError("databaseErr", "Failed to update tokens.")));
            }
            UserTokenResult userResult = new UserTokenResult()
            {
                Token    = dbtoken.HashedToken,
                UserName = dbtoken.UserName,
            };
            var h = _context.Heros.Join(_context.UsersHeros.Where(e => e.UserName == dbtoken.UserName), e => e.HeroId, e => e.HeroId, (a, b) => new HeroBrief()
            {
                Name     = a.Name,
                Nickname = a.Nickname,
                Level    = a.Lvl,
                Orders   = a.Orders,
            });

            return(Ok(new { success = true, usertoken = userResult, user = new UserBrief()
                            {
                                Username = dbtoken.UserName, Characters = h.ToArray()
                            } }));
        }
        public async Task <IActionResult> PostHeros([FromBody] PassedData <PassedRemoveCharacter> passedData)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            DateTime now = DateTime.UtcNow;

            if (passedData.UserToken == null)
            {
                return(BadRequest(new DataError("securityErr", "No authorization controll.")));
            }
            UserToken dbtoken = Security.CheckUserToken(this._context, passedData.UserToken);

            if (dbtoken == null)
            {
                return(BadRequest(new DataError("securityErr", "Your data has probably been stolen or modified manually. We suggest password's change.")));
            }
            else
            {
                if (!dbtoken.IsTimeValid(now))
                {
                    return(BadRequest(new DataError("timeoutErr", "You have been too long inactive. Relogin is required.")));
                }
                else
                {
                    dbtoken.UpdateToken(now);
                }
            }
            Users user = _context.Users.FirstOrDefault(e => e.Name == dbtoken.UserName);

            if (user.Password != HashClass.GenHash(passedData.Data.Password))
            {
                return(BadRequest(new DataError("passwordErr", "Password is incorrect.")));
            }
            Heros      herotoremove      = _context.Heros.FirstOrDefault(e => e.Name == passedData.Data.HeroName);
            UsersHeros conntoremove      = _context.UsersHeros.FirstOrDefault(e => e.UserName == dbtoken.UserName && e.HeroId == herotoremove.HeroId);
            var        tokentoremove     = _context.ActionToken.Where(e => e.HeroId == herotoremove.HeroId);
            var        locationstoremove = _context.HerosLocations.Where(e => e.HeroId == herotoremove.HeroId);
            var        travelingtoremove = _context.Traveling.Where(e => e.HeroId == herotoremove.HeroId);
            var        equipmenttoremove = _context.Equipment.Where(e => e.HeroId == herotoremove.HeroId);
            var        backpacktoremove  = _context.Backpack.Where(e => e.HeroId == herotoremove.HeroId);
            var        healingremove     = _context.Healing.Where(e => e.HeroId == herotoremove.HeroId);
            var        fightingremove    = _context.Fighting.Where(e => e.HeroId == herotoremove.HeroId);

            // TODO: remove other features

            if (tokentoremove.Count() > 0)
            {
                _context.ActionToken.RemoveRange(tokentoremove);
            }
            if (locationstoremove.Count() > 0)
            {
                _context.HerosLocations.RemoveRange(locationstoremove);
            }
            if (travelingtoremove.Count() > 0)
            {
                _context.Traveling.RemoveRange(travelingtoremove);
            }
            if (equipmenttoremove.Count() > 0)
            {
                _context.Equipment.RemoveRange(equipmenttoremove);
            }
            if (backpacktoremove.Count() > 0)
            {
                _context.Backpack.RemoveRange(backpacktoremove);
            }
            if (healingremove.Count() > 0)
            {
                _context.Healing.RemoveRange(healingremove);
            }
            if (fightingremove.Count() > 0)
            {
                _context.Fighting.RemoveRange(fightingremove);
            }

            _context.Heros.Remove(herotoremove);
            _context.UsersHeros.Remove(conntoremove);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                return(BadRequest(new DataError("serverErr", "Failed to remove hero.")));
            }
            return(Ok(new { success = true, removedHero = herotoremove.Name }));
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> PostHeros([FromBody] PassedData <HeroPassed> data)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            DateTime now = DateTime.UtcNow;

            if (data.UserToken == null)
            {
                return(BadRequest(new DataError("securityErr", "No authorization controll.")));
            }
            UserToken dbtoken = Security.CheckUserToken(this._context, data.UserToken);

            if (dbtoken == null)
            {
                return(BadRequest(new DataError("securityErr", "Your data has probably been stolen or modified manually. We suggest password's change.")));
            }
            else
            {
                if (!dbtoken.IsTimeValid(now))
                {
                    return(BadRequest(new DataError("timeoutErr", "You have been too long inactive. Relogin is required.")));
                }
                else
                {
                    dbtoken.UpdateToken(now);
                }
            }
            int currheros = this._context.UsersHeros.Where(e => e.UserName == dbtoken.UserName).Count();

            if (currheros >= ServerOptions.MaxHerosPerAccount)
            {
                return(BadRequest(new DataError("herolimitErr", "You have reached maximum amount of heros per account.")));
            }
            int   ID    = this._context.Heros.Select(x => x.HeroId).DefaultIfEmpty(0).Max();
            Heros newly = new Heros()
            {
                Charisma = data.Data.Attributes[6],
                Country  = data.Data.Country,
                // starting location of type??
                CurrentLocation = 1,
                Dexterity       = data.Data.Attributes[2],
                Endurance       = data.Data.Attributes[1],
                Experience      = 0,
                HeroId          = ID + 1,
                Hp             = HeroCalculator.PureMaxHP(HeroCalculator.BaseHP(1), data.Data.Attributes),
                Intelligence   = data.Data.Attributes[5],
                Lvl            = 1,
                Name           = data.Data.Name,
                Nickname       = data.Data.Nickname,
                Orders         = 0,
                Origin         = data.Data.Origin,
                Reflex         = data.Data.Attributes[3],
                Sl             = 0,
                Slbase         = 0,
                Status         = 0,
                Strength       = data.Data.Attributes[0],
                Willpower      = data.Data.Attributes[7],
                Wisdom         = data.Data.Attributes[4],
                Invitational   = true,
                VelocityFactor = 1,
            };
            UsersHeros userheros = new UsersHeros()
            {
                HeroId   = newly.HeroId,
                UserName = dbtoken.UserName,
            };
            Equipment      eq       = Equipment.GenFreshEquipment(newly.HeroId);
            HerosLocations location = HerosLocations.GenInitialLocation(_context, newly.HeroId);

            _context.Heros.Add(newly);
            _context.UsersHeros.Add(userheros);
            _context.Equipment.Add(eq);
            _context.HerosLocations.Add(location);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                return(BadRequest(new DataError("tokenErr", "Hero already exists.")));
            }
            return(Ok((HeroBrief)newly));
        }
        public async Task <IActionResult> PostUsers([FromBody] PassedData <PassedRemoveAccount> data)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            DateTime now = DateTime.UtcNow;

            if (data.UserToken == null)
            {
                return(BadRequest(new DataError("securityErr", "No authorization controll.")));
            }
            UserToken dbtoken = Security.CheckUserToken(this._context, data.UserToken);

            if (dbtoken == null)
            {
                return(BadRequest(new DataError("securityErr", "Your data has probably been stolen or modified manually. We suggest password's change.")));
            }
            else
            {
                if (!dbtoken.IsTimeValid(now))
                {
                    return(BadRequest(new DataError("timeoutErr", "You have been too long inactive. Relogin is required.")));
                }
                else
                {
                    dbtoken.UpdateToken(now);
                }
            }
            Users user = _context.Users.FirstOrDefault(e => e.Name == dbtoken.UserName);

            if (user.Password != HashClass.GenHash(data.Data.Password))
            {
                return(BadRequest(new DataError("passwordErr", "Password is incorrect.")));
            }
            //all went well

            Users deluser      = _context.Users.FirstOrDefault(e => e.Name == dbtoken.UserName);
            var   usersheros   = _context.UsersHeros.Where(e => e.UserName == deluser.Name);
            var   delheros     = _context.Heros.Join(usersheros, e => e.HeroId, e => e.HeroId, (a, b) => a);
            var   delusertoken = _context.UserToken.Where(e => e.UserName == deluser.Name);
            var   deltoken     = _context.Tokens.Where(e => e.UserName == deluser.Name);

            var delactiontokens   = _context.ActionToken.Join(delheros, e => e.HeroId, f => f.HeroId, (a, b) => a);
            var delheroslocations = _context.HerosLocations.Join(delheros, e => e.HeroId, f => f.HeroId, (a, b) => a);
            var delherostraveling = _context.Traveling.Join(delheros, e => e.HeroId, f => f.HeroId, (a, b) => a);
            var delherosequipment = _context.Equipment.Join(delheros, e => e.HeroId, f => f.HeroId, (a, b) => a);
            var delherosbackpack  = _context.Backpack.Join(delheros, e => e.HeroId, f => f.HeroId, (a, b) => a);
            var delheroshealing   = _context.Healing.Join(delheros, e => e.HeroId, f => f.HeroId, (a, b) => a);
            var delherosfighting  = _context.Fighting.Join(delheros, e => e.HeroId, f => f.HeroId, (a, b) => a);

            if (delactiontokens.Count() > 0)
            {
                _context.ActionToken.RemoveRange(delactiontokens);
            }
            if (delheroslocations.Count() > 0)
            {
                _context.HerosLocations.RemoveRange(delheroslocations);
            }
            if (delherostraveling.Count() > 0)
            {
                _context.Traveling.RemoveRange(delherostraveling);
            }
            if (delherosequipment.Count() > 0)
            {
                _context.Equipment.RemoveRange(delherosequipment);
            }
            if (delherosbackpack.Count() > 0)
            {
                _context.Backpack.RemoveRange(delherosbackpack);
            }
            if (delheroshealing.Count() > 0)
            {
                _context.Healing.RemoveRange(delheroshealing);
            }
            if (delherosfighting.Count() > 0)
            {
                _context.Fighting.RemoveRange(delherosfighting);
            }

            if (usersheros.Count() > 0)
            {
                _context.UsersHeros.RemoveRange(usersheros);
            }
            if (delheros.Count() > 0)
            {
                _context.Heros.RemoveRange(delheros);
            }
            if (delusertoken.Count() > 0)
            {
                _context.UserToken.RemoveRange(delusertoken);
            }
            if (deltoken.Count() > 0)
            {
                _context.Tokens.RemoveRange(deltoken);
            }
            _context.Users.Remove(deluser);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                return(BadRequest(new DataError("serverErr", "Failed delete account.")));
            }
            return(Ok(new { success = true }));
        }
Ejemplo n.º 6
0
        public static string SelectBRMfrmMaterialYardChk(PassedData formVars)
        {
            var r = JsonConvert.SerializeObject(formVars);

            return(r);
        }
        public async Task <IActionResult> PostHeros([FromBody] PassedData <string> passedData)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            DateTime now = DateTime.UtcNow;

            if (passedData.UserToken == null)
            {
                return(BadRequest(new DataError("securityErr", "No authorization controll.")));
            }
            UserToken dbtoken = Security.CheckUserToken(this._context, passedData.UserToken);

            if (dbtoken == null)
            {
                return(BadRequest(new DataError("securityErr", "Your data has probably been stolen or modified manually. We suggest password's change.")));
            }
            else
            {
                if (!dbtoken.IsTimeValid(now))
                {
                    return(BadRequest(new DataError("timeoutErr", "You have been too long inactive. Relogin is required.")));
                }
                else
                {
                    dbtoken.UpdateToken(now);
                }
            }
            Heros hero = _context.Heros.Where(e => e.Name == passedData.Data).Join(_context.UsersHeros.Where(e => e.UserName == dbtoken.UserName), e => e.HeroId, e => e.HeroId, (a, b) => a).FirstOrDefault();

            if (hero == null)
            {
                return(BadRequest(new DataError("noHeroErr", "Hero is not available.")));
            }
            ActionToken       actionToken = Security.GenerateActionToken(hero.HeroId, _context);
            ActionTokenResult tokenResult = new ActionTokenResult()
            {
                HeroName = hero.Name,
                Token    = actionToken.HashedToken,
            };

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                return(BadRequest(new DataError("databaseErr", "Failed to update tokens.")));
            }

            try
            {
                var heroStatus = LocationHandler.GetHeroGeneralStatus(_context, hero, now);

                // equipment generation
                var Equipment = _context.Equipment.FirstOrDefault(e => e.HeroId == hero.HeroId);
                if (Equipment == null)
                {
                    return(BadRequest(new DataError("equipmentErr", "Hero is without equipment.")));
                }

                List <int?> used = new List <int?>
                {
                    Equipment.Armour, Equipment.Bracelet, Equipment.FirstHand, Equipment.Gloves, Equipment.Helmet, Equipment.Neckles, Equipment.Ring1, Equipment.Ring2,
                    Equipment.SecondHand, Equipment.Shoes, Equipment.Trousers
                };
                var ItemsOn = used.Where(e => e.HasValue).Select(e => e.Value).ToList();

                var Backpack  = _context.Backpack.Where(e => e.HeroId == hero.HeroId);
                var UsedItems = Backpack.Select(e => e.ItemId).Distinct().ToList();
                UsedItems.AddRange(ItemsOn);
                UsedItems = UsedItems.Distinct().OrderBy(e => e).ToList();

                var ItemsInUse = _context.Items.Join(UsedItems, e => e.ItemId, e => e, (a, b) => a).ToArray();

                EquipmentResult EQ = Equipment.GenResult(ItemsInUse.ToArray(), Backpack.ToList());

                return(Ok(new { success = true, actiontoken = tokenResult, hero = hero.GenResult(EQ, heroStatus.Location, heroStatus.StatusData) }));
            }
            catch (Exception e)
            {
                return(BadRequest(new DataError("statusErr", e.Message)));
            }
        }