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); }
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); }
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); }
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); }
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); }
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); }
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 }); }
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 }); }