Merge pull request #123 from fvilpoix/authentication_attribute

adding 'authentication' attribute
This commit is contained in:
William DURAND 2013-03-16 18:22:28 +01:00
commit 43b8f89845
10 changed files with 73 additions and 2 deletions

View File

@ -93,6 +93,11 @@ class ApiDoc
*/
private $https = false;
/**
* @var boolean
*/
private $authentication = false;
/**
* @var array
*/
@ -130,6 +135,10 @@ class ApiDoc
$this->addStatusCode($statusCode, $description);
}
}
if (isset($data['authentication'])) {
$this->setAuthentication((bool) $data['authentication']);
}
}
/**
@ -276,6 +285,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
*/
@ -315,6 +340,7 @@ class ApiDoc
}
$data['https'] = $this->https;
$data['authentication'] = $this->authentication;
return $data;
}

View File

@ -28,6 +28,8 @@ class ApiDocExtractor
const FOS_REST_REQUEST_PARAM_CLASS = 'FOS\\RestBundle\\Controller\\Annotations\\RequestParam';
const JMS_SECURITY_EXTRA_SECURE_CLASS = 'JMS\\SecurityExtraBundle\\Annotation\\Secure';
/**
* @var ContainerInterface
*/
@ -360,6 +362,8 @@ class ApiDocExtractor
'description' => $annot->description,
'readonly' => false
));
} elseif (is_a($annot, self::JMS_SECURITY_EXTRA_SECURE_CLASS)) {
$annotation->setAuthentication(true);
}
}
}

View File

@ -538,7 +538,7 @@ form .request-content {
margin-bottom: 10px;
}
.padlock {
.icon {
height: 12px;
margin-left: 3px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -6,7 +6,10 @@
</span>
{% if data.https %}
<img src="{{ asset('bundles/nelmioapidoc/image/lock.png') }}" class="padlock" />
<img src="{{ asset('bundles/nelmioapidoc/image/lock.png') }}" class="icon" alt="HTTPS" />
{% endif %}
{% if data.authentication %}
<img src="{{ asset('bundles/nelmioapidoc/image/keys.png') }}" class="icon" alt="Needs authentication" />
{% endif %}
<span class="path">

View File

@ -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()
@ -197,4 +198,16 @@ class ApiDocTest extends TestCase
$this->assertEquals($array['statusCodes'][$code], !is_array($message) ? array($message) : $message);
}
}
public function testConstructWithAuthentication()
{
$data = array(
'authentication' => true
);
$annot = new ApiDoc($data);
$array = $annot->toArray();
$this->assertTrue($array['authentication']);
}
}

View File

@ -155,4 +155,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()
);
}
}

View File

@ -127,4 +127,12 @@ class TestController
{
}
/**
* @ApiDoc(
* authentication=true
* )
*/
public function authenticatedAction()
{
}
}

View File

@ -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 }

View File

@ -387,6 +387,7 @@ With multiple lines.',
'_format' => array('dataType' => '', 'description' => '', 'requirement' => ''),
),
'https' => false,
'authentication' => false,
);
$this->assertEquals($expected, $result);