diff --git a/Annotation/ApiDoc.php b/Annotation/ApiDoc.php index aac6f38..ccecc15 100644 --- a/Annotation/ApiDoc.php +++ b/Annotation/ApiDoc.php @@ -93,6 +93,11 @@ class ApiDoc */ private $https = false; + /** + * @var boolean + */ + private $authentication = false; + /** * @var array */ @@ -128,6 +133,10 @@ class ApiDoc if (isset($data['statusCodes'])) { $this->statusCodes = $data['statusCodes']; } + + if (isset($data['authentication'])) { + $this->setAuthentication((bool) $data['authentication']); + } } /** @@ -265,6 +274,22 @@ class ApiDoc $this->https = $https; } + /** + * @return boolean + */ + public function getAuthentication() + { + return $this->authentication; + } + + /** + * @param boolean $secured + */ + public function setAuthentication($authentication) + { + $this->authentication = $authentication; + } + /** * @return array */ @@ -304,6 +329,7 @@ class ApiDoc } $data['https'] = $this->https; + $data['authentication'] = $this->authentication; return $data; } diff --git a/Resources/public/css/screen.css b/Resources/public/css/screen.css index 47843ca..fcf1848 100644 --- a/Resources/public/css/screen.css +++ b/Resources/public/css/screen.css @@ -538,7 +538,7 @@ form .request-content { margin-bottom: 10px; } -.padlock { +.icon { height: 12px; margin-left: 3px; } \ No newline at end of file diff --git a/Resources/public/image/man.png b/Resources/public/image/man.png new file mode 100644 index 0000000..567fb41 Binary files /dev/null and b/Resources/public/image/man.png differ diff --git a/Resources/views/method.html.twig b/Resources/views/method.html.twig index e623f13..0721d87 100644 --- a/Resources/views/method.html.twig +++ b/Resources/views/method.html.twig @@ -6,7 +6,10 @@ {% if data.https %} - + HTTPS + {% endif %} + {% if data.authentication %} + Needs authentication {% endif %} diff --git a/Tests/Annotation/ApiDocTest.php b/Tests/Annotation/ApiDocTest.php index c03b280..b5c6007 100644 --- a/Tests/Annotation/ApiDocTest.php +++ b/Tests/Annotation/ApiDocTest.php @@ -28,6 +28,7 @@ class ApiDocTest extends TestCase $this->assertFalse($annot->isResource()); $this->assertFalse(isset($array['description'])); $this->assertNull($annot->getInput()); + $this->assertFalse($array['authentication']); } public function testConstructWithInvalidData() @@ -193,4 +194,16 @@ class ApiDocTest extends TestCase $this->assertEquals($array['statusCodes'][$code], $message); } } + + public function testConstructWithAuthentication() + { + $data = array( + 'authentication' => true + ); + + $annot = new ApiDoc($data); + $array = $annot->toArray(); + + $this->assertTrue($array['authentication']); + } } diff --git a/Tests/Extractor/ApiDocExtratorTest.php b/Tests/Extractor/ApiDocExtratorTest.php index fadd412..261340f 100644 --- a/Tests/Extractor/ApiDocExtratorTest.php +++ b/Tests/Extractor/ApiDocExtratorTest.php @@ -152,4 +152,16 @@ class ApiDocExtractorTest extends WebTestCase $annotation->getDescription() ); } + + public function testGetWithAuthentication() + { + $container = $this->getContainer(); + $extractor = $container->get('nelmio_api_doc.extractor.api_doc_extractor'); + $annotation = $extractor->get('Nelmio\ApiDocBundle\Tests\Fixtures\Controller\TestController::AuthenticatedAction', 'test_route_13'); + + $this->assertNotNull($annotation); + $this->assertTrue( + $annotation->getAuthentication() + ); + } } diff --git a/Tests/Fixtures/Controller/TestController.php b/Tests/Fixtures/Controller/TestController.php index 38d7fe1..714a7e6 100644 --- a/Tests/Fixtures/Controller/TestController.php +++ b/Tests/Fixtures/Controller/TestController.php @@ -127,4 +127,12 @@ class TestController { } + /** + * @ApiDoc( + * authentication=true + * ) + */ + public function authenticatedAction() + { + } } diff --git a/Tests/Fixtures/app/config/routing.yml b/Tests/Fixtures/app/config/routing.yml index d72aaa6..d128ce0 100644 --- a/Tests/Fixtures/app/config/routing.yml +++ b/Tests/Fixtures/app/config/routing.yml @@ -64,6 +64,10 @@ test_route_12: requirements: _scheme: https +test_route_13: + pattern: /authenticated + defaults: { _controller: NelmioApiDocTestBundle:Test:authenticated } + test_service_route_1: pattern: /tests.{_format} defaults: { _controller: nemlio.test.controller:indexAction, _format: json } diff --git a/Tests/Formatter/SimpleFormatterTest.php b/Tests/Formatter/SimpleFormatterTest.php index 060f779..be00e0b 100644 --- a/Tests/Formatter/SimpleFormatterTest.php +++ b/Tests/Formatter/SimpleFormatterTest.php @@ -385,6 +385,7 @@ With multiple lines.', '_format' => array('dataType' => '', 'description' => '', 'requirement' => ''), ), 'https' => false, + 'authentication' => false, ); $this->assertEquals($expected, $result);