public ActionResult Create(ProvisioningRequest provisionRequest)
        {
            try
            {
                string requestBody = Request.GetBody();
                //Emailer.SendEmail("Addon Action", "Create - " + requestBody);
                provisionRequest = JsonConvert.DeserializeObject<ProvisioningRequest>(requestBody);

                Plan plan;

                if (!Enum.TryParse<Plan>(provisionRequest.plan, true, out plan))
                {
                    Emailer.SendEmail("Addon Debug Response", "No plan exceptio");
                    throw new ArgumentException(string.Format("Plan \"{0}\" is not a valid plan", provisionRequest.plan));
                }

                var db = new Database("DefaultConnection");
                var purchase = new Purchase()
                    {
                        CreatedBy = string.Format("{0};{1}", Request.GetForwardedHostAddress(), User.Identity.Name),
                        UniqueId = Guid.NewGuid().ToString(),
                        Plan = plan,
                        ProviderId = provisionRequest.heroku_id,
                        ProvisionStatus = ProvisionStatus.Provisioning,
                        ApiKey = Guid.NewGuid().ToString(),
                        ApiSecretKey = Guid.NewGuid().ToString()
                    };
                // TODO: Provision the resource
                purchase.ProvisionStatus = ProvisionStatus.Provisioned;
                Purchase.Save(db, purchase);

                var output = new
                {
                    id = purchase.UniqueId,
                    config = new
                    {
                        CONFIG_ApiKey = purchase.ApiKey,
                        CONFIG_ApiSecretKey = purchase.ApiSecretKey
                    }
                };
                Emailer.SendEmail("Addon Debug Response", output.ToString());
                return Json(output, JsonRequestBehavior.AllowGet);
            }
            catch(Exception ex)
            {
                Emailer.SendEmail("Addon - Error Provisioning Body", ex.Message);
            }
            return Json("fail", JsonRequestBehavior.AllowGet);
        }
        public ActionResult Create(ProvisioningRequest provisionRequest)
        {
            Plan plan;
            if (!Enum.TryParse<Plan>(provisionRequest.plan, true, out plan))
            {
                throw new ArgumentException(string.Format("Plan \"{0}\" is not a valid plan", provisionRequest.plan));
            }

            var resource = new Resource
            {
                CreatedBy = string.Format("{0};{1}", Request.GetForwardedHostAddress(), User.Identity.Name),
                Id = Guid.NewGuid(),
                Plan = plan,
                ProviderId = provisionRequest.heroku_id,
                ProvisionStatus = ProvisionStatus.Provisioning,
            };

            // TODO: Persist the resource

            // TODO: Provision the resource

            resource.ProvisionStatus = ProvisionStatus.Provisioned;

            // TODO: Persist the status change

            var output = new
            {
                id = resource.Id,
                config = new
                {
                    CONFIG_VAR = "CONFIGURATION_VALUE",
                }
            };

            return Json(output);
        }