public SubscriptionDTO(Subscription subscription, bool emailIncluded) { ApplicationName = subscription.ApplicationName; LogName = subscription.LogName; Description = subscription.Description; Verified = subscription.Verified; VerificationsSent = subscription.VerificationsSent; if (emailIncluded) { // ONLY INCLUDE EMAIL IF SPECIFIED EmailAddress = subscription.EmailAddress; } // DO NOT COPY API KEY }
public SubscriptionDTO(Subscription subscription) : this(subscription, false) { }
private void AddToSubscriberQueue(Subscription subscriber) { // Create the queue message. string queueMessageString = subscriber.ApplicationName + "," + subscriber.LogName; var queueMessage = new CloudQueueMessage(queueMessageString); subscribeQueue.AddMessage(queueMessage); }
public ActionResult Verify(string ApplicationName, string LogName, string APIKey, string action) { Subscription subscriber = null; if (ModelState.IsValid) { subscriber = FindRow(ApplicationName, LogName); if (subscriber == null) { ModelState.AddModelError(string.Empty, "No such subscription exists."); subscriber = new Subscription() { ApplicationName = ApplicationName, LogName = LogName }; return View(subscriber); } if (!subscriber.APIKey.Equals(APIKey, StringComparison.InvariantCulture)) { ModelState.AddModelError(string.Empty, "Invalid ID, Cannot Verify."); return View("Verification", model: null); } if (action.Equals("Confirm", StringComparison.InvariantCultureIgnoreCase)) { subscriber.Verified = true; var replaceOperation = TableOperation.Replace(subscriber); subscribersTable.Execute(replaceOperation); return View("Verification", model: subscriber); } else { subscriber.Verified = null; var deleteOperation = TableOperation.Delete(subscriber); subscribersTable.Execute(deleteOperation); return View("Verification", model: subscriber); } } subscriber = new Subscription() { ApplicationName = ApplicationName, LogName = LogName, APIKey = APIKey }; return View("Verification", model: subscriber); }
public ActionResult Subscribe(Subscription subscriber) { if (ModelState.IsValid) { Subscription prevSubscriber = FindRow(subscriber.ApplicationName, subscriber.LogName); if (prevSubscriber == null) { subscriber.APIKey = Guid.NewGuid().ToString(); subscriber.Verified = false; subscriber.VerificationsSent = 0; var insertOperation = TableOperation.Insert(subscriber); subscribersTable.Execute(insertOperation); AddToSubscriberQueue(subscriber); return View("Confirmation", model:subscriber); } else if (!prevSubscriber.EmailAddress.Equals(subscriber.EmailAddress, StringComparison.InvariantCultureIgnoreCase) || prevSubscriber.Verified == true) { ModelState.AddModelError(string.Empty, "You attempted to subscribe an already subscribed App with that Log Name"); } else { AddToSubscriberQueue(prevSubscriber); return View("Reconfirmation", model: prevSubscriber); } } return View(subscriber); }
private static void SendEmail(Subscription subscriber) { string serviceName = RoleEnvironment.GetConfigurationSettingValue("ServiceName"); var fromAddress = new MailAddress( RoleEnvironment.GetConfigurationSettingValue("ServiceGmailAddress") + "@gmail.com", serviceName ); var toAddress = new MailAddress(subscriber.EmailAddress, subscriber.ApplicationName); string fromPassword = RoleEnvironment.GetConfigurationSettingValue("ServiceGmailPassword"); string subject = String.Format( "Subscribe to {0}", serviceName ); string subscribeURL = RoleEnvironment.GetConfigurationSettingValue("LoggingServiceURL") + "/Subscription/Verify?appName=" + subscriber.ApplicationName + "&logName=" + subscriber.LogName + "&apiKey=" + subscriber.APIKey; string body = String.Format( "<p>Click the link below to subscribe {0}'s Log <code>{1}</code> to {2}. " + "If you don't confirm your subscription, you won't be subscribed to the service.</p>" + "<a href=\"{3}\">Confirm Subscription</a>" + "<p>With each subscription comes an API Key, which functions as a password for all actions involving an application-specific log. " + "Thus for all requests requiring authentication (such as adding a snapshot to the logging service, editing a snapshot, or unsubscribing), this unique key " + "<strong><em>MUST</em></strong> be provided. If you lose this key, there is no way currently for you to recover or reset it." + "<p>Your API Key: <pre>{4}</pre></p>", subscriber.ApplicationName, subscriber.LogName, serviceName, subscribeURL, subscriber.APIKey ); var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, Credentials = new NetworkCredential(fromAddress.Address, fromPassword), Timeout = 20000 }; using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body, IsBodyHtml = true } ) { smtp.Send(message); } }
public HttpResponseMessage Subscribe(Subscription subscriber) { if (ModelState.IsValid) { Subscription prevSubscriber = FindRow(subscriber.ApplicationName, subscriber.LogName); if (prevSubscriber == null) { subscriber.APIKey = Guid.NewGuid().ToString(); subscriber.Verified = false; subscriber.VerificationsSent = 0; var insertOperation = TableOperation.Insert(subscriber); subscribersTable.Execute(insertOperation); AddToSubscriberQueue(subscriber); return Request.CreateResponse( HttpStatusCode.OK, new { Success = true, Message = "Added to Subscriber Queue", Subscription = new SubscriptionDTO(subscriber, true) }, Configuration.Formatters.JsonFormatter ); } else if (!prevSubscriber.EmailAddress.Equals(subscriber.EmailAddress, StringComparison.InvariantCultureIgnoreCase) || prevSubscriber.Verified == true) { return Request.CreateResponse( HttpStatusCode.OK, new { Success = false, Error = "You attempted to subscribe an already subscribed App with that Log Name", Subscription = new SubscriptionDTO(subscriber, true) }, Configuration.Formatters.JsonFormatter ); } else { AddToSubscriberQueue(prevSubscriber); return Request.CreateResponse( HttpStatusCode.Accepted, new { Success = true, Message = "Re-added to subscriber queue", Subscription = new SubscriptionDTO(prevSubscriber, true) }, Configuration.Formatters.JsonFormatter ); } } List<string> errorList = ModelState.Values .SelectMany(m => m.Errors) .Select(e => e.ErrorMessage) .Where(s => !string.IsNullOrWhiteSpace(s)) .ToList(); return Request.CreateResponse( HttpStatusCode.OK, new { Success = false, Errors = errorList, Subscription = new SubscriptionDTO(subscriber, true) }, Configuration.Formatters.JsonFormatter ); }