/// <summary> /// Acquires a serial key for this digital good /// </summary> public void AcquireSerialKey() { if (IsSerialKeyAcquired()) { return; } if (!HasSerialKeyProvider()) { return; } ISerialKeyProvider provider = DigitalGood.GetSerialKeyProviderInstance(); AcquireSerialKeyResponse response = provider.AcquireSerialKey(this); if (response.Successful) { this.SerialKeyData = response.SerialKey; //initiate fulfillment email EmailTemplate template = EmailTemplateDataSource.Load(DigitalGood.FulfillmentEmailId); if (template != null) { SendEmail(template); } } else { //serial key could not be acquired. Logger.Error(string.Format("Serial Key could not be acquired for {0} using Serial Key Provider {1}. Provider Error Message '{2}'", DigitalGood.Name, provider.Name, response.ErrorMessage)); } }
/// <summary> /// Returns the serial key to the the serial key pool of the provider /// </summary> public void ReturnSerialKey() { if (IsSerialKeyAcquired() && HasSerialKeyProvider()) { ISerialKeyProvider provider = DigitalGood.GetSerialKeyProviderInstance(); provider.ReturnSerialKey(this.SerialKeyData, this); this.SerialKeyData = null; } }
/// <summary> /// Gets a list of all available objects that implement ISerialKeyProvider interface /// </summary> /// <returns>A list of all available objects that implement ISerialKeyProvider interface</returns> public static List <ISerialKeyProvider> GetSerialKeyProviders() { List <ISerialKeyProvider> providers = new List <ISerialKeyProvider>(); List <string> providerNames = new List <string>(); if (HttpContext.Current != null) { HttpServerUtility server = HttpContext.Current.Server; string[] files = System.IO.Directory.GetFiles(server.MapPath("~/bin"), "*.DLL"); foreach (System.Reflection.Assembly assemblyInstance in AppDomain.CurrentDomain.GetAssemblies()) { try { foreach (Type thisType in assemblyInstance.GetTypes()) { if ((thisType.IsClass && !thisType.IsAbstract)) { foreach (Type thisInterface in thisType.GetInterfaces()) { ISerialKeyProvider instance = null; if ((!string.IsNullOrEmpty(thisInterface.FullName) && thisInterface.FullName.Equals(typeof(ISerialKeyProvider).FullName))) { string classId = Utility.Misc.GetClassId(thisType); string loweredClassId = classId.ToLowerInvariant(); if (!providerNames.Contains(loweredClassId)) { instance = Activator.CreateInstance(Type.GetType(classId)) as ISerialKeyProvider; if (instance != null) { providers.Add(instance); } providerNames.Add(loweredClassId); } } } } } } catch { //ignore error } } } return(providers); }
protected string GetConfigUrl(string classId) { ISerialKeyProvider instance = Activator.CreateInstance(Type.GetType(classId)) as ISerialKeyProvider; return(instance.GetConfigUrl(Page.ClientScript)); }
protected void DigitalGoodsGrid_RowCommand(object sender, GridViewCommandEventArgs e) { int orderItemDigitalGoodId = AlwaysConvert.ToInt(e.CommandArgument); OrderItemDigitalGood oidg = FindDigitalGood(orderItemDigitalGoodId); ISerialKeyProvider asd = oidg.DigitalGood.GetSerialKeyProviderInstance(); if (oidg != null) { switch (e.CommandName) { case "Activate": oidg.Activate(); oidg.Save(); break; case "Deactivate": oidg.Deactivate(); oidg.Save(); break; case "GetKey": if (oidg.DigitalGood.GetSerialKeyProviderInstance() != null) { oidg.AcquireSerialKey(); oidg.Save(); } break; case "SetKey": this.SerialKeyData.Text = String.Empty; this.SaveKeyButton.Visible = true; this.DeleteKeyButton.Visible = false; this.OidgId.Value = oidg.Id.ToString(); this.EditKeyPopup.Show(); break; //case "ReturnKey": // if (oidg.DigitalGood.GetSerialKeyProviderInstance() != null) // { // oidg.ReturnSerialKey(); // oidg.Save(); // } // else // { // oidg.SerialKeyData = null; // oidg.Save(); // } // break; case "ViewKey": this.SerialKeyData.Text = oidg.SerialKeyData; this.SaveKeyButton.Visible = false; this.DeleteKeyButton.Visible = true; this.OidgId.Value = oidg.Id.ToString(); this.EditKeyPopup.Show(); break; case "Delete": // GET THE ORDERITEM THAT CONTAINS THE DIGITAL GOOD OrderItem oi = FindOrderItem(oidg.OrderItemId); if (oi != null) { // DETERMINE IF THE ORDERITEM IS A PLACEHOLDER FOR DIGITAL GOOD if (oi.CustomFields.TryGetValue("DigitalGoodIndicator") == "1") { // THE ORDERITEM IS A PLACEHOLDER, REMOVE THE ITEM (AND DIGITAL GOOD) int oiIndex = _Order.Items.IndexOf(oi.Id); if (oiIndex > -1) { _Order.Items.DeleteAt(oiIndex); } } else { // NOT A PLACEHOLDER, DELETE THE DIGITAL GOOD ONLY int dgIndex = oi.DigitalGoods.IndexOf(oidg.Id); if (dgIndex > -1) { oi.DigitalGoods.DeleteAt(dgIndex); } } } break; } BindDigitalGoodsGrid(); } }