/// <summary> /// Creates a file with the given name, and returns its name and a FileStream pointed to it. /// </summary> /// <param name="fileName">File name only, not a path.</param> /// <param name="fileLocation">Whether the file should be stored only on the device, or synced between devices.</param> /// <param name="data"></param> /// <returns></returns> public async Task <string> CreateUserFileAsync(string fileName, FileLocation fileLocation, string password, string pickedFileData) { await Initialization; var pickedFileDictionary = DeserializeSimpleFormat(pickedFileData); string dictionaryJson = JsonConvert.SerializeObject(pickedFileDictionary); var(encryptedData, salt, iv) = _encryptionService.Encrypt(dictionaryJson, password); UserFileContents fileContents = new UserFileContents { EncryptedUserKeyValues = encryptedData, EncryptionIV = iv, EncryptionSalt = salt, FileId = Guid.NewGuid() }; string fileContentsJson = JsonConvert.SerializeObject(fileContents); string relativeFilePath = GetRelativeFilePath(fileName, fileLocation); var createdFile = await _fileService.CreateFileAsync(relativeFilePath); using (createdFile.Stream) { using (var streamWriter = new StreamWriter(createdFile.Stream)) { await streamWriter.WriteAsync(fileContentsJson); } } return(createdFile.FileName); }
public async Task <Dictionary <string, string> > GetUserFileContentsAsync(string name, FileLocation fileLocation, string password) { await Initialization; string relativeFilePath = GetRelativeFilePath(name, fileLocation); string serializedContents = await _fileService.GetFileContentsAsync(relativeFilePath); UserFileContents contents = JsonConvert.DeserializeObject <UserFileContents>(serializedContents); string jsonDictionary = _encryptionService.Decrypt(contents.EncryptedUserKeyValues, password, contents.EncryptionSalt, contents.EncryptionIV); var keyValueDict = JsonConvert.DeserializeObject <Dictionary <string, string> >(jsonDictionary); return(keyValueDict); }