Exemple #1
0
        public LicenseResponse Post([FromBody] LicenseRequest request)
        {
            if (request == null)
            {
                throw new BadRequestException("Request body could not be deserialized as a license request.");
            }

            request.Validate();

            _telemetry.TrackEvent("LicenseRequest", new Dictionary <string, string>
            {
                { "KeySessionType", request.SessionType }
            }, new Dictionary <string, double>
            {
                { "RequestedKeyCount", request.KeyIdsAsBase64Url.Length }
            });

            // 404 if a key is missing
            foreach (var requestedKey in request.KeyIds)
            {
                if (!KeyDatabase.Current.Keys.ContainsKey(requestedKey))
                {
                    throw new HttpResponseException(new HttpResponseMessage
                    {
                        StatusCode   = System.Net.HttpStatusCode.NotFound,
                        ReasonPhrase = "Key is not in database: " + requestedKey
                    });
                }
            }

            return(new LicenseResponse
            {
                // Whatever session type was requested shall be in the response.
                SessionType = request.SessionType,

                Keys = request.KeyIds.Select(kid => new ContentKey
                {
                    IdAsBase64Url = ConvertHelpers.ByteArrayToBase64Url(kid.ToBigEndianByteArray()),
                    ValueAsBase64Url = ConvertHelpers.ByteArrayToBase64Url(KeyDatabase.Current.Keys[kid])
                }).ToArray()
            });
        }