Ejemplo n.º 1
0
        public async Task <IActionResult> AuthByEmail([FromBody] UserEmailLogin userEmailLogin)
        {
            // Is the email data valid?
            if (string.IsNullOrEmpty(userEmailLogin?.Email) || string.IsNullOrEmpty(userEmailLogin.Password))
            {
                return(BadRequest("User authentication data was null or empty."));
            }

            // Pull the users data from the DB
            var dbUser = await m_CoreDbContext.Users
                         .Where(dbu => dbu.Email == userEmailLogin.Email && dbu.Password == userEmailLogin.Password)
                         .SingleOrDefaultAsync();

            if (dbUser != null)
            {
                var response = new UserAuthPair
                {
                    UserId    = dbUser.UserId,
                    AuthToken = dbUser.AuthToken
                };

                return(Ok(response));
            }

            return(BadRequest("Could not authenticate user by email."));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> GetSessionJwt([FromBody] UserAuthPair userAuthPair)
        {
            // Is the UserAuthPair data valid?
            if (string.IsNullOrEmpty(userAuthPair?.UserId) || string.IsNullOrEmpty(userAuthPair.AuthToken))
            {
                return(BadRequest("User authentication data was null or empty."));
            }

            // Pull the users data from the DB
            var dbUser = await m_CoreDbContext.Users
                         .Where(dbu => dbu.UserId == userAuthPair.UserId)
                         .SingleOrDefaultAsync();

            // Check if the users supplied and stored AuthToken matches
            if (dbUser != null)
            {
                if (dbUser.AuthToken == userAuthPair.AuthToken)
                {
                    var claims = new[]
                    {
                        new Claim(JwtRegisteredClaimNames.Jti, dbUser.UserId), // TODO: Generate a unique token for each request
                        new Claim(JwtRegisteredClaimNames.Sub, dbUser.UserId)
                    };

                    var key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(m_TokenSettings.SecretKey));
                    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                    var issuer   = m_TokenSettings.Issuer;
                    var audience = m_TokenSettings.Audience;

                    var expires = DateTime.Now.AddMinutes(30);

                    var token = new JwtSecurityToken(issuer, audience, claims, expires: expires, signingCredentials: creds);

                    var response = new JsonWebToken
                    {
                        AccessToken   = new JwtSecurityTokenHandler().WriteToken(token),
                        ExpiresInSecs = 30
                    };

                    return(Ok(response));
                }
            }

            return(BadRequest("Could not create token."));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> CreateUserByDeviceId([FromBody] UserDevice userDevice)
        {
            if (string.IsNullOrEmpty(userDevice?.DeviceId))
            {
                return(BadRequest("DeviceId was invalid."));
            }

            // NOTE: We may want to enable this again later
            // Check if DeviceId exists
            //var dbUser = await m_CoreDbContext.Users
            //    .Where(dbu => dbu.DeviceId == userDevice.DeviceId)
            //    .SingleOrDefaultAsync();

            // If it does not exist, create a new user
            //if (dbUser == null)
            //{
            var userId    = Guid.NewGuid().ToString();
            var authToken = Guid.NewGuid().ToString();

            // User data
            var dbUser = new DbUser
            {
                UserId    = userId,
                DeviceId  = userDevice.DeviceId,
                AuthToken = authToken
            };

            // Users default profile
            var dbUserProfile = new DbUserProfile
            {
                UsersProfileId        = Guid.NewGuid().ToString(),
                UserId                = userId,
                Name                  = m_ConfigDbContext.UserDefaults.Profile.Name,
                Xp                    = m_ConfigDbContext.UserDefaults.Profile.Xp,
                CreateDate            = DateTime.UtcNow,
                LastSeenDate          = DateTime.UtcNow,
                LastDailyRewardDate   = DateTime.UtcNow,
                GoldMineDaysRemaining = 0,
                GemMineDaysRemaining  = 0,
                Level                 = 0,
                FriendCount           = 0,
            };

            // Users default wallet
            var dbUserWallet = new DbUserWallet
            {
                UsersWalletId = Guid.NewGuid().ToString(),
                UserId        = userId,
                HappyTokens   = m_ConfigDbContext.UserDefaults.Wallet.HappyTokens,
                Gems          = m_ConfigDbContext.UserDefaults.Wallet.Gems,
                Gold          = m_ConfigDbContext.UserDefaults.Wallet.Gold,
            };

            // User default happiness
            var dbUserHappiness = new DbUserHappiness
            {
                UsersHappinessId = Guid.NewGuid().ToString(),
                UserId           = userId,
                Wealth           = m_ConfigDbContext.UserDefaults.Happiness.Wealth,
                Experience       = m_ConfigDbContext.UserDefaults.Happiness.Experience,
                Health           = m_ConfigDbContext.UserDefaults.Happiness.Health,
                Skill            = m_ConfigDbContext.UserDefaults.Happiness.Skill,
                Social           = m_ConfigDbContext.UserDefaults.Happiness.Social
            };

            // Create default avatars (Avatars give happiness, allocate based on Level1)
            var dbUsersAvatars = new List <DbUserAvatar>();

            foreach (var avatarType in m_ConfigDbContext.UserDefaults.AvatarTypes)
            {
                var userAvatar = new DbUserAvatar()
                {
                    UsersAvatarId = Guid.NewGuid().ToString(),
                    UserId        = userId,
                    AvatarType    = avatarType,
                    Level         = 1,
                    Pieces        = 0
                };

                // Grab the default avatar config
                var avatar = m_ConfigDbContext.Avatars.Avatars.Find(i => i.AvatarType == avatarType);

                // Add the happiness gained from Level1 to the users Happiness
                var happinessType   = avatar.HappinessType;
                var happinessAmount = avatar.Levels[0].Happiness;
                dbUserHappiness.Add(happinessType, happinessAmount);

                dbUsersAvatars.Add(userAvatar);
            }

            // Create default buildings (Buildings give happiness, allocate based on Level1)
            var dbUsersBuildings = new List <DbUserBuilding>();

            foreach (var buildingType in m_ConfigDbContext.UserDefaults.BuildingTypes)
            {
                var userBuilding = new DbUserBuilding()
                {
                    UsersBuildingId = Guid.NewGuid().ToString(),
                    UserId          = userId,
                    BuildingType    = buildingType,
                    Level           = 1
                };

                // Grab the default avatar config
                var building = m_ConfigDbContext.Buildings.Buildings.Find(i => i.BuildingType == buildingType);

                // Add the happiness gained from Level1 to the users Happiness
                var happinessType   = building.HappinessType;
                var happinessAmount = building.Levels[0].Happiness;
                dbUserHappiness.Add(happinessType, happinessAmount);

                dbUsersBuildings.Add(userBuilding);
            }

            // Add the new user
            await m_CoreDbContext.Users.AddAsync(dbUser);

            await m_CoreDbContext.UsersProfiles.AddAsync(dbUserProfile);

            await m_CoreDbContext.UsersWallets.AddAsync(dbUserWallet);

            await m_CoreDbContext.UsersHappiness.AddAsync(dbUserHappiness);

            await m_CoreDbContext.UsersAvatars.AddRangeAsync(dbUsersAvatars);

            await m_CoreDbContext.UsersBuildings.AddRangeAsync(dbUsersBuildings);

            // Save changes
            await m_CoreDbContext.SaveChangesAsync();

            // Create the user to send back to the client
            var response = new UserAuthPair
            {
                UserId    = userId,
                AuthToken = authToken
            };

            return(Ok(response));
            // }

            // User with this DeviceId already exists
            // return Forbid();
        }