/// <summary>
        /// Inicializa una nueva instancia de la clase <see cref="AspenRequest" />.
        /// </summary>
        /// <param name="appScope">Alcance de la aplicación solicitante.</param>
        /// <param name="url">URL del recurso solicitado.</param>
        /// <param name="method">Método o verbo HTTP para invocar el recurso.</param>
        /// <param name="deviceInfo">Información del dispositivo que envía la petición.</param>
        private AspenRequest(AppScope appScope, string url, Method method, IDeviceInfo deviceInfo) :
            base($"{(appScope == AppScope.Autonomous ? Routes.AutonomousRoot : Routes.DelegatedRoot)}{url}", method, DataFormat.Json)
        {
            Throw.IfNullOrEmpty(url, nameof(url));

            const string ContentType = "application/json; charset=utf-8";

            this.AddHeader("Accept", "application/json");
            this.AddHeader("Content-Type", ContentType);
            this.Timeout        = 15000;
            this.JsonSerializer = new RestSharp.Serialization.Json.JsonSerializer
            {
                ContentType = ContentType
            };

            if (deviceInfo == null)
            {
                deviceInfo = CacheStore.GetDeviceInfo() ?? new DeviceInfo();
            }

            switch (appScope)
            {
            case AppScope.Delegated:
                this.AddHeader("X-PRO-Request-DeviceInfo", deviceInfo.ToJson());
                CacheStore.SetDeviceInfo(deviceInfo);
                break;

            case AppScope.Autonomous:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(appScope), appScope, null);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Agrega la cabecera con los datos de la carga útil necesarios para autenticar a un usuario en el servicio Aspen.
        /// </summary>
        /// <param name="request">Solicitud a donde se agrega la cabecera.</param>
        /// <param name="jwtEncoder">Instancia del codificador del contenido de la carga útil.</param>
        /// <param name="apiSecret">Secreto de la aplicación que se utiliza para codificar el contenido del carga útil.</param>
        /// <param name="userIdentity">La información que se utiliza para autenticar la solicitud en función de un usuario.</param>
        public void AddSigninPayloadHeader(
            IRestRequest request,
            IJwtEncoder jwtEncoder,
            string apiSecret,
            IUserIdentity userIdentity)
        {
            Throw.IfNull(request, nameof(request));
            Throw.IfNull(jwtEncoder, nameof(jwtEncoder));
            Throw.IfNullOrEmpty(apiSecret, nameof(apiSecret));
            Throw.IfNull(userIdentity, nameof(userIdentity));

            IDeviceInfo deviceInfo = userIdentity.Device ??
                                     CacheStore.Get <DeviceInfo>(CacheKeys.CurrentDevice) ??
                                     DeviceInfo.Current;

            request.AddHeader(ServiceLocator.Instance.RequestHeaderNames.DeviceInfoHeaderName, deviceInfo.ToJson());
            CacheStore.Add(CacheKeys.CurrentDevice, deviceInfo);

            Dictionary <string, object> payload = new Dictionary <string, object>();

            ServiceLocator.Instance.PayloadClaimsManager.AddNonceClaim(payload, ServiceLocator.Instance.NonceGenerator.GetNonce());
            ServiceLocator.Instance.PayloadClaimsManager.AddEpochClaim(payload, ServiceLocator.Instance.EpochGenerator.GetSeconds());
            ServiceLocator.Instance.PayloadClaimsManager.AddDocTypeClaim(payload, userIdentity.DocType);
            ServiceLocator.Instance.PayloadClaimsManager.AddDocNumberClaim(payload, userIdentity.DocNumber);
            ServiceLocator.Instance.PayloadClaimsManager.AddPasswordClaim(payload, userIdentity.Password);
            ServiceLocator.Instance.PayloadClaimsManager.AddDeviceIdClaim(payload, deviceInfo.DeviceId);
            string jwt = jwtEncoder.Encode(payload, apiSecret);

            request.AddHeader(ServiceLocator.Instance.RequestHeaderNames.PayloadHeaderName, jwt);
        }
        /// <summary>
        /// Registra la información de las excepciones que se produzcan por cierres inesperados (AppCrash) de la aplicación.
        /// </summary>
        /// <param name="apiKey">El identificador de la aplicación que generó el error.</param>
        /// <param name="username">El identificador del último usuario que uso la aplicación antes de generarse el error.</param>
        /// <param name="errorReport">La información del reporte de error generado en la aplicación.</param>
        public void SaveAppCrash(string apiKey, string username, string errorReport)
        {
            if (!ServiceLocator.Instance.Runtime.IsDevelopment)
            {
                Throw.IfNullOrEmpty(apiKey, nameof(apiKey));
                Throw.IfNullOrEmpty(errorReport, nameof(errorReport));
                Throw.IfNullOrEmpty(username, nameof(username));
            }

            IRestRequest request = new AspenRequest(
                Scope.Anonymous,
                EndpointMapping.AppCrash,
                contentType: "application/x-www-form-urlencoded");

            request.AddParameter("ErrorReport", errorReport);
            request.AddParameter("Username", username);
            IDeviceInfo deviceInfo = CacheStore.Get <DeviceInfo>(CacheKeys.CurrentDevice) ?? DeviceInfo.Current;

            ServiceLocator.Instance.HeadersManager.AddApiKeyHeader(request, apiKey);
            request.AddHeader(ServiceLocator.Instance.RequestHeaderNames.DeviceInfoHeaderName, deviceInfo.ToJson());
            this.Execute(request);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Agrega la cabecera con los datos de la carga útil necesarios para autenticar a un usuario en el servicio Aspen.
        /// </summary>
        /// <param name="request">Solicitud a donde se agrega la cabecera.</param>
        /// <param name="jwtEncoder">Instancia del codificador del contenido de la carga útil.</param>
        /// <param name="apiSecret">Secreto de la aplicación que se utiliza para codificar el contenido del carga útil.</param>
        /// <param name="userIdentity">La información que se utiliza para autenticar la solicitud en función de un usuario.</param>
        public virtual void AddSigninPayloadHeader(
            IRestRequest request,
            IJwtEncoder jwtEncoder,
            string apiSecret,
            IUserIdentity userIdentity)
        {
            IDeviceInfo deviceInfo = userIdentity.Device ?? DeviceInfo.Current;

            request.AddHeader(ServiceLocator.Instance.RequestHeaderNames.DeviceInfoHeaderName, deviceInfo.ToJson());
            Dictionary <string, object> payload = new Dictionary <string, object>();

            ServiceLocator.Instance.PayloadClaimsManager.AddNonceClaim(payload, ServiceLocator.Instance.NonceGenerator.GetNonce());
            ServiceLocator.Instance.PayloadClaimsManager.AddEpochClaim(payload, ServiceLocator.Instance.EpochGenerator.GetSeconds());
            ServiceLocator.Instance.PayloadClaimsManager.AddDocTypeClaim(payload, userIdentity.DocType);
            ServiceLocator.Instance.PayloadClaimsManager.AddDocNumberClaim(payload, userIdentity.DocNumber);
            ServiceLocator.Instance.PayloadClaimsManager.AddPasswordClaim(payload, userIdentity.Password);
            ServiceLocator.Instance.PayloadClaimsManager.AddDeviceIdClaim(payload, deviceInfo.DeviceId);
            string jwt = jwtEncoder.Encode(payload, apiSecret);

            request.AddHeader(ServiceLocator.Instance.RequestHeaderNames.PayloadHeaderName, jwt);
        }