Пример #1
0
    private void SignInUser(string email, string password)
    {
        string userData = "{\"email\":\"" + email + "\",\"password\":\"" + password + "\",\"returnSecureToken\":true}";

        RestClient.Post <SignResponse>("https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=" + AuthKey, userData).Then(
            response =>
        {
            string emailVerification = "{\"idToken\":\"" + response.idToken + "\"}";
            RestClient.Post(
                "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo?key=" + AuthKey,
                emailVerification).Then(
                emailResponse =>
            {
                fsData emailVerificationData = fsJsonParser.Parse(emailResponse.Text);
                EmailConfirmationInfo emailConfirmationInfo = new EmailConfirmationInfo();
                serializer.TryDeserialize(emailVerificationData, ref emailConfirmationInfo).AssertSuccessWithoutWarnings();

                if (emailConfirmationInfo.users[0].emailVerified)
                {
                    idToken = response.idToken;
                    localId = response.localId;
                    GetUsername();
                }
                else
                {
                    Debug.Log("You are stupid, you need to verify your email dumb");
                }
            });
        }).Catch(error =>
        {
            Debug.Log(error);
        });
    }
        public static async Task Activity_SaveEmailConfirmationResult(
            [ActivityTrigger] EmailConfirmationInfo confirmationInfo,
            [Table("EmailConfirmations")] CloudTable orderTable,
            ILogger log)
        {
            TableOperation operation = TableOperation.Retrieve <EmailConfirmationTableEntity>(
                EmailConfirmationTableEntity.PartitionKeyValue, confirmationInfo.Id.ToString());

            TableResult result = await orderTable.ExecuteAsync(operation);

            var tableEntity = result.Result as EmailConfirmationTableEntity;

            if (tableEntity is null)
            {
                throw new NullReferenceException($"Missing email confirmation record.");
            }

            tableEntity.Result = confirmationInfo.Result;

            operation = TableOperation.Replace(tableEntity);

            _ = await orderTable.ExecuteAsync(operation);

            log.LogInformation($"Result is saved with value: '{confirmationInfo.Result}'.");
        }
        public static async Task <EmailConfirmationInfo> Orchestrator_SendEmailConfirmation(
            [OrchestrationTrigger] IDurableOrchestrationContext context,
            ILogger log)
        {
            if (!context.IsReplaying)
            {
                log.LogInformation("SendEmailConfirmation orchestration started.");
            }

            EmailConfirmationInput input = context.GetInput <EmailConfirmationInput>();

            var confirmationInfo = new EmailConfirmationInfo
            {
                Id              = context.NewGuid(),
                RequestUri      = input.RequestUri,
                Email           = input.Email,
                OrchestrationId = context.InstanceId,
                Result          = "Sent"
            };

            await context.CallActivityAsync(nameof(Activity_SendEmailConfirmation), confirmationInfo);

            using (var cts = new CancellationTokenSource())
            {
                DateTime timeoutAt   = context.CurrentUtcDateTime.AddSeconds(30);
                Task     timeoutTask = context.CreateTimer(timeoutAt, cts.Token);

                Task <string> confirmResultTask = context.WaitForExternalEvent <string>(_eventName);

                if (!context.IsReplaying)
                {
                    context.SetCustomStatus($"Waiting for human interaction or timeout at: {timeoutAt.ToString("hh:mm:ss")} UTC.");
                }

                Task winnerTask = await Task.WhenAny(confirmResultTask, timeoutTask);

                if (winnerTask == confirmResultTask)
                {
                    cts.Cancel();
                    confirmationInfo.Result = confirmResultTask.Result;
                }
                else
                {
                    confirmationInfo.Result = "Timed Out";
                }
            }

            await context.CallActivityAsync(nameof(Activity_SaveEmailConfirmationResult), confirmationInfo);

            return(confirmationInfo);
        }
        public static void Activity_SendEmailConfirmation(
            [ActivityTrigger] EmailConfirmationInfo confirmationInfo,
            [Table("EmailConfirmations")] out EmailConfirmationTableEntity tableEntity,
            ILogger log)
        {
            tableEntity = new EmailConfirmationTableEntity(confirmationInfo);

            UriBuilder uriBuilder = new UriBuilder
            {
                Scheme = confirmationInfo.RequestUri.Scheme,
                Host   = confirmationInfo.RequestUri.Host,
                Port   = confirmationInfo.RequestUri.Port,
                Path   = $"api/{nameof(ConfirmEmail)}/{confirmationInfo.Id}",
                Query  = "result=Approved"
            };

            log.LogInformation($"Confirm email with the URL: '{uriBuilder}'.");
        }