public async Task <BBoxResult> LoginAsync(string user, string password) { _authContext = new AuthContext(user, password, null); if (_flurlClient.Cookies.ContainsKey(CookieName)) { _flurlClient.Cookies.Remove(CookieName); } var authCookie = AuthUtils.GenerateAuthCookie(_authContext); _flurlClient.Cookies.Add(CookieName, new Cookie(CookieName, authCookie)); var bBoxResult = await SendAsync(Actions.Login(user)); if (!bBoxResult.Succeed) { return(bBoxResult); } var parameters = bBoxResult.Reply.Actions.FirstOrDefault()?.Callbacks.FirstOrDefault()?.Parameters; _sessionId = parameters.Id; _authContext.Nonce = parameters.Nonce; return(bBoxResult); }
public async Task <BBoxResult> SendAsync(params Action[] actions) { if (_authContext == null) { _logger.LogInformation($"Connecting to {Uri}"); var bBoxResult = await LoginAsync(); if (bBoxResult.Succeed) { _logger.LogInformation($"Logged in as {User}"); } else { return(bBoxResult); } } var requestIndex = NextRequestIndex(); var requestNonce = GenerateNonce(); var requestAuthKey = AuthUtils.ComputeAuthKey(_authContext, requestIndex, requestNonce); var request = new Request(requestIndex, _sessionId, requestNonce, requestAuthKey); foreach (var action in actions) { request.AddAction(action); } var apiCall = new ApiCall { request = request }; var httpResponseMessage = await _flurlClient.Request("cgi", "json-req").PostUrlEncodedAsync(new { req = JsonConvert.SerializeObject(apiCall, _jsonSerializerSettings) }); var content = await httpResponseMessage.Content.ReadAsStringAsync(); var apiReply = JsonConvert.DeserializeObject <ApiReply>(content); return(new BBoxResult(request, apiReply.Reply)); }