示例#1
0
        private static async Task <string> GetSignupMail(IMailHost mailHost, string mailAddress)
        {
            var signupMail = await mailHost.GetMegaSignupMail(mailAddress).ConfigureAwait(false);

            var start = signupMail.IndexOf(">https://mega.nz/#confirm", 0, StringComparison.Ordinal);

            if (start < 0)
            {
                return(string.Empty);
            }
            start += 1;
            var end = signupMail.IndexOf("</a>", start, StringComparison.Ordinal);

            if (end < 0)
            {
                return(string.Empty);
            }

            var ignoreWords = new List <string>
            {
                "<br>", "</br>", "<wbr>", "</wbr>", "<br />", "<wbr />"
            };

            var ret   = signupMail.Substring(start, end - start);
            var regex = new Regex(string.Join("|", ignoreWords.Select(s => Regex.Escape(s))));

            return(regex.Replace(ret, string.Empty));
        }
示例#2
0
        private async Task TestSignup(IMailHost host)
        {
            MEGA.Password = "******";
            var account = await MEGA.CreateNewAccount(host);

            if (!string.IsNullOrEmpty(account))
            {
                Trace.WriteLine(account);
            }
            Assert.IsTrue(!string.IsNullOrEmpty(account));
        }
示例#3
0
 private static async Task <string> GetValidationUrl(IMailHost mailHost, string mailAddress)
 {
     return(await Policy
            .Handle <Exception>()
            .OrResult <string>(string.IsNullOrEmpty)
            .WaitAndRetryAsync(6, retryCount => TimeSpan.FromSeconds(20 * retryCount),
                               (exception, timeSpan, context) =>
     {
         Trace.WriteLine(timeSpan.ToString());
     })
            .ExecuteAsync(() => GetSignupMail(mailHost, mailAddress)));
 }
示例#4
0
        public static async Task <string> CreateNewAccount(IMailHost mailHost)
        {
            var mailAddress = await mailHost.GetMailAddress();

            if (string.IsNullOrEmpty(mailAddress))
            {
                return(string.Empty);
            }

            var verifyCommand = await RegisterAccount(mailAddress);

            if (string.IsNullOrEmpty(verifyCommand))
            {
                return(string.Empty);
            }

            var validationUrl = await GetValidationUrl(mailHost, mailAddress);

            return(await VerifyAccount(verifyCommand, validationUrl) ? mailAddress : string.Empty);
        }