public async Task LoginAsync(string email, string password, RestRequestOptions options = null) { if (HasAuthorization) { throw new InvalidOperationException("Login may only be used from a client without authorization."); } ApiClient.SetTokenType(TokenType.User); string mfaCode = null; if (options != null) { mfaCode = options.MfaCode; options = new RestRequestOptionsBuilder() .WithTimeout(options.Timeout) .WithCancellationToken(options.CancellationToken) .Build(); } if (_lastLoginResponse == null || _lastLoginAt != default && (DateTimeOffset.UtcNow - _lastLoginAt).TotalMinutes > 1) { _lastLoginResponse = await ApiClient.LoginAsync(email, password, options).ConfigureAwait(false); _lastLoginAt = DateTimeOffset.UtcNow; if (_lastLoginResponse.Token != null) { ApiClient.SetToken(_lastLoginResponse.Token); return; } await Task.Delay(5000).ConfigureAwait(false); } await HandleTotpAsync(mfaCode, options).ConfigureAwait(false); }
internal RestRequestOptions(RestRequestOptionsBuilder builder) { Timeout = builder.Timeout; CancellationToken = builder.CancellationToken; Reason = builder.Reason; MaximumRateLimitDuration = builder.MaximumRateLimitDuration; }