Files
habitica/documentation/docs/middleware.html
T
2013-09-26 18:10:28 -04:00

181 lines
7.0 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>middleware.js</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
<link rel="stylesheet" media="all" href="docco.css" />
</head>
<body>
<div id="container">
<div id="background"></div>
<ul id="jump_to">
<li>
<a class="large" href="javascript:void(0);">Jump To &hellip;</a>
<a class="small" href="javascript:void(0);">+</a>
<div id="jump_wrapper">
<div id="jump_page">
<a class="source" href="config.html">
config.js
</a>
<a class="source" href="middleware.html">
middleware.js
</a>
<a class="source" href="seed.html">
seed.js
</a>
<a class="source" href="server.html">
server.js
</a>
<a class="source" href="utils.html">
utils.js
</a>
</div>
</li>
</ul>
<ul class="sections">
<li id="title">
<div class="annotation">
<h1>middleware.js</h1>
</div>
</li>
<li id="section-1">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-1">&#182;</a>
</div>
</div>
<div class="content"><div class='highlight'><pre><span class="keyword">var</span> nconf = require(<span class="string">'nconf'</span>);
<span class="keyword">var</span> _ = require(<span class="string">'lodash'</span>);
<span class="keyword">var</span> fs = require(<span class="string">'fs'</span>);
<span class="keyword">var</span> path = require(<span class="string">'path'</span>);
module.exports.forceSSL = <span class="keyword">function</span>(req, res, next){
<span class="keyword">var</span> baseUrl = nconf.get(<span class="string">"BASE_URL"</span>);</pre></div></div>
</li>
<li id="section-2">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-2">&#182;</a>
</div>
<p>Note x-forwarded-proto is used by Heroku &amp; nginx, you&#39;ll have to do something different if you&#39;re not using those</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="keyword">if</span> (req.headers[<span class="string">'x-forwarded-proto'</span>] &amp;&amp; req.headers[<span class="string">'x-forwarded-proto'</span>] !== <span class="string">'https'</span>
&amp;&amp; nconf.get(<span class="string">'NODE_ENV'</span>) === <span class="string">'production'</span>
&amp;&amp; baseUrl.indexOf(<span class="string">'https'</span>) === <span class="number">0</span>) {
<span class="keyword">return</span> res.redirect(baseUrl + req.url);
}
next()
}
module.exports.splash = <span class="keyword">function</span>(req, res, next) {
<span class="keyword">if</span> (req.url == <span class="string">'/'</span> &amp;&amp; !req.headers[<span class="string">'x-api-user'</span>] &amp;&amp; !req.headers[<span class="string">'x-api-key'</span>] &amp;&amp; !(req.session &amp;&amp; req.session.userId))
<span class="keyword">return</span> res.redirect(<span class="string">'/static/front'</span>)
next()
};
module.exports.cors = <span class="keyword">function</span>(req, res, next) {
res.header(<span class="string">"Access-Control-Allow-Origin"</span>, req.headers.origin || <span class="string">"*"</span>);
res.header(<span class="string">"Access-Control-Allow-Methods"</span>, <span class="string">"OPTIONS,GET,POST,PUT,HEAD,DELETE"</span>);
res.header(<span class="string">"Access-Control-Allow-Headers"</span>, <span class="string">"Content-Type,Accept,Content-Encoding,X-Requested-With,x-api-user,x-api-key"</span>);
<span class="keyword">if</span> (req.method === <span class="string">'OPTIONS'</span>) <span class="keyword">return</span> res.send(<span class="number">200</span>);
<span class="keyword">return</span> next();
};
<span class="keyword">var</span> buildFiles = [];
<span class="keyword">var</span> walk = <span class="keyword">function</span>(folder){
<span class="keyword">var</span> res = fs.readdirSync(folder);
res.forEach(<span class="keyword">function</span>(fileName){
file = folder + <span class="string">'/'</span> + fileName;
<span class="keyword">if</span>(fs.statSync(file).isDirectory()){
walk(file);
}<span class="keyword">else</span>{
<span class="keyword">var</span> relFolder = path.relative(path.join(__dirname, <span class="string">"/../build"</span>), folder);
<span class="keyword">var</span> old = fileName.replace(<span class="regexp">/-.{8}(\.[\d\w]+)$/</span>, <span class="string">'$1'</span>);
<span class="keyword">if</span>(relFolder){
old = relFolder + <span class="string">'/'</span> + old;
fileName = relFolder + <span class="string">'/'</span> + fileName;
}
buildFiles[old] = fileName
}
});
}
walk(path.join(__dirname, <span class="string">"/../build"</span>));
<span class="keyword">var</span> getBuildUrl = <span class="keyword">function</span>(url){
console.log(<span class="string">"CALLED "</span>, url)
<span class="keyword">if</span>(buildFiles[url]) <span class="keyword">return</span> buildFiles[url];
<span class="keyword">return</span> filename;
}
module.exports.locals = <span class="keyword">function</span>(req, res, next) {
res.locals.habitrpg = res.locals.habitrpg || {}
_.defaults(res.locals.habitrpg, {
NODE_ENV: nconf.get(<span class="string">'NODE_ENV'</span>),
IS_MOBILE: <span class="regexp">/Android|webOS|iPhone|iPad|iPod|BlackBerry/i</span>.test(req.header(<span class="string">'User-Agent'</span>)),
STRIPE_PUB_KEY: nconf.get(<span class="string">'STRIPE_PUB_KEY'</span>),
getBuildUrl: getBuildUrl
});
next()
}
<span class="comment">/*</pre></div></div>
</li>
<li id="section-3">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-3">&#182;</a>
</div>
<p> translate = (req, res, next) -&gt;
model = req.getModel()</p>
<h1>Set locale to bg on dev</h1>
<h1>model.set &#39;_i18n.locale&#39;, &#39;bg&#39; if process.env.NODE_ENV is &quot;development&quot;</h1>
<p> next()</p>
</div>
<div class="content"><div class='highlight'><pre> */</pre></div></div>
</li>
</ul>
</div>
</body>
</html>