Exemplo n.º 1
0
        public HttpResponseMessage Negotiate([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "1.0/negotiate")]
                                             HttpRequestMessage req)
        {
            req.Headers.TryGetValues(HeaderNames.Authorization, out IEnumerable <string> authorizationEnumerable);
            if (authorizationEnumerable == null)
            {
                return(ResponseBuilderHelper.BuildResponse(HttpStatusCode.Unauthorized));
            }

            var authorizationList = authorizationEnumerable.ToList();

            if (authorizationList.Count == 0)
            {
                return(ResponseBuilderHelper.BuildResponse(HttpStatusCode.Unauthorized));
            }

            var(isValidToken, claims) = _jwtProvider.ValidateToken(authorizationList[0], Settings.AuthorizationKey);
            if (!isValidToken)
            {
                return(ResponseBuilderHelper.BuildResponse(HttpStatusCode.Unauthorized));
            }

            claims.TryGetValue("userID", out var userID);
            if (string.IsNullOrEmpty(userID))
            {
                return(ResponseBuilderHelper.BuildResponse(HttpStatusCode.BadRequest, "Missing parameter: userID"));
            }

            return(ResponseBuilderHelper.BuildResponse(HttpStatusCode.OK, new NegotiateActivityResponse()
            {
                UserID = userID
            }));
        }
        public async Task <HttpResponseMessage> Create(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "1.0/create")]
            HttpRequestMessage req, [DurableClient] IDurableOrchestrationClient starter)
        {
            var(isValidToken, claims) = _jwtProvider.ValidateToken(req.Headers.GetValues(HeaderNames.Authorization).FirstOrDefault(), Settings.AuthorizationKey);
            if (!isValidToken)
            {
                return(new HttpResponseMessage(HttpStatusCode.Unauthorized));
            }

            var(response, requestData) = await ValidateRequestAsync(req);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                return(response);
            }

            var parameters = new OrchestrationActivityParameters()
            {
                AccessToken = req.Headers.GetValues(HeaderNames.Authorization).FirstOrDefault(),
                RequestData = (CreateActivityRequest)requestData,
                Claims      = claims
            };

            string instanceID = await starter.StartNewAsync <string>(nameof(OrchestrationActivity.Orchestration), JsonConvert.SerializeObject(parameters));

            _logger.LogInformation($"Instance ID: '{instanceID}'");

            return(new HttpResponseMessage(HttpStatusCode.OK));
        }