예제 #1
0
        protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            const string SAA_UserToken = "SAA-Token";    // Token do Usuário
            const string SAA_APPToken  = "SAA-AppToken"; // Token do Aplicativo ou serviço requerente
            const string SAA_APPGUID   = "SAA-AppGUID";  // Identificação do Aplicativo ou serviço do qual se quer consultar permissões de usuários

            string userToken    = "";
            string SAA_AppToken = "";
            string SAA_AppId    = "";
            Token  token;

            if (request.Headers.Contains(SAA_UserToken) && request.Headers.Contains(SAA_APPGUID) && request.Headers.Contains(SAA_APPToken))
            {
                userToken    = request.Headers.GetValues(SAA_UserToken).First();
                SAA_AppToken = request.Headers.GetValues(SAA_APPToken).First();
                SAA_AppId    = request.Headers.GetValues(SAA_APPGUID).First();

                try
                {
                    tokenManager.ValidarAppGUID(SAA_AppId);

                    tokenManager.ValidarAppToken(SAA_AppToken);

                    tokenManager.ValidarToken(userToken, SAA_AppId);

                    tokenManager.AumentaTempoVidaToken(userToken, SAA_AppId);

                    token = tokenManager.GetToken(userToken);
                }
                catch (Exception e)
                {
                    HttpResponseMessage reply = request.CreateErrorResponse(HttpStatusCode.Forbidden, e.Message);
                    return(Task.FromResult(reply));
                }
            }
            else
            {
                HttpResponseMessage reply = request.CreateErrorResponse(HttpStatusCode.BadRequest, "Faltam parâmetros na chamada");
                return(Task.FromResult(reply));
            }

            // Atribui o Id do funcionário no cabeçalho da request request
            request.Headers.Add("SAA-userId", token.Usuario.Id.ToString());
            request.Headers.Add("SAA-funcionarioId", token.Usuario.IdFuncionario.ToString());
            return(base.SendAsync(request, cancellationToken));
        }