/// <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;
     }
 }
示例#3
0
        /// <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);
        }
示例#4
0
        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();
            }
        }