public void Can_Get_Decrypted_Credentials() { // Setup string decryptedString = "decrypted string"; string username = "******"; string encryptedString = "w6AnE3eWg1urf54jkTejCku+JT3gPT78e9MAkUa8fsI="; byte[] expectedKey = Convert.FromBase64String("LHRqdBadRUVh3cdMYoeuYVng/qQlgvBReEAg5JvO48E="); byte[] expectedIV = Convert.FromBase64String("CB7hOrmWxs2riRF26Imn7w=="); byte[] expectedEncryptedPass = Convert.FromBase64String(encryptedString); var encryptionMock = new Mock <EncryptionUtils>(); encryptionMock.Setup(x => x.DecryptStringFromBytes_AES(expectedEncryptedPass, expectedKey, expectedIV)).Returns(decryptedString); var user = new User(); var jigsaw = new JigsawAccountDetails { AssociatedUser = user, Username = username, EncryptedPassword = encryptedString }; _context.JigsawAccountDetails.Add(jigsaw); _context.SaveChanges(); _process = new JigsawAuthProcesses(_context, encryptionMock.Object); // Act var result = _process.Execute(new GetUserJigsawCredentialsParams { RequestingUserId = user.Id }); // Verify Assert.IsNotNull(result, "Process returned a null result"); Assert.AreEqual(username, result.JigsawUsername, "An incorrect username was returned"); Assert.AreEqual(decryptedString, result.JigsawPassword, "An incorrect password was returned"); }
/// <summary> /// Saves the jigsaw user credentials for the user /// </summary> /// <param name="procParams"></param> /// <returns></returns> public GeneralSuccessResultViewModel Execute(SaveJigsawUserCredentialsParams procParams) { // Get the encryption key and iv from the app.config var key = Convert.FromBase64String(ConfigurationManager.AppSettings[KEY_APPSETTINGS]); var iv = Convert.FromBase64String(ConfigurationManager.AppSettings[IV_APPSETTINGS]); var encryptedBytes = _encryptionUtils.EncryptStringToBytes_AES(procParams.JigsawPassword, key, iv); var user = _context.Users .Where(x => x.Id == procParams.RequestingUserId) .Include(x => x.JigsawAccountDetails) .FirstOrDefault(); if (user == null) { throw new MJLEntityNotFoundException(typeof(User), procParams.RequestingUserId); } var jigsaw = new JigsawAccountDetails { Username = procParams.JigsawUsername.Trim(), EncryptedPassword = Convert.ToBase64String(encryptedBytes) }; user.JigsawAccountDetails = jigsaw; _context.SaveChanges(); // Attempt to use the new credentials to make sure they are valid Execute(new GetJigsawUserPointsParams { RequestingUserId = procParams.RequestingUserId }); return(new GeneralSuccessResultViewModel { WasSuccessful = true }); }