示例#1
0
        public async Task <Transfer?> GetTransfer(GetTransferParameters getTransferParameters)
        {
            var(transferToken, files, fields, containerUrl, accessTokenResult) = getTransferParameters;
            var(region, codename, _) = storageRepository.DecryptTransferToken(transferToken);

            var transferItem = await kontentRepository.GetKontentItem <TransferItem>(new GetKontentParameters
            {
                Codename = codename
            });

            if (transferItem == default)
            {
                return(null);
            }

            var getContainerParameters = new GetContainerParameters
            {
                ContainerName = storageRepository.GetSafeContainerName(codename)
            };

            var container = await storageRepository.GetContainer(getContainerParameters);

            return((files, fields, containerUrl, accessTokenResult)
                   switch
            {
                (false, true, true, _)when accessTokenResult is NoAccessTokenResult => new Transfer
                {
                    Region = coreContext.Region.Name,
                    Name = transferItem.System.Name,
                    Customer = transferItem.GetInfo().Customer,
                    ContainerUrl = storageRepository.GetPublicContainerUrl(getContainerParameters),
                    Fields = transferItem.GetFields(container.CompletedFields)
                },
                (false, true, true, _)when accessTokenResult is ValidAccessTokenResult => new Transfer
                {
                    Region = coreContext.Region.Name,
                    Name = transferItem.System.Name,
                    Codename = transferItem.System.Codename,
                    Customer = transferItem.GetInfo().Customer,
                    ContainerUrl = storageRepository.GetAdminContainerUrl(getContainerParameters),
                    Fields = transferItem.GetFields(container.CompletedFields)
                },
                (true, false, false, _)when accessTokenResult is ValidAccessTokenResult => new Transfer
                {
                    Region = region,
                    Name = transferItem.System.Name,
                    Customer = transferItem.GetInfo().Customer,
                    Files = await storageRepository.GetContainerFiles(new GetContainerParameters
                    {
                        ContainerName = storageRepository.GetSafeContainerName(codename)
                    })
                },
                _ => throw new ArgumentException($"Combination of files ({files}), fields ({fields}), containerUrl ({containerUrl}), and accessTokenResult ({accessTokenResult?.GetType().Name}) is not valid.")
            });
示例#2
0
        private static bool GetValidGetTransferParameters(
            GetTransferParameters getTransferParameters,
            IAccessTokenResult accessTokenResult
            )
        {
            var(_, files, fields, containerUrl, _) = getTransferParameters;

            return((files, fields, containerUrl, accessTokenResult)
                   switch
            {
                (false, true, true, _)when accessTokenResult is NoAccessTokenResult => true,
                (false, true, true, _)when accessTokenResult is ValidAccessTokenResult => true,
                (true, false, false, _)when accessTokenResult is ValidAccessTokenResult => true,
                _ => false
            });