Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }