Example #1
0
        /// <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);
        }
Example #2
0
        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);
        }