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.")); }
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.")); }
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(); }