public async Task <ResponseModelBase <bool> > ValidateSessionKey([FromBody] AuthenticatedRequestModel model) { if (!ModelState.IsValid) { return(ErrorModel.Of(false, "invalid_request")); } var session = await ldb.FindBySessionKey(model.SessionKey); if (session == null) { return(OkModel.Of(false)); } //and tell the client that the session key is true return(OkModel.Of(true)); }
public async Task <ResponseModelBase> RequestDeleteAccount([FromBody] AuthenticatedRequestModel model) { try { if (!await ldb.Validate(model)) { return(ErrorModel.Of("not_logged_in")); } await EmailSender.SendEmail(await ldb.FindBySessionKey(model.SessionKey), EmailSender.DeletionTemplate); return(Models.OkModel.Of("delete_confirmation_email_sent")); } catch (Exception e) { return(ErrorModel.Of(e.Message)); } }
public async Task <ResponseModelBase> RedeemProduct([FromBody] RedeemProductRequestModel model) { if (!ModelState.IsValid) { return(ErrorModel.Of("invalid_request")); } var user = await ldb.FindBySessionKey(model.SessionKey); if (user == null) { return(ErrorModel.Of("not_logged_in")); } var tableStorageString = Startup.Configuration["Data:TableStorageConnectionString"]; //update var account = CloudStorageAccount.Parse(tableStorageString); var client = account.CreateCloudTableClient(); var table = client.GetTableReference("ZSBProductKeys"); var partitionKey = model.ProductKey.Substring(0, 4); var key = model.ProductKey.ToUpper().Replace("-", ""); var result = await table.ExecuteAsync( TableOperation.Retrieve <ProductKeyStorageModel>(partitionKey, key)); if (result.HttpStatusCode != 200) //error { return(Models.ErrorModel.Of("product_key_not_found")); } //Do stuff (update the db) var obj = (ProductKeyStorageModel)result.Result; if (obj.HasBeenRedeemed) { return(ErrorModel.Of("product_key_already_redeemed")); } obj.HasBeenRedeemed = true; obj.RedemptionDate = DateTime.UtcNow; obj.RedeemerAccountId = user.UniqueId; obj.RedeemerAccountEmailAddress = user.EmailAddress; //and update the user user.OwnedProducts.Add(new UserOwnedProductModel { EditionId = obj.EditionId, ProductId = obj.ProductId, ProductKey = obj.Key, RedemptionDate = DateTime.UtcNow }); await table.ExecuteAsync(TableOperation.Merge(obj)); await ldb.UpdateUser(user); await Backend.EmailSender.SendEmail(user, Backend.EmailSender.ProductKeyRedeemedTemplate, new Dictionary <string, string>() { { "-displayName-", obj.DisplayName }, { "-productName-", obj.ProductName }, { "-productId-", obj.ProductId.ToString() }, { "-editionName-", obj.EditionName }, { "-editionId-", obj.EditionId.ToString() }, { "-productKey-", obj.Key }, { "-downloadUrl-", (await Backend.ProductDatabase.GetProduct(obj.ProductId, obj.EditionId)).Product.DownloadUrl }, { "-redemptionDate-", DateTime.UtcNow.ToString("G") } }); return(OkModel.Of("product_key_redeemed")); }