Merge pull request #196 from steavy29/signup-impl

Added SignUp implementation.
This commit is contained in:
Ilya Pirozhenko 2016-09-11 14:58:16 +03:00 committed by GitHub
commit d6331c2352
4 changed files with 80 additions and 19 deletions

View file

@ -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.

View file

@ -126,20 +126,36 @@ namespace TLSharp.Core
return request._phoneCodeHash;
}
public async Task<User> MakeAuth(string phoneNumber, string phoneHash, string code)
public async Task<User> 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<User> 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<InputFile> UploadFile(string name, byte[] data)
{
var partSize = 65536;

View file

@ -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]

View file

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="numberToAuthenticate" value="" />
<add key="numberToSendMessage" value=""/>
<add key="userNameToSendMessage" value=""/>
<add key="NumberToAuthenticate" value="" />
<add key="NotRegisteredNumberToSignUp" value=""/>
<add key="NumberToSendMessage" value=""/>
<add key="UserNameToSendMessage" value=""/>
<add key="NumberToGetUserFull" value=""/>
</appSettings>
</configuration>