/** * @covers ::__toString * @covers ::fromString * @covers ::generateSignature() */ function test_toString() { $type = CAS\Ticket::TYPE_ST; $user = get_user_by('id', $this->factory->user->create()); $service = 'https://test/ÚÑ|Ǻ∂€/'; $ticket = new CAS\Ticket($type, $user, $service); $duplicateTicket = CAS\Ticket::fromString((string) $ticket); $this->assertEquals($ticket->generateSignature(), $duplicateTicket->generateSignature(), "Ticket generated from string has the same signature as original."); }
/** * Validates a ticket, returning a ticket object, or throws an exception. * * Triggers the `cas_server_validation_success` action on ticket validation. * * @param string $ticket Service or proxy ticket. * @param string $service Service URI. * @return CAS\Ticket Valid ticket object associated with request. * * @uses \do_action() * @uses \esc_url_raw() * * @throws \Cassava\Exception\RequestException * @throws \Cassava\Exception\TicketException */ protected function validateRequest($ticket = '', $service = '') { if (empty($ticket)) { throw new RequestException(__('Ticket is required.', 'wp-cas-server')); } if (empty($service)) { throw new RequestException(__('Service is required.', 'wp-cas-server')); } $service = esc_url_raw($service); CAS\Ticket::validateAllowedTypes($ticket, $this->validTicketTypes); $ticket = CAS\Ticket::fromString($ticket); $ticket->markUsed(); if ($ticket->service !== $service) { throw new RequestException(__('Ticket does not match the service provided.', 'wp-cas-server'), RequestException::ERROR_INVALID_SERVICE); } /** * Fires on successful ticket validation. * * @param \Cassava\CAS\Ticket $ticket Valid ticket object. */ \do_action('cas_server_validation_success', $ticket); return $ticket; }