snipt

Ctrl+h for KB shortcuts

Ruby

Rack::Resctrictor is a middleware that helps you managing access to your applications.

require 'ipaddr'
module Rack
	class Restrictor

		PAGE_CODE = <<-EOCODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
		<head>
			<title> Anauthorized access</title>
		</head>
		<body>
			<h1> Anauthorized access</h1>
		</body>
	</html>
EOCODE

	def initialize(app, plage)
		@app   = app
		@plage = IPAddr.new( plage.to_s )
		p @plage
	end

	def call(env)
		if authorized?( env['REMOTE_ADDR'].to_s )
			status, headers, body = @app.call(env)
		else
			status, headers, body = 
			401, {"Content-Type" => "text/html"}, PAGE_CODE
		end

		[status, headers, body]
	end

	private

	def authorized?( ip )
		@plage.include?(IPAddr.new( ip ))
	end

	end
end
https://snippets.siftie.com/embed/de177ddf863eb9c7b69257258df36eb7/
/raw/de177ddf863eb9c7b69257258df36eb7/
de177ddf863eb9c7b69257258df36eb7
rb
Ruby
42
2019-04-18T20:48:26
True
False
False
/api/public/snipt/22964/
rackresctrictor-is-a-middleware-that-helps-you-managing-access-to-your-applications
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10">10</a> <a href="#L-11">11</a> <a href="#L-12">12</a> <a href="#L-13">13</a> <a href="#L-14">14</a> <a href="#L-15">15</a> <a href="#L-16">16</a> <a href="#L-17">17</a> <a href="#L-18">18</a> <a href="#L-19">19</a> <a href="#L-20">20</a> <a href="#L-21">21</a> <a href="#L-22">22</a> <a href="#L-23">23</a> <a href="#L-24">24</a> <a href="#L-25">25</a> <a href="#L-26">26</a> <a href="#L-27">27</a> <a href="#L-28">28</a> <a href="#L-29">29</a> <a href="#L-30">30</a> <a href="#L-31">31</a> <a href="#L-32">32</a> <a href="#L-33">33</a> <a href="#L-34">34</a> <a href="#L-35">35</a> <a href="#L-36">36</a> <a href="#L-37">37</a> <a href="#L-38">38</a> <a href="#L-39">39</a> <a href="#L-40">40</a> <a href="#L-41">41</a> <a href="#L-42">42</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a><span class="nb">require</span> <span class="s1">&#39;ipaddr&#39;</span> </span><span id="L-2"><a name="L-2"></a><span class="k">module</span> <span class="nn">Rack</span> </span><span id="L-3"><a name="L-3"></a> <span class="k">class</span> <span class="nc">Restrictor</span> </span><span id="L-4"><a name="L-4"></a> </span><span id="L-5"><a name="L-5"></a> <span class="no">PAGE_CODE</span> <span class="o">=</span> <span class="o">&lt;&lt;-</span><span class="no">EOCODE</span> </span><span id="L-6"><a name="L-6"></a><span class="sh">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span> </span><span id="L-7"><a name="L-7"></a><span class="sh"> &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span> </span><span id="L-8"><a name="L-8"></a><span class="sh"> &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;</span> </span><span id="L-9"><a name="L-9"></a><span class="sh"> &lt;head&gt;</span> </span><span id="L-10"><a name="L-10"></a><span class="sh"> &lt;title&gt; Anauthorized access&lt;/title&gt;</span> </span><span id="L-11"><a name="L-11"></a><span class="sh"> &lt;/head&gt;</span> </span><span id="L-12"><a name="L-12"></a><span class="sh"> &lt;body&gt;</span> </span><span id="L-13"><a name="L-13"></a><span class="sh"> &lt;h1&gt; Anauthorized access&lt;/h1&gt;</span> </span><span id="L-14"><a name="L-14"></a><span class="sh"> &lt;/body&gt;</span> </span><span id="L-15"><a name="L-15"></a><span class="sh"> &lt;/html&gt;</span> </span><span id="L-16"><a name="L-16"></a><span class="no">EOCODE</span> </span><span id="L-17"><a name="L-17"></a> </span><span id="L-18"><a name="L-18"></a> <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">app</span><span class="p">,</span> <span class="n">plage</span><span class="p">)</span> </span><span id="L-19"><a name="L-19"></a> <span class="vi">@app</span> <span class="o">=</span> <span class="n">app</span> </span><span id="L-20"><a name="L-20"></a> <span class="vi">@plage</span> <span class="o">=</span> <span class="no">IPAddr</span><span class="o">.</span><span class="n">new</span><span class="p">(</span> <span class="n">plage</span><span class="o">.</span><span class="n">to_s</span> <span class="p">)</span> </span><span id="L-21"><a name="L-21"></a> <span class="nb">p</span> <span class="vi">@plage</span> </span><span id="L-22"><a name="L-22"></a> <span class="k">end</span> </span><span id="L-23"><a name="L-23"></a> </span><span id="L-24"><a name="L-24"></a> <span class="k">def</span> <span class="nf">call</span><span class="p">(</span><span class="n">env</span><span class="p">)</span> </span><span id="L-25"><a name="L-25"></a> <span class="k">if</span> <span class="n">authorized?</span><span class="p">(</span> <span class="n">env</span><span class="o">[</span><span class="s1">&#39;REMOTE_ADDR&#39;</span><span class="o">].</span><span class="n">to_s</span> <span class="p">)</span> </span><span id="L-26"><a name="L-26"></a> <span class="n">status</span><span class="p">,</span> <span class="n">headers</span><span class="p">,</span> <span class="n">body</span> <span class="o">=</span> <span class="vi">@app</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">env</span><span class="p">)</span> </span><span id="L-27"><a name="L-27"></a> <span class="k">else</span> </span><span id="L-28"><a name="L-28"></a> <span class="n">status</span><span class="p">,</span> <span class="n">headers</span><span class="p">,</span> <span class="n">body</span> <span class="o">=</span> </span><span id="L-29"><a name="L-29"></a> <span class="mi">401</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;Content-Type&quot;</span> <span class="o">=&gt;</span> <span class="s2">&quot;text/html&quot;</span><span class="p">},</span> <span class="no">PAGE_CODE</span> </span><span id="L-30"><a name="L-30"></a> <span class="k">end</span> </span><span id="L-31"><a name="L-31"></a> </span><span id="L-32"><a name="L-32"></a> <span class="o">[</span><span class="n">status</span><span class="p">,</span> <span class="n">headers</span><span class="p">,</span> <span class="n">body</span><span class="o">]</span> </span><span id="L-33"><a name="L-33"></a> <span class="k">end</span> </span><span id="L-34"><a name="L-34"></a> </span><span id="L-35"><a name="L-35"></a> <span class="kp">private</span> </span><span id="L-36"><a name="L-36"></a> </span><span id="L-37"><a name="L-37"></a> <span class="k">def</span> <span class="nf">authorized?</span><span class="p">(</span> <span class="n">ip</span> <span class="p">)</span> </span><span id="L-38"><a name="L-38"></a> <span class="vi">@plage</span><span class="o">.</span><span class="n">include?</span><span class="p">(</span><span class="no">IPAddr</span><span class="o">.</span><span class="n">new</span><span class="p">(</span> <span class="n">ip</span> <span class="p">))</span> </span><span id="L-39"><a name="L-39"></a> <span class="k">end</span> </span><span id="L-40"><a name="L-40"></a> </span><span id="L-41"><a name="L-41"></a> <span class="k">end</span> </span><span id="L-42"><a name="L-42"></a><span class="k">end</span> </span></pre></div> </td></tr></table>
managing, middleware, rack, ruby, server