예제 #1
0
 public void ValidFilters()
 {
     Assert.IsTrue(Affiliate.IsValidFilter("stackoverflow.com"));
     Assert.IsTrue(Affiliate.IsValidFilter("meta.stackoverflow.com"));
     Assert.IsTrue(Affiliate.IsValidFilter("*.stackoverflow.com"));
     Assert.IsTrue(Affiliate.IsValidFilter("meta.*.stackexchange.com"));
 }
예제 #2
0
 public void InvalidFilters()
 {
     Assert.IsFalse(Affiliate.IsValidFilter("stackoverflow.*.com"));
     Assert.IsFalse(Affiliate.IsValidFilter("*"));
     Assert.IsFalse(Affiliate.IsValidFilter(".stackoverflow.com"));
     Assert.IsFalse(Affiliate.IsValidFilter("hello world"));
     Assert.IsFalse(Affiliate.IsValidFilter("stackoverflow.*"));
 }
예제 #3
0
        public ActionResult CreateAffiliate(string filter)
        {
            if (!Affiliate.IsValidFilter(filter))
            {
                return(RecoverableError("Invalid host filter", new { filter }));
            }

            var c   = new RSACryptoServiceProvider();
            var key = c.ExportParameters(true);

            // meeeh... it would be nice if there were a way to *fix* the exponent.  May just need to store it...
            for (int i = 0; i < key.Exponent.Length; i++)
            {
                if (key.Exponent[i] != Affiliate.FixedExponent[i])
                {
                    throw new Exception("Exponent not as expected!");
                }
            }

            var modulus = Convert.ToBase64String(key.Modulus);

            var now = Current.Now;

            var newAffiliate = new Affiliate
            {
                CreationDate        = now,
                HostFilter          = filter,
                OwnerUserId         = Current.LoggedInUser.Id,
                VerificationModulus = modulus
            };

            Current.LoggedInUser.LastActivityDate = now;

            Current.WriteDB.Affiliates.InsertOnSubmit(newAffiliate);
            Current.WriteDB.SubmitChanges();

            // This is your key, don't lose it!
            var jsonKey =
                Json(
                    new
            {
                D        = Convert.ToBase64String(key.D),
                DP       = Convert.ToBase64String(key.DP),
                DQ       = Convert.ToBase64String(key.DQ),
                InverseQ = Convert.ToBase64String(key.InverseQ),
                Modulus  = Convert.ToBase64String(key.Modulus),
                P        = Convert.ToBase64String(key.P),
                Q        = Convert.ToBase64String(key.Q)
            });


            var success =
                Current.Email.SendEmail(
                    Current.LoggedInUser.Email,
                    Email.Template.AffiliateRegistered,
                    new
            {
                D        = Convert.ToBase64String(key.D),
                DP       = Convert.ToBase64String(key.DP),
                DQ       = Convert.ToBase64String(key.DQ),
                InverseQ = Convert.ToBase64String(key.InverseQ),
                Modulus  = Convert.ToBase64String(key.Modulus),
                P        = Convert.ToBase64String(key.P),
                Q        = Convert.ToBase64String(key.Q),
                Id       = newAffiliate.Id,
                Host     = newAffiliate.HostFilter
            });

            if (!success)
            {
                return(IrrecoverableError("An error occurred sending the email", "This has been recorded, and will be looked into shortly"));
            }

            return(jsonKey);
        }