Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better support for https #283

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Extractor/ApiDocExtractor.php
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ protected function extractData(ApiDoc $annotation, Route $route, \ReflectionMeth
// requirements
$requirements = array();
foreach ($route->getRequirements() as $name => $value) {
if ('_method' !== $name) {
if ('_method' !== $name && '_scheme' !== $name) {
$requirements[$name] = array(
'requirement' => $value,
'dataType' => '',
Expand Down
160 changes: 82 additions & 78 deletions Resources/views/method.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -193,101 +193,105 @@

{% if enableSandbox %}
<div class="pane sandbox">
<form method="{{ data.method|upper }}" action="{% if data.host is defined %}{{ data.https ? 'https://' : 'http://' }}{{ data.host }}{% endif %}{{ data.uri }}">
<fieldset class="parameters">
<legend>Input</legend>
{% if data.requirements is defined %}
<h4>Requirements</h4>
{% for name, infos in data.requirements %}
<p class="tuple">
<input type="text" class="key" value="{{ name }}" placeholder="Key" />
<span>=</span>
<input type="text" class="value" placeholder="{% if infos.description is defined %}{{ infos.description }}{% else %}Value{% endif %}" {% if infos.default is defined %} value="{{ infos.default }}" {% endif %}/> <span class="remove">-</span>
</p>
{% endfor %}
{% endif %}
{% if data.filters is defined %}
<h4>Filters</h4>
{% for name, infos in data.filters %}
<p class="tuple">
<input type="text" class="key" value="{{ name }}" placeholder="Key" />
<span>=</span>
<input type="text" class="value" placeholder="{% if infos.description is defined %}{{ infos.description }}{% else %}Value{% endif %}" {% if infos.default is defined %} value="{{ infos.default }}" {% endif %}/> <span class="remove">-</span>
</p>
{% endfor %}
{% endif %}
{% if data.parameters is defined %}
<h4>Parameters</h4>
{% for name, infos in data.parameters %}
{% if not infos.readonly %}
{% if app.request.secure != data.https %}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what if the route does not define a scheme requirement, and so can be used for both HTTP and HTTPS ?
It is quite uncommon to have a route forcing you to use HTTP only

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't work if you haven't set the Access-Control-Allow-Origin header.

You just see a response - or maybe not - depending on the browser you use.

Chrome shows

0 error
as response headers and Firefox shows
0 [Exception... ""  nsresult: "0x805e0006 ()"  location: "JS frame :: https://domain.local/docs#get--latest :: .send :: line 592"  data: no]

I anyways can't really differ between routes forced to http, or routes, where both (secure and unsecure connections) are allowed. Therefore I'd rather keep it like that.

Please reload the documentation using the scheme {% if data.https %}HTTPS{% else %}HTTP{% endif %} if you want to use the sandbox.
{% else %}
<form method="{{ data.method|upper }}" action="{% if data.host is defined %}{{ data.https ? 'https://' : 'http://' }}{{ data.host }}{% endif %}{{ data.uri }}">
<fieldset class="parameters">
<legend>Input</legend>
{% if data.requirements is defined %}
<h4>Requirements</h4>
{% for name, infos in data.requirements %}
<p class="tuple">
<input type="text" class="key" value="{{ name }}" placeholder="Key" />
<span>=</span>
<input type="text" class="value" placeholder="{% if infos.description is defined %}{{ infos.description }}{% else %}Value{% endif %}" {% if infos.default is defined %} value="{{ infos.default }}" {% endif %}/> <span class="remove">-</span>
</p>
{% endfor %}
{% endif %}
{% if data.filters is defined %}
<h4>Filters</h4>
{% for name, infos in data.filters %}
<p class="tuple">
<input type="text" class="key" value="{{ name }}" placeholder="Key" />
<span>=</span>
<input type="text" class="value" placeholder="{% if infos.description is defined %}{{ infos.description }}{% else %}Value{% endif %}" {% if infos.default is defined %} value="{{ infos.default }}" {% endif %}/> <span class="remove">-</span>
</p>
{% endfor %}
{% endif %}
{% if data.parameters is defined %}
<h4>Parameters</h4>
{% for name, infos in data.parameters %}
{% if not infos.readonly %}
<p class="tuple">
<input type="text" class="key" value="{{ name }}" placeholder="Key" />
<span>=</span>
<input type="text" class="value" placeholder="{% if infos.dataType %}[{{ infos.dataType }}] {% endif %}{% if infos.format %}{{ infos.format }}{% endif %}{% if infos.description %}{{ infos.description }}{% else %}Value{% endif %}" {% if infos.default is defined %} value="{{ infos.default }}" {% endif %}/> <span class="remove">-</span>
</p>
{% endif %}
{% endfor %}
<button class="add">New parameter</button>
{% endif %}

</fieldset>

<fieldset class="headers">
<legend>Headers</legend>

{% if acceptType %}
<p class="tuple">
<input type="text" class="key" value="{{ name }}" placeholder="Key" />
<input type="text" class="key" value="Accept" />
<span>=</span>
<input type="text" class="value" placeholder="{% if infos.dataType %}[{{ infos.dataType }}] {% endif %}{% if infos.format %}{{ infos.format }}{% endif %}{% if infos.description %}{{ infos.description }}{% else %}Value{% endif %}" {% if infos.default is defined %} value="{{ infos.default }}" {% endif %}/> <span class="remove">-</span>
<input type="text" class="value" value="{{ acceptType }}" /> <span class="remove">-</span>
</p>
{% endif %}
{% endfor %}
<button class="add">New parameter</button>
{% endif %}

</fieldset>

<fieldset class="headers">
<legend>Headers</legend>

{% if acceptType %}
<p class="tuple">
<input type="text" class="key" value="Accept" />
<input type="text" class="key" placeholder="Key" />
<span>=</span>
<input type="text" class="value" value="{{ acceptType }}" /> <span class="remove">-</span>
<input type="text" class="value" placeholder="Value" /> <span class="remove">-</span>
</p>
{% endif %}

<p class="tuple">
<input type="text" class="key" placeholder="Key" />
<span>=</span>
<input type="text" class="value" placeholder="Value" /> <span class="remove">-</span>
</p>
<button class="add">New header</button>
</fieldset>

<button class="add">New header</button>
</fieldset>
<fieldset class="request-content">
<legend>Content</legend>

<fieldset class="request-content">
<legend>Content</legend>
<textarea class="content" placeholder="Content set here will override the parameters that do not match the url"></textarea>

<textarea class="content" placeholder="Content set here will override the parameters that do not match the url"></textarea>

<p class="tuple">
<input type="text" class="key content-type" value="Content-Type" disabled="disabled" />
<span>=</span>
<input type="text" class="value" placeholder="Value" />
<button class="set-content-type">Set header</button> <small>Replaces header if set</small>
</p>
</fieldset>
<p class="tuple">
<input type="text" class="key content-type" value="Content-Type" disabled="disabled" />
<span>=</span>
<input type="text" class="value" placeholder="Value" />
<button class="set-content-type">Set header</button> <small>Replaces header if set</small>
</p>
</fieldset>

<div class="buttons">
<input type="submit" value="Try!" />
</div>
</form>
<div class="buttons">
<input type="submit" value="Try!" />
</div>
</form>

<script type="text/x-tmpl" class="tuple_template">
<p class="tuple">
<input type="text" class="key" placeholder="Key" />
<span>=</span>
<input type="text" class="value" placeholder="Value" /> <span class="remove">-</span>
</p>
</script>
<script type="text/x-tmpl" class="tuple_template">
<p class="tuple">
<input type="text" class="key" placeholder="Key" />
<span>=</span>
<input type="text" class="value" placeholder="Value" /> <span class="remove">-</span>
</p>
</script>

<div class="result">
<h4>Request URL</h4>
<pre class="url"></pre>
<div class="result">
<h4>Request URL</h4>
<pre class="url"></pre>

<h4>Response Headers&nbsp;<small>[<a href="" class="to-expand">Expand</a>]</small></h4>
<pre class="headers to-expand"></pre>
<h4>Response Headers&nbsp;<small>[<a href="" class="to-expand">Expand</a>]</small></h4>
<pre class="headers to-expand"></pre>

<h4>Response Body&nbsp;<small>[<a href="" class="to-raw">Raw</a>]</small></h4>
<pre class="response prettyprint"></pre>
</div>
<h4>Response Body&nbsp;<small>[<a href="" class="to-raw">Raw</a>]</small></h4>
<pre class="response prettyprint"></pre>
</div>
{% endif %}
</div>
{% endif %}
</div>
Expand Down