From c48109eee3feb0a110ce4e21e0926c9f54275210 Mon Sep 17 00:00:00 2001 From: steavy29 Date: Tue, 6 Sep 2016 18:37:05 +0300 Subject: [PATCH] Added SignUp implementation. --- README.md | 19 ++++++++++++++ TLSharp.Core/TelegramClient.cs | 28 ++++++++++++++++----- TLSharp.Tests/TLSharpTests.cs | 45 ++++++++++++++++++++++++++-------- TLSharp.Tests/app.config | 7 +++--- 4 files changed, 80 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 4be845f..41bfd9b 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,7 @@ All methods except [IsPhoneRegistered](#IsPhoneRegistered) requires to authentic Currently supported methods: - [IsPhoneRegistered - Check if phone is registered in Telegram](#isphoneregistered) - [Authenticate user](#authenticate-user) + - [SignUp user](#signup-user) - [Get Contact by Phone number](#get-contact-by-phone-number) - [Get Contact by Username](#get-contact-by-username) - [Send Message to Contact](#send-message-to-contact) @@ -109,6 +110,24 @@ _Example_: **Returns:** **User**, authenticated User. +####SignUp user +Register new user by phone number, secret code and first/last name. + +_Example_: + +``` + var hash = await client.SendCodeRequest(phoneNumber); + + var code = "1234"; //code that you receive from Telegram + + var user = await client.SignUp(phoneNumber, hash, code, "TLSharp", "User"); +``` +* phoneNumber - **string**, phone number in international format (eg. 791812312323) that is not yet registered in Telegram. +* firstName - **string**, new user first name +* lastName - **string**, new user last name + +**Returns:** **User**, authenticated User. + ####Get Contact By Phone number Get user id by phone number. diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs index 8c71f32..e7f2022 100644 --- a/TLSharp.Core/TelegramClient.cs +++ b/TLSharp.Core/TelegramClient.cs @@ -126,20 +126,36 @@ namespace TLSharp.Core return request._phoneCodeHash; } - public async Task MakeAuth(string phoneNumber, string phoneHash, string code) + public async Task MakeAuth(string phoneNumber, string phoneCodeHash, string code) { - var request = new AuthSignInRequest(phoneNumber, phoneHash, code); + var request = new AuthSignInRequest(phoneNumber, phoneCodeHash, code); await _sender.Send(request); await _sender.Receive(request); - _session.SessionExpires = request.SessionExpires; - _session.User = request.user; - - _session.Save(); + OnUserAuthenticated(request.user, request.SessionExpires); return request.user; } + public async Task SignUp(string phoneNumber, string phoneCodeHash, string code, string firstName, string lastName) + { + var request = new AuthSignUpRequest(phoneNumber, phoneCodeHash, code, firstName, lastName); + await _sender.Send(request); + await _sender.Receive(request); + + OnUserAuthenticated(request.user, request.SessionExpires); + + return request.user; + } + + private void OnUserAuthenticated(User user, int sessionExpiration) + { + _session.User = user; + _session.SessionExpires = sessionExpiration; + + _session.Save(); + } + public async Task UploadFile(string name, byte[] data) { var partSize = 65536; diff --git a/TLSharp.Tests/TLSharpTests.cs b/TLSharp.Tests/TLSharpTests.cs index 50fb819..5131ee7 100644 --- a/TLSharp.Tests/TLSharpTests.cs +++ b/TLSharp.Tests/TLSharpTests.cs @@ -1,5 +1,5 @@ -using System; -using System.Configuration; +using System.Configuration; +using System.Diagnostics; using System.IO; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -17,6 +17,8 @@ namespace TLSharp.Tests private string NumberToAuthenticate { get; set; } + private string NotRegisteredNumberToSignUp { get; set; } + private string UserNameToSendMessage { get; set; } private string NumberToGetUserFull { get; set; } @@ -29,21 +31,25 @@ namespace TLSharp.Tests public void Init() { // Setup your phone numbers in app.config - NumberToAuthenticate = ConfigurationManager.AppSettings["numberToAuthenticate"]; + NumberToAuthenticate = ConfigurationManager.AppSettings[nameof(NumberToAuthenticate)]; if (string.IsNullOrEmpty(NumberToAuthenticate)) - throw new InvalidOperationException("NumberToAuthenticate is null. Specify number in app.config"); + Debug.WriteLine("NumberToAuthenticate not configured in app.config! Some tests may fail."); - NumberToSendMessage = ConfigurationManager.AppSettings["numberToSendMessage"]; + NotRegisteredNumberToSignUp = ConfigurationManager.AppSettings[nameof(NotRegisteredNumberToSignUp)]; + if (string.IsNullOrEmpty(NotRegisteredNumberToSignUp)) + Debug.WriteLine("NotRegisteredNumberToSignUp not configured in app.config! Some tests may fail."); + + NumberToSendMessage = ConfigurationManager.AppSettings[nameof(NumberToSendMessage)]; if (string.IsNullOrEmpty(NumberToSendMessage)) - throw new InvalidOperationException("NumberToSendMessage is null. Specify number in app.config"); + Debug.WriteLine("NumberToSendMessage not configured in app.config! Some tests may fail."); - UserNameToSendMessage = ConfigurationManager.AppSettings["userNameToSendMessage"]; + UserNameToSendMessage = ConfigurationManager.AppSettings[nameof(UserNameToSendMessage)]; if (string.IsNullOrEmpty(UserNameToSendMessage)) - throw new InvalidOperationException("UserNameToSendMessage is null. Specify userName in app.config"); + Debug.WriteLine("UserNameToSendMessage not configured in app.config! Some tests may fail."); - NumberToGetUserFull = ConfigurationManager.AppSettings["numberToGetUserFull"]; + NumberToGetUserFull = ConfigurationManager.AppSettings[nameof(NumberToGetUserFull)]; if (string.IsNullOrEmpty(NumberToGetUserFull)) - throw new InvalidOperationException("NumberToGetUserFull is null. Specify Number in app.config"); + Debug.WriteLine("NumberToGetUserFull not configured in app.config! Some tests may fail."); } @@ -61,6 +67,25 @@ namespace TLSharp.Tests var user = await client.MakeAuth(NumberToAuthenticate, hash, code); Assert.IsNotNull(user); + Assert.IsTrue(client.IsUserAuthorized()); + } + + [TestMethod] + public async Task SignUpNewUser() + { + var store = new FileSessionStore(); + var client = new TelegramClient(store, "session", apiId, apiHash); + await client.Connect(); + + var hash = await client.SendCodeRequest(NotRegisteredNumberToSignUp); + var code = ""; + + var registeredUser = await client.SignUp(NotRegisteredNumberToSignUp, hash, code, "TLSharp", "User"); + Assert.IsNotNull(registeredUser); + Assert.IsTrue(client.IsUserAuthorized()); + + var loggedInUser = await client.MakeAuth(NotRegisteredNumberToSignUp, hash, code); + Assert.IsNotNull(loggedInUser); } [TestMethod] diff --git a/TLSharp.Tests/app.config b/TLSharp.Tests/app.config index 7e3c08a..896eeec 100644 --- a/TLSharp.Tests/app.config +++ b/TLSharp.Tests/app.config @@ -1,9 +1,10 @@  - - - + + + +