/**
  * @covers WindowsAzure\MediaServices\Templates\TokenRestrictionTemplate::getAlternateVerificationKeys
  * @covers WindowsAzure\MediaServices\Templates\TokenRestrictionTemplate::setAlternateVerificationKeys
  */
 public function testGetSetAlternateVerificationKeys()
 {
     // Setup
     $entity = new TokenRestrictionTemplate();
     $payload = array();
     $payload[] = new SymmetricVerificationKey();
     // Test
     $entity->setAlternateVerificationKeys($payload);
     $result = $entity->getAlternateVerificationKeys();
     // Assert
     $this->assertEquals($payload, $result);
 }
 /**
  * Deserialize a TokenRestrictionTemplate xml into a TokenRestrictionTemplate object.
  *
  * @param string $options Array containing values for object properties
  *
  * @return TokenRestrictionTemplate
  */
 public static function deserialize($template)
 {
     $xml = simplexml_load_string($template);
     $result = new TokenRestrictionTemplate();
     // Validation
     if ($xml->getName() !== 'TokenRestrictionTemplate') {
         throw new \RuntimeException("This is not a TokenRestrictionTemplate, it is a '{$xml->getName()}'");
     }
     if (!isset($xml->Issuer)) {
         throw new \RuntimeException("The TokenRestrictionTemplate must contains an 'Issuer' element");
     }
     if (!isset($xml->Audience)) {
         throw new \RuntimeException("The TokenRestrictionTemplate must contains an 'Audience' element");
     }
     if (!isset($xml->PrimaryVerificationKey) && !isset($xml->OpenIdConnectDiscoveryDocument)) {
         throw new \RuntimeException("Both PrimaryVerificationKey and OpenIdConnectDiscoveryDocument are undefined");
     }
     // decoding
     if (isset($xml->AlternateVerificationKeys)) {
         $result->setAlternateVerificationKeys(TokenRestrictionTemplateSerializer::deserializeAlternateVerificationKeys($xml->AlternateVerificationKeys));
     }
     $result->setAudience((string) $xml->Audience);
     $result->setIssuer((string) $xml->Issuer);
     if (isset($xml->PrimaryVerificationKey)) {
         $result->setPrimaryVerificationKey(TokenRestrictionTemplateSerializer::deserializeTokenVerificationKey($xml->PrimaryVerificationKey));
     }
     if (isset($xml->RequiredClaims)) {
         $result->setRequiredClaims(TokenRestrictionTemplateSerializer::deserializeRequiredClaims($xml->RequiredClaims));
     }
     if (isset($xml->TokenType)) {
         $result->setTokenType((string) $xml->TokenType);
     }
     if (isset($xml->OpenIdConnectDiscoveryDocument)) {
         $result->setOpenIdConnectDiscoveryDocument(TokenRestrictionTemplateSerializer::deserializeOpenIdConnectDiscoveryDocument($xml->OpenIdConnectDiscoveryDocument));
     }
     return $result;
 }
 public function testCreateContentKeyAuthorizationPolicyOptionForWidevine()
 {
     // Setup Token
     $widevine = new WidevineMessage();
     $widevine->allowed_track_types = AllowedTrackTypes::SD_HD;
     $contentKeySpecs = new ContentKeySpecs();
     $contentKeySpecs->required_output_protection = new RequiredOutputProtection();
     $contentKeySpecs->required_output_protection->hdcp = Hdcp::HDCP_NONE;
     $contentKeySpecs->security_level = 1;
     $contentKeySpecs->track_type = 'SD';
     $widevine->content_key_specs = array($contentKeySpecs);
     $policyOverrides = new \stdClass();
     $policyOverrides->can_play = true;
     $policyOverrides->can_persist = true;
     $policyOverrides->can_renew = false;
     $widevine->policy_overrides = $policyOverrides;
     $jsonWidevine = WidevineMessageSerializer::serialize($widevine);
     $template = new TokenRestrictionTemplate(TokenType::SWT);
     $template->setPrimaryVerificationKey(new SymmetricVerificationKey());
     $template->setAlternateVerificationKeys(array(new SymmetricVerificationKey()));
     $template->setAudience('http://sampleaudience/');
     $template->setIssuer('http://sampleissuerurl/');
     $claims = array();
     $claims[] = new TokenClaim(TokenClaim::CONTENT_KEY_ID_CLAIM_TYPE);
     $claims[] = new TokenClaim('Rental', 'true');
     $template->setRequiredClaims($claims);
     $serializedTemplate = TokenRestrictionTemplateSerializer::serialize($template);
     // Setup Options
     $name = TestResources::MEDIA_SERVICES_CONTENT_KEY_AUTHORIZATION_OPTIONS_NAME . $this->createSuffix();
     $restrictionName = TestResources::MEDIA_SERVICES_CONTENT_KEY_AUTHORIZATION_POLICY_RESTRICTION_NAME . $this->createSuffix();
     $restriction = new ContentKeyAuthorizationPolicyRestriction();
     $restriction->setName($restrictionName);
     $restriction->setKeyRestrictionType(ContentKeyRestrictionType::TOKEN_RESTRICTED);
     $restriction->setRequirements($serializedTemplate);
     $restrictions = array($restriction);
     $options = new ContentKeyAuthorizationPolicyOption();
     $options->setName($name);
     $options->setKeyDeliveryType(ContentKeyDeliveryType::WIDEVINE);
     $options->setKeyDeliveryConfiguration($jsonWidevine);
     $options->setRestrictions($restrictions);
     // Test
     $result = $this->createContentKeyAuthorizationPolicyOption($options);
     // Retrieve the CKAPO again.
     $result = $this->restProxy->getContentKeyAuthorizationPolicyOption($result->getId());
     // Assert Options
     $this->assertEquals($options->getName(), $result->getName());
     $this->assertEquals($options->getKeyDeliveryType(), $result->getKeyDeliveryType());
     $this->assertJsonStringEqualsJsonString($jsonWidevine, $result->getKeyDeliveryConfiguration());
     $actualWidevine = WidevineMessageSerializer::deserialize($result->getKeyDeliveryConfiguration());
     $this->assertEqualsWidevineMessage($widevine, $actualWidevine);
     return $result->getId();
 }
 /**
  * @covers \WindowsAzure\MediaServices\Templates\TokenRestrictionTemplateSerializer::serialize
  * @covers \WindowsAzure\MediaServices\Templates\TokenRestrictionTemplateSerializer::deserialize
  */
 public function testRoundTripTest()
 {
     $template = new TokenRestrictionTemplate(TokenType::SWT);
     $template->setPrimaryVerificationKey(new SymmetricVerificationKey());
     $template->setAlternateVerificationKeys(array(new SymmetricVerificationKey()));
     $template->setAudience('http://sampleaudience/');
     $template->setIssuer('http://sampleissuerurl/');
     $claims = array();
     $claims[] = new TokenClaim(TokenClaim::CONTENT_KEY_ID_CLAIM_TYPE);
     $claims[] = new TokenClaim('Rental', 'true');
     $template->setRequiredClaims($claims);
     $serializedTemplate = TokenRestrictionTemplateSerializer::serialize($template);
     $template2 = TokenRestrictionTemplateSerializer::deserialize($serializedTemplate);
     self::assertEqualsTokenRestrictionTemplate($this, $template, $template2);
 }