mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-02 15:51:48 +03:00
Refactored authentication config
This commit is contained in:
parent
c03d35bee4
commit
6bc971c50a
@ -86,16 +86,50 @@ class Configuration implements ConfigurationInterface
|
|||||||
->end()
|
->end()
|
||||||
->arrayNode('authentication')
|
->arrayNode('authentication')
|
||||||
->children()
|
->children()
|
||||||
->scalarNode('name')->isRequired()->end()
|
|
||||||
->scalarNode('delivery')
|
->scalarNode('delivery')
|
||||||
->isRequired()
|
->isRequired()
|
||||||
->validate()
|
->validate()
|
||||||
->ifNotInArray(array('query', 'http_basic', 'header'))
|
->ifNotInArray(array('query', 'http', 'header'))
|
||||||
->thenInvalid("Unknown authentication delivery type '%s'.")
|
->thenInvalid("Unknown authentication delivery type '%s'.")
|
||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
|
->scalarNode('name')->isRequired()->end()
|
||||||
|
->enumNode('type')
|
||||||
|
->info('Required if http delivery is selected.')
|
||||||
|
->values(array('basic', 'bearer'))
|
||||||
|
->end()
|
||||||
->booleanNode('custom_endpoint')->defaultFalse()->end()
|
->booleanNode('custom_endpoint')->defaultFalse()->end()
|
||||||
->end()
|
->end()
|
||||||
|
->validate()
|
||||||
|
->ifTrue(function($v) {
|
||||||
|
return 'http' === $v['delivery'] && !$v['type'] ;
|
||||||
|
})
|
||||||
|
->thenInvalid('"type" is required when using http delivery.')
|
||||||
|
->end()
|
||||||
|
# http_basic BC
|
||||||
|
->beforeNormalization()
|
||||||
|
->ifTrue(function ($v) {
|
||||||
|
return 'http_basic' === $v['delivery'];
|
||||||
|
})
|
||||||
|
->then(function ($v) {
|
||||||
|
$v['delivery'] = 'http';
|
||||||
|
$v['type'] = 'basic';
|
||||||
|
|
||||||
|
return $v;
|
||||||
|
})
|
||||||
|
->end()
|
||||||
|
->beforeNormalization()
|
||||||
|
->ifTrue(function ($v) {
|
||||||
|
return 'http' === $v['delivery'];
|
||||||
|
})
|
||||||
|
->then(function ($v) {
|
||||||
|
if ('http' === $v['delivery'] && !isset($v['name'])) {
|
||||||
|
$v['name'] = 'Authorization';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $v;
|
||||||
|
})
|
||||||
|
->end()
|
||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
<xsd:complexType name="authentication">
|
<xsd:complexType name="authentication">
|
||||||
<xsd:attribute name="name" type="xsd:string"/>
|
<xsd:attribute name="name" type="xsd:string"/>
|
||||||
<xsd:attribute name="delivery" type="authentication_delivery_enum"/>
|
<xsd:attribute name="delivery" type="authentication_delivery_enum"/>
|
||||||
|
<xsd:attribute name="type" type="xsd:string"/>
|
||||||
<xsd:attribute name="custom_endpoint" type="xsd:boolean" default="false"/>
|
<xsd:attribute name="custom_endpoint" type="xsd:boolean" default="false"/>
|
||||||
</xsd:complexType>
|
</xsd:complexType>
|
||||||
|
|
||||||
|
@ -307,7 +307,10 @@ configure this sandbox using the following parameters:
|
|||||||
|
|
||||||
name: access_token # access token name or query parameter name or header name
|
name: access_token # access token name or query parameter name or header name
|
||||||
|
|
||||||
delivery: query # `query`, `http_basic`, and `header` are supported
|
delivery: http # `query`, `http`, and `header` are supported
|
||||||
|
|
||||||
|
# Required if http delivery is selected.
|
||||||
|
type: basic # `basic`, `bearer` are supported
|
||||||
|
|
||||||
custom_endpoint: true # default is `false`, if `true`, your user will be able to
|
custom_endpoint: true # default is `false`, if `true`, your user will be able to
|
||||||
# specify its own endpoint
|
# specify its own endpoint
|
||||||
@ -365,6 +368,29 @@ You can specify your own API name:
|
|||||||
nelmio_api_doc:
|
nelmio_api_doc:
|
||||||
name: My API
|
name: My API
|
||||||
|
|
||||||
|
You can choose between different authentication methods:
|
||||||
|
|
||||||
|
# app/config/config.yml
|
||||||
|
nelmio_api_doc:
|
||||||
|
authentication:
|
||||||
|
delivery: header
|
||||||
|
name: X-Custom
|
||||||
|
|
||||||
|
# app/config/config.yml
|
||||||
|
nelmio_api_doc:
|
||||||
|
authentication:
|
||||||
|
delivery: query
|
||||||
|
name: param
|
||||||
|
|
||||||
|
# app/config/config.yml
|
||||||
|
nelmio_api_doc:
|
||||||
|
authentication:
|
||||||
|
delivery: http
|
||||||
|
type: basic # or bearer
|
||||||
|
|
||||||
|
When choosing an `http` delivery, `name` defaults to `Authorization`,
|
||||||
|
and the header value will automatically be prefixed by the corresponding type (ie. `Basic` or `Bearer`).
|
||||||
|
|
||||||
You can specify which sections to exclude from the documentation generation:
|
You can specify which sections to exclude from the documentation generation:
|
||||||
|
|
||||||
# app/config/config.yml
|
# app/config/config.yml
|
||||||
@ -440,5 +466,6 @@ nelmio_api_doc:
|
|||||||
authentication:
|
authentication:
|
||||||
name: ~ # Required
|
name: ~ # Required
|
||||||
delivery: ~ # Required
|
delivery: ~ # Required
|
||||||
|
type: ~
|
||||||
custom_endpoint: false
|
custom_endpoint: false
|
||||||
```
|
```
|
||||||
|
@ -30,15 +30,18 @@
|
|||||||
<option value="{{ header }}"{{ defaultRequestFormat == format ? ' selected' : '' }}>{{ format }}</option>
|
<option value="{{ header }}"{{ defaultRequestFormat == format ? ' selected' : '' }}>{{ format }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
{% if authentication and authentication.delivery in ['query', 'http_basic', 'header'] %}
|
{% if authentication %}
|
||||||
|
{% if authentication.delivery == 'http' and authentication.type == 'basic' %}
|
||||||
|
api login: <input type="text" id="api_login" value=""/>
|
||||||
|
api password: <input type="text" id="api_pass" value=""/>
|
||||||
|
{% elseif authentication.delivery in ['query', 'http', 'header'] %}
|
||||||
api key: <input type="text" id="api_key" value=""/>
|
api key: <input type="text" id="api_key" value=""/>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if authentication and authentication.delivery in ['http_basic'] %}
|
|
||||||
api pass: <input type="text" id="api_pass" value=""/>
|
{% if authentication.custom_endpoint %}
|
||||||
{% endif %}
|
|
||||||
{% if authentication and authentication.custom_endpoint %}
|
|
||||||
api endpoint: <input type="text" id="api_endpoint" value=""/>
|
api endpoint: <input type="text" id="api_endpoint" value=""/>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<br style="clear: both;" />
|
<br style="clear: both;" />
|
||||||
@ -419,10 +422,20 @@
|
|||||||
headers: headers,
|
headers: headers,
|
||||||
crossDomain: true,
|
crossDomain: true,
|
||||||
beforeSend: function (xhr) {
|
beforeSend: function (xhr) {
|
||||||
if (authentication_delivery == 'http_basic') {
|
if (authentication_delivery) {
|
||||||
xhr.setRequestHeader('Authorization', 'Basic ' + btoa($('#api_key').val() + ':' + $('#api_pass').val()));
|
var value;
|
||||||
}else if(authentication_delivery == 'header') {
|
|
||||||
xhr.setRequestHeader(api_key_parameter, $('#api_key').val());
|
if ('http' == authentication_delivery) {
|
||||||
|
if ('basic' == authentication_type) {
|
||||||
|
value = 'Basic ' + btoa($('#api_login').val() + ':' + $('#api_pass').val());
|
||||||
|
} else if ('bearer' == authentication_type) {
|
||||||
|
value = 'Bearer ' + $('#api_key').val();
|
||||||
|
}
|
||||||
|
} else if ('header' == authentication_delivery) {
|
||||||
|
value = $('#api_key').val();
|
||||||
|
}
|
||||||
|
|
||||||
|
xhr.setRequestHeader(api_key_parameter, value);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
complete: function(xhr) {
|
complete: function(xhr) {
|
||||||
@ -547,8 +560,10 @@
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
{% if authentication and authentication.delivery == 'http_basic' %}
|
{% if authentication and authentication.delivery == 'http' %}
|
||||||
var authentication_delivery = '{{ authentication.delivery }}';
|
var authentication_delivery = '{{ authentication.delivery }}';
|
||||||
|
var api_key_parameter = '{{ authentication.name }}';
|
||||||
|
var authentication_type = '{{ authentication.type }}';
|
||||||
{% elseif authentication and authentication.delivery == 'query' %}
|
{% elseif authentication and authentication.delivery == 'query' %}
|
||||||
var authentication_delivery = '{{ authentication.delivery }}';
|
var authentication_delivery = '{{ authentication.delivery }}';
|
||||||
var api_key_parameter = '{{ authentication.name }}';
|
var api_key_parameter = '{{ authentication.name }}';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user