protected override async Task <Action <AsyncCodeActivityContext> > ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken)
        {
            // Inputs
            var text       = Text.Get(context);
            var password   = Key.Get(context);
            var encoding   = TextEncoding.Get(context);
            var iterations = Iterations.Get(context);

            string result = text;

            if (!string.IsNullOrEmpty(text))
            {
                using (var crypto = new Crypto(Algorithm, encoding, iterations))
                    result = crypto.Encrypt(text, password);
            }

            return((ctx) => Result.Set(ctx, result));
        }
        private void OnComplete(NativeActivityContext context, ActivityInstance completedInstance, IEncryption result)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            var encoding = TextEncoding.Get(context);
            var input    = Input.Get(context);
            var pass     = GetRawKey(context);

            if (Action == CryptoActions.Encrypt)
            {
                var encrypted = result.Encrypt(encoding.GetBytes(input), encoding.GetBytes(pass));
                Result.Set(context, Convert.ToBase64String(encrypted));
            }
            else
            {
                var decrypted = result.Decrypt(Convert.FromBase64String(input), encoding.GetBytes(pass));
                Result.Set(context, encoding.GetString(decrypted));
            }
        }
예제 #3
0
        protected override async Task <Action <AsyncCodeActivityContext> > ExecuteAsync(AsyncCodeActivityContext context, CancellationToken token)
        {
            var zipFilePath = Path.GetFullPath(ZipFilePath.Get(context));
            var toCompress  = ToCompress.Get(context);
            var encoding    = TextEncoding.Get(context);
            var counter     = 0;

            if (toCompress is string)
            {
                toCompress = new string[] { toCompress.ToString() }
            }
            ;

            await Task.Run(() =>
            {
                var paths       = (IEnumerable <string>)toCompress;
                var directories = paths.Where(Directory.Exists);
                var files       = paths.Except(directories)
                                  .Concat(directories.SelectMany(path => Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories)))
                                  .Select(Path.GetFullPath)
                                  .Where(path => path != zipFilePath);

                var emptyFolders = directories.SelectMany(dir => Directory.EnumerateDirectories(dir, "*", SearchOption.AllDirectories))
                                   .Select(Path.GetFullPath)
                                   .Where(path => !Directory.EnumerateFileSystemEntries(path).Any());

                var entries = files.Concat(emptyFolders).OrderBy(path => path).ToArray();

                var mode = File.Exists(zipFilePath)
                    ? ZipArchiveMode.Update
                    : ZipArchiveMode.Create;

                using (var zip = ZipFile.Open(zipFilePath, mode, encoding))
                    counter = CompressTo(zip, entries, mode, token, null);
            }, token).ConfigureAwait(false);

            return(ctx => FilesCount.Set(ctx, counter));
        }
        private void OnComplete(NativeActivityContext context, ActivityInstance completedInstance, IEncryption result)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            var input    = Input.Get(context);
            var colsLen  = input.Columns.Count;
            var encoding = TextEncoding.Get(context);
            var pass     = GetRawKey(context);

            var sortBy  = Sort.Get(context);
            var columns = DataTableUtil.IdentifyDataColumns(input, Columns?.Get(context), Enumerable.Range(0, colsLen)).ToList();

            Func <string, string> action;

            if (Action == CryptoActions.Encrypt)
            {
                action = (string value) => Convert.ToBase64String(result.Encrypt(encoding.GetBytes(value), encoding.GetBytes(pass)));
            }
            else
            {
                action = (string value) => encoding.GetString(result.Decrypt(Convert.FromBase64String(value), encoding.GetBytes(pass)));
            }

            var rows   = input.AsEnumerable();
            var values = new List <object[]>();

            void Add(DataRow row)
            {
                values.Add(ApplyTo(row, colsLen, columns, action));
            }

            if (ParallelProcessing)
            {
                Parallel.ForEach(rows, Add);
            }
            else
            {
                foreach (DataRow row in input.Rows)
                {
                    Add(row);
                }
            }

            var output = CreateCryptoDataTable(input, columns);

            output.BeginLoadData();

            foreach (var value in values)
            {
                output.LoadDataRow(value, false);
            }

            output.AcceptChanges();
            output.EndLoadData();

            if (!string.IsNullOrWhiteSpace(sortBy))
            {
                output.DefaultView.Sort = sortBy;
                output = output.DefaultView.ToTable();
            }

            Result.Set(context, output);
        }