Ejemplo n.º 1
0
        private async Task <string> UploadFromRequest(HttpRequest request, TagTransactionEntity tx)
        {
            string redirect = null;

            if (request.ContentType == "multipart/form-data")
            {
                var form = await request.ReadFormAsync();

                redirect = form["redirectUri"];

                var file = form.Files[0];

                using (var stream = file.OpenReadStream())
                {
                    await this.TagTransactionBlobContainer.UploadFromStreamAsync(tx, stream);
                }
            }
            else
            {
                using (var stream = request.Body)
                {
                    await this.TagTransactionBlobContainer.UploadFromStreamAsync(tx, stream);
                }
            }

            return(redirect);
        }
Ejemplo n.º 2
0
        private async Task <TagTransactionEntity> StartAsync(System.Security.Claims.ClaimsIdentity user, string channel, string alias)
        {
            var tx = new TagTransactionEntity(TagTransactionOperation.Create, channel, alias, user.Name);

            await this.TagTransactionTable.Create(tx);

            return(tx);
        }
Ejemplo n.º 3
0
        private async Task CompleteAsync(TagTransactionEntity tx)
        {
            //await start.CompleteAsync();

            tx.Stored = DateTime.UtcNow;

            await this.TagTransactionTable.Update(tx);

            var message = new StoreTagMessage(tx.Channel, tx.Id);

            await this.TagQueue.EnqueueMessageAsync(message);
        }
Ejemplo n.º 4
0
        private async Task <SoftwareIdentity> ReadTag(TagTransactionEntity tagTx)
        {
            SoftwareIdentity swidtag;

            var text = await this.TagTransactionContainer.DownloadTextAsync(tagTx);

            if (!TryLoadJsonTag(text, out swidtag))
            {
                if (!TryLoadXmlTag(text, out swidtag))
                {
                    throw new StoreTagJobException($"Cannot parse tag: {text}");
                }
            }

            return(swidtag);
        }
Ejemplo n.º 5
0
        private async Task <TagEntity> CreateTag(TagTransactionEntity tagTx)
        {
            var swidtag = await this.ReadTag(tagTx);

            var tagEntity = CreateTagEntityFromSoftwareIdentity(tagTx.Channel, tagTx.Alias, swidtag);

            var redirects = UpdateInstallationMediaLinksInSoftwareIdentityAndReturnWithRedirects(tagEntity.PartitionKey, tagEntity.RowKey, swidtag).ToList();

            await this.WriteRedirects(redirects);

            await this.WriteBlobs(tagEntity, swidtag);

            tagEntity.Stored = DateTime.UtcNow;

            await this.WriteTag(tagEntity);

            return(tagEntity);
        }
Ejemplo n.º 6
0
        public async Task ExecuteAsync(TagTransactionEntity tagTx)
        {
            var txInfo = this.TagTransactionTable.GetSystemInfo();

            var operation = tagTx.OperationValue;

            switch (operation)
            {
            case TagTransactionOperation.Create:
                await this.CreateTag(tagTx);

                break;

            default:
                throw new NotImplementedException();
            }

            tagTx.Stored = DateTime.UtcNow;
            await this.TagTransactionTable.Update(tagTx);

            txInfo.LastUpdatedStorage = DateTime.UtcNow.AddMilliseconds(1);
            await this.TagTransactionTable.CreateOrMergeAsync(txInfo);
        }
Ejemplo n.º 7
0
        private static DeleteTagResult DeleteTag(string sourceAzid, TagTable tagsTable, TagTransactionEntity tagTx)
        {
            var tag = tagsTable.GetPrimaryTag(sourceAzid, tagTx.RowKey);

            tag.RowKey = "deleted";

            return(new DeleteTagResult()
            {
                DeleteSourceUris = new TagBlobUris
                {
                    JsonUri = new Uri(tag.JsonBlobName),
                    XmlUri = new Uri(tag.XmlBlobName)
                },
                Tag = tag
            });
        }
Ejemplo n.º 8
0
        private async Task <UpdatedTagResult> UpdateTag(string sourceAzid, CloudBlobDirectory sourceDirectory, TagTable tagsTable, TagTransactionEntity tagTx)
        {
            var oldTagEntity = tagsTable.GetPrimaryTag(sourceAzid, tagTx.Id);

            var json = await this.GetBlobAsString(tagTx.StagedBlobUri);

            var softwareIdentity = SoftwareIdentity.LoadJson(json);

            var tagEntity = this.CreateTagEntityFromSoftwareIdentity(sourceAzid, tagTx, softwareIdentity);

            var redirects = UpdateInstallationMediaLinksInSoftwareIdentityAndReturnWithRedirects(sourceAzid, tagEntity.TagAzid, tagEntity.Uid, softwareIdentity);

            var tagUris = await WriteVersionedTag(sourceDirectory, tagEntity, softwareIdentity);

            tagEntity.JsonBlobName = tagUris.JsonUri.AbsoluteUri;

            tagEntity.XmlBlobName = tagUris.XmlUri.AbsoluteUri;

            var primaryTag = tagEntity.AsPrimary();

            primaryTag.DownloadCount = oldTagEntity.DownloadCount;

            return(new UpdatedTagResult()
            {
                NewSourceUris = tagUris,
                OldSourceUris = new TagBlobUris
                {
                    JsonUri = new Uri(oldTagEntity.JsonBlobName),
                    XmlUri = new Uri(oldTagEntity.XmlBlobName)
                },
                Redirects = redirects,
                Tag = tagEntity,
                PrimaryTag = primaryTag
            });
        }