Пример #1
0
    public async UniTask SignUp()
    {
        if (signUpIdInput.text.IsNullOrEmptyTrimmed())
        {
            Toast.Next(Toast.Status.Failure, "TOAST_ENTER_ID".Get());
            return;
        }
        if (signUpPasswordInput.text.IsNullOrEmptyTrimmed())
        {
            Toast.Next(Toast.Status.Failure, "TOAST_ENTER_PASSWORD".Get());
            return;
        }
        if (signUpEmailInput.text.IsNullOrEmptyTrimmed())
        {
            Toast.Next(Toast.Status.Failure, "TOAST_ENTER_EMAIL_ADDRESS".Get());
            return;
        }

        var id       = signUpIdInput.text = signUpIdInput.text.ToLower(CultureInfo.InvariantCulture).Trim();
        var password = signUpPasswordInput.text;
        var email    = signUpEmailInput.text;

        if (!Regex.IsMatch(id, "^[a-z0-9-_]{3,16}$"))
        {
            Toast.Next(Toast.Status.Failure, "TOAST_INCORRECT_ID_FORMAT".Get());
            return;
        }
        if (password.Length < 9)
        {
            Toast.Next(Toast.Status.Failure, "TOAST_INCORRECT_PASSWORD_FORMAT".Get());
            return;
        }
        if (!IsValidEmail(email))
        {
            Toast.Next(Toast.Status.Failure, "TOAST_INVALID_EMAIL_ADDRESS".Get());
            return;
        }

        if (!await TermsOverlay.Show("TERMS_OF_SERVICE".Get()))
        {
            return;
        }

        var registered = false;
        var failed     = false;

        RestClient.Put(new RequestHelper
        {
            Uri         = Context.ApiUrl + $"/session?captcha={SecuredOperations.GetCaptcha()}",
            Headers     = Context.OnlinePlayer.GetRequestHeaders(),
            EnableDebug = true,
            Body        = new SignUpBody
            {
                uid      = id,
                password = password,
                email    = email
            }
        })
        .Then(_ =>
        {
            registered = true;
        })
        .CatchRequestError(error =>
        {
            failed = true;
            Debug.LogWarning("Sign up failed.");
            Debug.LogWarning(error);

            var errorResponse = JsonConvert.DeserializeObject <SignUpErrorResponse>(error.Response);
            Toast.Next(Toast.Status.Failure, errorResponse.message);
        });

        closeButton.Leave();
        signInButtonParent.Leave();
        await UniTask.WaitUntil(() => registered || failed);

        if (failed)
        {
            closeButton.Enter();
            signInButtonParent.Enter();
            return;
        }

        var completed = false;

        Authenticate(id, password, true).Finally(() =>
        {
            completed                = true;
            signUpIdInput.text       = "";
            signUpPasswordInput.text = "";
            signUpEmailInput.text    = "";
            signInIdInput.text       = id;
            if (!lastAuthenticateSucceeded)
            {
                signInPasswordInput.text = password;
                SwitchToSignIn();
            }
        });

        await UniTask.WaitUntil(() => completed);

        if (State != ScreenState.Active)
        {
            return;
        }
        closeButton.Enter();
        signInButtonParent.Enter();
    }
Пример #2
0
 public async void TermsCopyrightPolicy()
 {
     TermsOverlay.Show("COPYRIGHT_POLICY".Get());
 }
Пример #3
0
    protected override async void LoadPayload(ScreenLoadPromise promise)
    {
        if (Context.Player.ShouldOneShot("Agree Copyright Policy"))
        {
            Context.Player.ClearOneShot("Agree Copyright Policy");
            if (!await TermsOverlay.Show("COPYRIGHT_POLICY".Get()))
            {
                promise.Reject();
                Context.ScreenManager.ChangeScreen(Context.ScreenManager.PopAndPeekHistory(), ScreenTransition.Out,
                                                   addTargetScreenToHistory: false);
                return;
            }
            Context.Player.ShouldOneShot("Agree Copyright Policy");
        }

        SpinnerOverlay.Show();

        var promises = new List <IPromise>();

        foreach (var section in IntentPayload.Layout.Sections)
        {
            switch (section)
            {
            case Layout.LevelSection levelSection:
                promises.Add(RestClient.GetArray <OnlineLevel>(new RequestHelper
                {
                    Uri         = levelSection.Query.BuildUri(levelSection.PreviewSize),
                    Headers     = Context.OnlinePlayer.GetRequestHeaders(),
                    EnableDebug = true
                }).Then(data =>
                {
                    levelSection.Levels = data.ToList();
                }));
                break;

            case Layout.CollectionSection collectionSection:
            {
                var collectionPromises = new List <RSG.IPromise <CollectionMeta> >();
                foreach (var collectionId in collectionSection.CollectionIds)
                {
                    collectionPromises.Add(RestClient.Get <CollectionMeta>(new RequestHelper {
                            Uri         = $"{Context.ApiUrl}/collections/{collectionId}",
                            Headers     = Context.OnlinePlayer.GetRequestHeaders(),
                            EnableDebug = true
                        }));
                }
                promises.Add(Promise <CollectionMeta> .All(collectionPromises).Then(data =>
                    {
                        collectionSection.Collections = data.ToList()
                                                        .Zip(collectionSection.CollectionIds, (meta, id) => meta.Also(it => it.id                = id))
                                                        .Zip(collectionSection.CollectionTitleKeys, (meta, title) => meta.Also(it => it.title    = title.Get()))
                                                        .Zip(collectionSection.CollectionSloganKeys, (meta, slogan) => meta.Also(it => it.slogan = slogan.Get()))
                                                        .ToList();
                    }));
                break;
            }
            }
        }

        Promise.All(promises)
        .Then(() =>
        {
            promise.Resolve(IntentPayload);
        })
        .Catch(error =>
        {
            Dialog.PromptGoBack("DIALOG_COULD_NOT_CONNECT_TO_SERVER".Get());
            Debug.LogError(error);
            promise.Reject();
        })
        .Finally(() => SpinnerOverlay.Hide());
    }
Пример #4
0
 public async void TermsToS()
 {
     TermsOverlay.Show("TERMS_OF_SERVICE".Get());
 }