mirror of
https://github.com/wiz0u/WTelegramClient.git
synced 2025-12-06 06:52:01 +01:00
Support for login email registration (still experimental)
This commit is contained in:
parent
11a9ca8631
commit
1ed10d99af
1
FAQ.md
1
FAQ.md
|
|
@ -220,6 +220,7 @@ In particular, it will detect and handle automatically and properly the various
|
||||||
* Login not necessary (when a session is resumed with an already logged-in user)
|
* Login not necessary (when a session is resumed with an already logged-in user)
|
||||||
* Logout required (if you want to change the logged-in user)
|
* Logout required (if you want to change the logged-in user)
|
||||||
* 2FA password required (your Config needs to provide "password")
|
* 2FA password required (your Config needs to provide "password")
|
||||||
|
* Email registration procedure required (your Config needs to provide "email", "email_verification_code")
|
||||||
* Account registration/sign-up required (your Config needs to provide "first_name", "last_name")
|
* Account registration/sign-up required (your Config needs to provide "first_name", "last_name")
|
||||||
* Request to resend the verification code through alternate ways like SMS (if your Config answer an empty "verification_code" initially)
|
* Request to resend the verification code through alternate ways like SMS (if your Config answer an empty "verification_code" initially)
|
||||||
* Transient failures, slowness to respond, wrong code/password, checks for encryption key safety, etc..
|
* Transient failures, slowness to respond, wrong code/password, checks for encryption key safety, etc..
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,8 @@ that will be sent to this user (for example through SMS, Email, or another Teleg
|
||||||
If the verification succeeds but the phone number is unknown to Telegram, the user might be prompted to sign-up
|
If the verification succeeds but the phone number is unknown to Telegram, the user might be prompted to sign-up
|
||||||
*(register their account by accepting the Terms of Service)* and provide their **first_name** and **last_name**.
|
*(register their account by accepting the Terms of Service)* and provide their **first_name** and **last_name**.
|
||||||
If the account already exists and has enabled two-step verification (2FA) a **password** might be required.
|
If the account already exists and has enabled two-step verification (2FA) a **password** might be required.
|
||||||
|
In some case, Telegram may request that you associate an **email** with your account for receiving login verification codes,
|
||||||
|
you may skip this step by leaving **email** empty, otherwise the email address will first receive an **email_verification_code**.
|
||||||
All these login scenarios are handled automatically within the call to `LoginUserIfNeeded`.
|
All these login scenarios are handled automatically within the call to `LoginUserIfNeeded`.
|
||||||
|
|
||||||
After login, you now have access to the **[full range of Telegram Client APIs](https://corefork.telegram.org/methods)**.
|
After login, you now have access to the **[full range of Telegram Client APIs](https://corefork.telegram.org/methods)**.
|
||||||
|
|
@ -149,7 +151,7 @@ See [Examples/Program_ListenUpdates.cs](https://github.com/wiz0u/WTelegramClient
|
||||||
|
|
||||||
An invalid API request can result in a `RpcException` being raised, reflecting the [error code and status text](https://revgram.github.io/errors.html) of the problem.
|
An invalid API request can result in a `RpcException` being raised, reflecting the [error code and status text](https://revgram.github.io/errors.html) of the problem.
|
||||||
|
|
||||||
The other configuration items that you can override include: **session_pathname, session_key, server_address, device_model, system_version, app_version, system_lang_code, lang_pack, lang_code, user_id**
|
The other configuration items that you can override include: **session_pathname, email, email_verification_code, session_key, server_address, device_model, system_version, app_version, system_lang_code, lang_pack, lang_code, user_id**
|
||||||
|
|
||||||
Optional API parameters have a default value of `null` when unset. Passing `null` for a required string/array is the same as *empty* (0-length).
|
Optional API parameters have a default value of `null` when unset. Passing `null` for a required string/array is the same as *empty* (0-length).
|
||||||
Required API parameters/fields can sometimes be set to 0 or `null` when unused (check API documentation or experiment).
|
Required API parameters/fields can sometimes be set to 0 or `null` when unused (check API documentation or experiment).
|
||||||
|
|
|
||||||
|
|
@ -126,7 +126,7 @@ namespace WTelegram
|
||||||
"lang_pack" => "",
|
"lang_pack" => "",
|
||||||
"lang_code" => CultureInfo.CurrentUICulture.TwoLetterISOLanguageName,
|
"lang_code" => CultureInfo.CurrentUICulture.TwoLetterISOLanguageName,
|
||||||
"user_id" => "-1",
|
"user_id" => "-1",
|
||||||
"verification_code" or "password" => AskConfig(what),
|
"verification_code" or "email_verification_code" or "password" => AskConfig(what),
|
||||||
_ => null // api_id api_hash phone_number... it's up to you to reply to these correctly
|
_ => null // api_id api_hash phone_number... it's up to you to reply to these correctly
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -940,10 +940,46 @@ namespace WTelegram
|
||||||
Auth_AuthorizationBase authorization = null;
|
Auth_AuthorizationBase authorization = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (sentCode.type is Auth_SentCodeTypeSetUpEmailRequired setupEmail)
|
||||||
|
{
|
||||||
|
Helpers.Log(3, "A login email is required");
|
||||||
|
var email = _config("email");
|
||||||
|
if (string.IsNullOrEmpty(email))
|
||||||
|
sentCode = await this.Auth_ResendCode(phone_number, sentCode.phone_code_hash);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var purpose = new EmailVerifyPurposeLoginSetup { phone_number = phone_number, phone_code_hash = sentCode.phone_code_hash };
|
||||||
|
if (email is not "Google" and not "Apple")
|
||||||
|
{
|
||||||
|
var sentEmail = await this.Account_SendVerifyEmailCode(purpose, email);
|
||||||
|
Helpers.Log(3, "An email verification code has been sent to " + sentEmail.email_pattern);
|
||||||
|
RaiseUpdate(sentEmail);
|
||||||
|
}
|
||||||
|
Account_EmailVerified verified = null;
|
||||||
|
for (int retry = 1; verified == null; retry++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var code = await ConfigAsync("email_verification_code");
|
||||||
|
if (email is "Google")
|
||||||
|
verified = await this.Account_VerifyEmail(purpose, new EmailVerificationGoogle { token = code });
|
||||||
|
else if (email is "Apple")
|
||||||
|
verified = await this.Account_VerifyEmail(purpose, new EmailVerificationApple { token = code });
|
||||||
|
else
|
||||||
|
verified = await this.Account_VerifyEmail(purpose, new EmailVerificationCode { code = code });
|
||||||
|
}
|
||||||
|
catch (RpcException e) when (e.Code == 400 && e.Message is "CODE_INVALID" or "EMAIL_TOKEN_INVALID")
|
||||||
|
{
|
||||||
|
Helpers.Log(4, "Wrong email verification code!");
|
||||||
|
if (retry == MaxCodePwdAttempts) throw;
|
||||||
|
}
|
||||||
|
if (verified is Account_EmailVerifiedLogin verifiedLogin) // (it should always be)
|
||||||
|
sentCode = verifiedLogin.sent_code;
|
||||||
|
}
|
||||||
|
}
|
||||||
resent:
|
resent:
|
||||||
var timeout = DateTime.UtcNow + TimeSpan.FromSeconds(sentCode.timeout);
|
var timeout = DateTime.UtcNow + TimeSpan.FromSeconds(sentCode.timeout);
|
||||||
RaiseUpdate(sentCode);
|
|
||||||
Helpers.Log(3, $"A verification code has been sent via {sentCode.type.GetType().Name[17..]}");
|
Helpers.Log(3, $"A verification code has been sent via {sentCode.type.GetType().Name[17..]}");
|
||||||
|
RaiseUpdate(sentCode);
|
||||||
for (int retry = 1; authorization == null; retry++)
|
for (int retry = 1; authorization == null; retry++)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue