195 lines
16 KiB
HTML
195 lines
16 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
|
|
<!-- Licensed under the Apache 2.0 License -->
|
|
<link rel="stylesheet" type="text/css" href="../../_static/fonts/open-sans/stylesheet.css" />
|
|
<!-- Licensed under the SIL Open Font License -->
|
|
<link rel="stylesheet" type="text/css" href="../../_static/fonts/source-serif-pro/source-serif-pro.css" />
|
|
<link rel="stylesheet" type="text/css" href="../../_static/css/bootstrap.min.css" />
|
|
<link rel="stylesheet" type="text/css" href="../../_static/css/bootstrap-theme.min.css" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>http_message_signatures.resolvers — requests-http-signature documentation</title>
|
|
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
|
|
<link rel="stylesheet" type="text/css" href="../../_static/guzzle.css" />
|
|
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
<script src="../../_static/jquery.js"></script>
|
|
<script src="../../_static/underscore.js"></script>
|
|
<script src="../../_static/doctools.js"></script>
|
|
<link rel="index" title="Index" href="../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../search.html" />
|
|
|
|
|
|
|
|
</head><body>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../index.html">requests-http-signature documentation</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">http_message_signatures.resolvers</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="container-wrapper">
|
|
|
|
<div id="mobile-toggle">
|
|
<a href="#"><span class="glyphicon glyphicon-align-justify" aria-hidden="true"></span></a>
|
|
</div>
|
|
<div id="left-column">
|
|
<div class="sphinxsidebar"><a href="
|
|
../../index.html" class="text-logo">requests-http-signature</a>
|
|
<div class="sidebar-block">
|
|
<div class="sidebar-wrapper">
|
|
<div id="main-search">
|
|
<form class="form-inline" action="../../search.html" method="GET" role="form">
|
|
<div class="input-group">
|
|
<input name="q" type="text" class="form-control" placeholder="Search...">
|
|
</div>
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div id="right-column">
|
|
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
<ol class="breadcrumb">
|
|
<li><a href="../../index.html">Docs</a></li>
|
|
|
|
<li><a href="../index.html">Module code</a></li>
|
|
|
|
<li>http_message_signatures.resolvers</li>
|
|
</ol>
|
|
</div>
|
|
|
|
<div class="document clearer body">
|
|
|
|
<h1>Source code for http_message_signatures.resolvers</h1><div class="highlight"><pre>
|
|
<span></span><span class="kn">import</span> <span class="nn">urllib</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">.exceptions</span> <span class="kn">import</span> <span class="n">HTTPMessageSignaturesException</span>
|
|
<span class="kn">from</span> <span class="nn">.structures</span> <span class="kn">import</span> <span class="n">CaseInsensitiveDict</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">HTTPSignatureComponentResolver</span><span class="p">:</span>
|
|
<span class="n">derived_component_names</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"@method"</span><span class="p">,</span>
|
|
<span class="s2">"@target-uri"</span><span class="p">,</span>
|
|
<span class="s2">"@authority"</span><span class="p">,</span>
|
|
<span class="s2">"@scheme"</span><span class="p">,</span>
|
|
<span class="s2">"@request-target"</span><span class="p">,</span>
|
|
<span class="s2">"@path"</span><span class="p">,</span>
|
|
<span class="s2">"@query"</span><span class="p">,</span>
|
|
<span class="s2">"@query-params"</span><span class="p">,</span>
|
|
<span class="s2">"@status"</span><span class="p">,</span>
|
|
<span class="s2">"@request-response"</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="c1"># TODO: describe interface</span>
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">message_type</span> <span class="o">=</span> <span class="s2">"request"</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="s2">"status_code"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">message_type</span> <span class="o">=</span> <span class="s2">"response"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="s2">"method"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">message</span><span class="o">.</span><span class="n">url</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">status_code</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="s2">"status_code"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
|
|
<span class="c1"># TODO: check header key and value transforms are applied per 2.1</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="n">CaseInsensitiveDict</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">component_id</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">component_id</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"@"</span><span class="p">):</span> <span class="c1"># derived component</span>
|
|
<span class="k">if</span> <span class="n">component_id</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">derived_component_names</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">HTTPMessageSignaturesException</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Unknown derived component name "</span><span class="si">{</span><span class="n">component_id</span><span class="si">}</span><span class="s1">"'</span><span class="p">)</span>
|
|
<span class="n">resolver</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"get_"</span> <span class="o">+</span> <span class="n">component_id</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"-"</span><span class="p">,</span> <span class="s2">"_"</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="n">resolver</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="n">component_id</span><span class="p">]</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_method</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_target_uri</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_authority</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">urllib</span><span class="o">.</span><span class="n">parse</span><span class="o">.</span><span class="n">urlsplit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span><span class="o">.</span><span class="n">netloc</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_scheme</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">urllib</span><span class="o">.</span><span class="n">parse</span><span class="o">.</span><span class="n">urlsplit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span><span class="o">.</span><span class="n">scheme</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_request_target</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_path</span><span class="p">()</span> <span class="o">+</span> <span class="s2">"?"</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_query</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_path</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">urllib</span><span class="o">.</span><span class="n">parse</span><span class="o">.</span><span class="n">urlsplit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span><span class="o">.</span><span class="n">path</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_query</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="s2">"?"</span> <span class="o">+</span> <span class="n">urllib</span><span class="o">.</span><span class="n">parse</span><span class="o">.</span><span class="n">urlsplit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span><span class="o">.</span><span class="n">query</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_query_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="c1"># need to parse component id as a structured field</span>
|
|
<span class="c1"># urllib.parse.parse_qs(urllib.parse.urlsplit(request.url).query, keep_blank_values=True)</span>
|
|
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_status</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">message_type</span> <span class="o">!=</span> <span class="s2">"response"</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">HTTPMessageSignaturesException</span><span class="p">(</span><span class="s1">'Unexpected "@status" component in a request signature'</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">status_code</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_request_response</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">HTTPSignatureKeyResolver</span><span class="p">:</span>
|
|
<span class="k">def</span> <span class="nf">resolve_public_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"This method must be implemented by a subclass."</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">resolve_private_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"This method must be implemented by a subclass."</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
<div class="clearfix"></div>
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../index.html">requests-http-signature documentation</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">http_message_signatures.resolvers</a></li>
|
|
</ul>
|
|
</div>
|
|
<script type="text/javascript">
|
|
$("#mobile-toggle a").click(function () {
|
|
$("#left-column").toggle();
|
|
});
|
|
</script>
|
|
<script type="text/javascript" src="../../_static/js/bootstrap.js"></script>
|
|
<div class="footer">
|
|
© Copyright Andrey Kislyuk. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a>.
|
|
</div>
|
|
</body>
|
|
</html> |