Exemple #1
0
        public IActionResult HandleSkillRequest()
        {
            string body;

            using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
            {
                body = reader.ReadToEnd();
                m_Logger.LogDebug("body: " + body);
            }

            SkillRequest input = JsonConvert.DeserializeObject <SkillRequest>(body);

            string signatureCertChainUrl = Request.Headers["SignatureCertChainUrl"];
            string signature             = Request.Headers["Signature"];

            m_Logger.LogDebug("signatureCertChainUrl: " + signatureCertChainUrl);
            m_Logger.LogDebug("signature: " + signature);

            if (string.IsNullOrEmpty(signatureCertChainUrl) || string.IsNullOrEmpty(signature))
            {
                return(BadRequest());
            }

            m_Logger.LogDebug("HandleSkillRequest: " + input.Session.Application.ApplicationId);

            if (input.Session.Application.ApplicationId != _appid)
            {
                m_Logger.LogDebug("ApplicationId wrong");
                return(BadRequest());
            }

            if (!RequestVerification.VerifyCertificateUrl(new Uri(signatureCertChainUrl)))
            {
                m_Logger.LogDebug("VerifyCertificateUrl: false");
                return(BadRequest());
            }

            var certificate = RequestVerification.GetCertificate(new Uri(signatureCertChainUrl)).Result;

            if (!RequestVerification.VerifyChain(certificate))
            {
                m_Logger.LogDebug("VerifyChain: false");
                return(BadRequest());
            }

            if (!RequestVerification.AssertHashMatch(certificate, signature, body))
            {
                m_Logger.LogDebug("AssertHashMatch: false");
                return(BadRequest());
            }

            if (!RequestVerification.RequestTimestampWithinTolerance(input))
            {
                m_Logger.LogDebug("RequestTimestampWithinTolerance: false");
                return(BadRequest());
            }

            var requestType = input.GetRequestType();

            if (requestType == typeof(IntentRequest))
            {
                m_Logger.LogInformation("requestType IntentRequest");
                var response = HandleIntents(input);
                return(Ok(response));
            }

            if (requestType == typeof(LaunchRequest))
            {
                m_Logger.LogInformation("requestType LaunchRequest");
                return(Ok(BuildResponse(Statics.WelcomeMessage, false)));
            }

            m_Logger.LogWarning("ErrorResponse");
            return(Ok(BuildResponse(Statics.ErrorMessage, true)));
        }