public async Task <IInputFile> UploadFile(string name, StreamReader reader) { const long TenMb = 10 * 1024 * 1024; var isBigFileUpload = reader.BaseStream.Length >= TenMb; var file = await GetFile(reader).ConfigureAwait(false); var fileParts = GetFileParts(file); var partNumber = 0; var partsCount = fileParts.Count; var fileId = BitConverter.ToInt64(TlHelpers.GenerateRandomBytes(8), 0); while (fileParts.Count != 0) { var part = fileParts.Dequeue(); if (isBigFileUpload) { await SenderService.SendRequestAsync( new RequestSaveBigFilePart { FileId = fileId, FilePart = partNumber, Bytes = part, FileTotalParts = partsCount }).ConfigureAwait(false); } else { await SenderService.SendRequestAsync( new RequestSaveFilePart { FileId = fileId, FilePart = partNumber, Bytes = part }).ConfigureAwait(false); } partNumber++; } if (isBigFileUpload) { return(new TInputFileBig { Id = fileId, Name = name, Parts = partsCount }); } return(new TInputFile { Id = fileId, Name = name, Parts = partsCount, Md5Checksum = GetFileHash(file) }); }
public async Task <IFile> GetFile(IInputFileLocation location, int offset = 0) { int filePartSize; if (location is TInputDocumentFileLocation) { filePartSize = DownloadDocumentPartSize; } else { filePartSize = DownloadPhotoPartSize; } try { return(await SenderService.SendRequestAsync( new RequestGetFile { Location = location, Limit = filePartSize, Offset = offset }).ConfigureAwait(false)); } catch (FileMigrationException ex) { var exportedAuth = (TExportedAuthorization)await SenderService.SendRequestAsync( new RequestExportAuthorization { DcId = ex.Dc }).ConfigureAwait(false); var authKey = ClientSettings.Session.AuthKey; var timeOffset = ClientSettings.Session.TimeOffset; var serverAddress = ClientSettings.Session.ServerAddress; var serverPort = ClientSettings.Session.Port; await ConnectApiService.ReconnectToDcAsync(ex.Dc).ConfigureAwait(false); await SenderService.SendRequestAsync( new RequestImportAuthorization { Bytes = exportedAuth.Bytes, Id = exportedAuth.Id }).ConfigureAwait(false); var result = await GetFile(location, offset).ConfigureAwait(false); ClientSettings.Session.AuthKey = authKey; ClientSettings.Session.TimeOffset = timeOffset; ClientSettings.Session.ServerAddress = serverAddress; ClientSettings.Session.Port = serverPort; await ConnectApiService.ConnectAsync().ConfigureAwait(false); return(result); } }
public async Task <ICheckedPhone> IsPhoneRegisteredAsync(string phoneNumber) { Guard.That(phoneNumber, nameof(phoneNumber)).IsNotNullOrWhiteSpace(); var authCheckPhoneRequest = new RequestCheckPhone { PhoneNumber = phoneNumber }; return(await SenderService.SendRequestAsync(authCheckPhoneRequest).ConfigureAwait(false)); }
public async Task <ISentCode> SendCodeRequestAsync(string phoneNumber) { Guard.That(phoneNumber, nameof(phoneNumber)).IsNotNullOrWhiteSpace(); var request = new RequestSendCode { PhoneNumber = phoneNumber, ApiId = ClientSettings.AppId, ApiHash = ClientSettings.AppHash }; return(await SenderService.SendRequestAsync(request).ConfigureAwait(false)); }
public async Task <TUser> SignUpAsync(string phoneNumber, string phoneCodeHash, string code, string firstName, string lastName) { var request = new RequestSignUp { PhoneNumber = phoneNumber, PhoneCode = code, PhoneCodeHash = phoneCodeHash, FirstName = firstName, LastName = lastName }; var result = (TAuthorization)await SenderService.SendRequestAsync(request).ConfigureAwait(false); var user = result.User.Cast <TUser>(); OnUserAuthenticated(user); return(user); }
public async Task <TUser> MakeAuthAsync(string phoneNumber, string phoneCodeHash, string code) { Guard.That(phoneNumber, nameof(phoneNumber)).IsNotNullOrWhiteSpace(); Guard.That(phoneCodeHash, nameof(phoneCodeHash)).IsNotNullOrWhiteSpace(); Guard.That(code, nameof(code)).IsNotNullOrWhiteSpace(); var request = new RequestSignIn { PhoneNumber = phoneNumber, PhoneCodeHash = phoneCodeHash, PhoneCode = code }; var result = (TAuthorization)await SenderService.SendRequestAsync(request).ConfigureAwait(false); var user = result.User.Cast <TUser>(); await OnUserAuthenticated(user).ConfigureAwait(false); return(user); }
public async Task <ICheckedPhone> IsPhoneRegisteredAsync(string phoneNumber) { Guard.That(phoneNumber, nameof(phoneNumber)).IsNotNullOrWhiteSpace(); var authCheckPhoneRequest = new RequestCheckPhone { PhoneNumber = phoneNumber }; while (true) { try { return(await SenderService.SendRequestAsync(authCheckPhoneRequest).ConfigureAwait(false)); } catch (PhoneMigrationException e) { await ConnectApiService.ReconnectToDcAsync(e.Dc).ConfigureAwait(false); } } }
public async Task <TUser> MakeAuthWithPasswordAsync(TPassword password, string passwordStr) { var passwordBytes = Encoding.UTF8.GetBytes(passwordStr); var rv = password.CurrentSalt.Concat(passwordBytes).Concat(password.CurrentSalt); byte[] passwordHash; using (var sha = SHA256.Create()) { passwordHash = sha.ComputeHash(rv.ToArray()); } var request = new RequestCheckPassword { PasswordHash = passwordHash }; var result = (TAuthorization)await SenderService.SendRequestAsync(request).ConfigureAwait(false); var user = result.User.As <TUser>(); await OnUserAuthenticated(user).ConfigureAwait(false); return(user); }
public async Task <ISentCode> SendCodeRequestAsync(string phoneNumber) { Guard.That(phoneNumber, nameof(phoneNumber)).IsNotNullOrWhiteSpace(); var request = new RequestSendCode { PhoneNumber = phoneNumber, ApiId = ClientSettings.AppId, ApiHash = ClientSettings.AppHash }; while (true) { try { return(await SenderService.SendRequestAsync(request).ConfigureAwait(false)); } catch (PhoneMigrationException ex) { await ConnectApiService.ReconnectToDcAsync(ex.Dc).ConfigureAwait(false); } } }
public async Task <IPassword> GetPasswordSetting() { return(await SenderService.SendRequestAsync(new RequestGetPassword()).ConfigureAwait(false)); }
public async Task <IPassword> GetPasswordSetting(CancellationToken cancellationToken = default(CancellationToken)) { return(await SenderService.SendRequestAsync(new RequestGetPassword(), cancellationToken).ConfigureAwait(false)); }