Force full URL for libraries and allow custom base URL

- `baseURL` can now be used in conf.json to specify a custom origin.
merge-requests/63/head
Moe 2018-07-23 11:53:35 -07:00
parent 235c6760a5
commit 911966ac17
12 changed files with 114 additions and 92 deletions

View File

@ -117,6 +117,7 @@ if(config.databaseType===undefined){config.databaseType='mysql'}
if(config.pluginKeys===undefined)config.pluginKeys={};
if(config.databaseLogs===undefined){config.databaseLogs=false}
if(config.useUTC===undefined){config.useUTC=false}
if(config.baseURL && config.baseURL !== ''){config.baseURL = s.checkCorrectPathEnding(config.baseURL)}
if(config.pipeAddition===undefined){config.pipeAddition=7}else{config.pipeAddition=parseInt(config.pipeAddition)}
//Web Paths
if(config.webPaths===undefined){config.webPaths={}}
@ -208,6 +209,7 @@ s.getDefinitonFile=function(rule){
}
return file
}
//sql/database connection with knex
var databaseOptions = {
client: config.databaseType,
connection: config.db,
@ -5136,6 +5138,16 @@ s.superAuth=function(x,callback){
return true;
}
}
//get page URL
s.getOriginalUrl = function(req){
var url
if(config.baseURL){
url = config.baseURL
}else{
url = req.protocol + '://' + req.get('host') + '/'
}
return url
}
////Pages
app.enable('trust proxy');
app.use('/libs',express.static(__dirname + '/web/libs'));
@ -5146,7 +5158,7 @@ app.set('view engine','ejs');
//add template handler
if(config.renderPaths.handler!==undefined){require(__dirname+'/web/'+config.renderPaths.handler+'.js').addHandlers(s,app,io)}
//readme
//logout
app.get('/:auth/logout/:ke/:id', function (req,res){
if(s.group[req.params.ke]&&s.group[req.params.ke].users[req.params.auth]){
delete(s.api[req.params.auth]);
@ -5159,7 +5171,7 @@ app.get('/:auth/logout/:ke/:id', function (req,res){
});
//main page
app.get(config.webPaths.index, function (req,res){
res.render(config.renderPaths.index,{lang:lang,config:config,screen:'dashboard'},function(err,html){
res.render(config.renderPaths.index,{lang:lang,config:config,screen:'dashboard',originalURL:s.getOriginalUrl(req)},function(err,html){
if(err){
s.systemLog(err)
}
@ -5168,7 +5180,7 @@ app.get(config.webPaths.index, function (req,res){
});
//admin page
app.get(config.webPaths.admin, function (req,res){
res.render(config.renderPaths.index,{lang:lang,config:config,screen:'admin'},function(err,html){
res.render(config.renderPaths.index,{lang:lang,config:config,screen:'admin',originalURL:s.getOriginalUrl(req)},function(err,html){
if(err){
s.systemLog(err)
}
@ -5177,7 +5189,8 @@ app.get(config.webPaths.admin, function (req,res){
});
//super page
app.get(config.webPaths.super, function (req,res){
res.render(config.renderPaths.index,{lang:lang,config:config,screen:'super'},function(err,html){
res.render(config.renderPaths.index,{lang:lang,config:config,screen:'super',originalURL:s.getOriginalUrl(req)},function(err,html){
if(err){
s.systemLog(err)
}
@ -5219,6 +5232,10 @@ app.post('/:auth/register/:ke/:uid',function (req,res){
req.resp={ok:false};
res.setHeader('Content-Type', 'application/json');
s.auth(req.params,function(user){
if(user.details.sub){
res.end(user.lang['Not Permitted'])
return
}
s.sqlQuery('SELECT * FROM Users WHERE uid=? AND ke=? AND details NOT LIKE ? LIMIT 1',[req.params.uid,req.params.ke,'%"sub"%'],function(err,u) {
if(u&&u[0]){
if(req.body.mail!==''&&req.body.pass!==''){
@ -5269,6 +5286,7 @@ app.post(['/','/:screen'],function (req,res){
res.setHeader('Content-Type', 'application/json');
res.end(s.s(data, null, 3))
}else{
data.originalURL = s.getOriginalUrl(req)
data.screen=req.params.screen
res.render(focus,data,function(err,html){
if(err){
@ -5283,7 +5301,7 @@ app.post(['/','/:screen'],function (req,res){
res.setHeader('Content-Type', 'application/json');
res.end(s.s({ok:false}, null, 3))
}else{
res.render(config.renderPaths.index,{failedLogin:true,lang:lang,config:config,screen:req.params.screen},function(err,html){
res.render(config.renderPaths.index,{failedLogin:true,lang:lang,config:config,screen:req.params.screen,originalURL:s.getOriginalUrl(req)},function(err,html){
if(err){
s.systemLog(err)
}
@ -5741,7 +5759,8 @@ app.get(['/:auth/grid/:ke','/:auth/grid/:ke/:group'], function(req,res) {
config:config,
lang:user.lang,
$user:user,
monitors:r
monitors:r,
originalURL:s.getOriginalUrl(req)
});
})
},res,req)
@ -5751,7 +5770,7 @@ app.get(['/:auth/grid/:ke','/:auth/grid/:ke/:group'], function(req,res) {
app.get(['/:auth/mjpeg/:ke/:id','/:auth/mjpeg/:ke/:id/:channel'], function(req,res) {
res.header("Access-Control-Allow-Origin",req.headers.origin);
if(req.query.full=='true'){
res.render(config.renderPaths.mjpeg,{url:'/'+req.params.auth+'/mjpeg/'+req.params.ke+'/'+req.params.id});
res.render(config.renderPaths.mjpeg,{url:'/'+req.params.auth+'/mjpeg/'+req.params.ke+'/'+req.params.id,originalURL:s.getOriginalUrl(req)});
res.end()
}else{
s.auth(req.params,function(user){
@ -5807,7 +5826,7 @@ app.get(['/:auth/embed/:ke/:id','/:auth/embed/:ke/:id/:addon'], function (req,re
if(s.group[req.params.ke]&&s.group[req.params.ke].mon[req.params.id]){
if(s.group[req.params.ke].mon[req.params.id].started===1){
req.params.uid=user.uid;
res.render(config.renderPaths.embed,{data:req.params,baseUrl:req.protocol+'://'+req.hostname,config:config,lang:user.lang,mon:CircularJSON.parse(CircularJSON.stringify(s.group[req.params.ke].mon_conf[req.params.id]))});
res.render(config.renderPaths.embed,{data:req.params,baseUrl:req.protocol+'://'+req.hostname,config:config,lang:user.lang,mon:CircularJSON.parse(CircularJSON.stringify(s.group[req.params.ke].mon_conf[req.params.id])),originalURL:s.getOriginalUrl(req)});
res.end()
}else{
res.end(user.lang['Cannot watch a monitor that isn\'t running.'])

View File

@ -14,14 +14,14 @@
}
nav{margin-top:20px}
</style>
<link rel="stylesheet" href="libs/css/pnotify.custom.min.css">
<link rel="stylesheet" href="libs/css/vbox.css">
<link rel="stylesheet" href="libs/css/circles.css">
<link rel="stylesheet" href="libs/css/bootstrap.min.css">
<link rel="stylesheet" href="libs/css/font-awesome.min.css">
<link rel="stylesheet" href="libs/css/fullcalendar.min.css">
<link rel="stylesheet" href="libs/css/bootstrap-table.min.css">
<link rel="stylesheet" href="libs/css/main.dash2.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/pnotify.custom.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/vbox.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/circles.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/bootstrap.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/font-awesome.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/fullcalendar.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/bootstrap-table.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/main.dash2.css">
<body class="shinobi-bg">
<div class="shinobi-bg-shade">
<div class="container-fluid">

View File

@ -2,11 +2,11 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="Shinobi">
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="apple-touch-icon" sizes="57x57" href="libs/img/icon/apple-touch-icon-57x57.png" />
<link rel="apple-touch-icon" sizes="72x72" href="libs/img/icon/apple-touch-icon-72x72.png" />
<link rel="apple-touch-icon" sizes="76x76" href="libs/img/icon/apple-touch-icon-76x76.png" />
<link rel="apple-touch-icon" sizes="114x114" href="libs/img/icon/apple-touch-icon-114x114.png" />
<link rel="apple-touch-icon" sizes="120x120" href="libs/img/icon/apple-touch-icon-120x120.png" />
<link rel="apple-touch-icon" sizes="144x144" href="libs/img/icon/apple-touch-icon-144x144.png" />
<link rel="apple-touch-icon" sizes="152x152" href="libs/img/icon/apple-touch-icon-152x152.png" />
<link rel="apple-touch-icon" sizes="180x180" href="libs/img/icon/apple-touch-icon-180x180.png" />
<link rel="apple-touch-icon" sizes="57x57" href="<%-originalURL%>libs/img/icon/apple-touch-icon-57x57.png" />
<link rel="apple-touch-icon" sizes="72x72" href="<%-originalURL%>libs/img/icon/apple-touch-icon-72x72.png" />
<link rel="apple-touch-icon" sizes="76x76" href="<%-originalURL%>libs/img/icon/apple-touch-icon-76x76.png" />
<link rel="apple-touch-icon" sizes="114x114" href="<%-originalURL%>libs/img/icon/apple-touch-icon-114x114.png" />
<link rel="apple-touch-icon" sizes="120x120" href="<%-originalURL%>libs/img/icon/apple-touch-icon-120x120.png" />
<link rel="apple-touch-icon" sizes="144x144" href="<%-originalURL%>libs/img/icon/apple-touch-icon-144x144.png" />
<link rel="apple-touch-icon" sizes="152x152" href="<%-originalURL%>libs/img/icon/apple-touch-icon-152x152.png" />
<link rel="apple-touch-icon" sizes="180x180" href="<%-originalURL%>libs/img/icon/apple-touch-icon-180x180.png" />

View File

@ -3,17 +3,17 @@
<% include header-meta.ejs %>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="libs/css/bootstrap.min.css">
<link rel="stylesheet" href="libs/css/login.css">
<link rel="stylesheet" href="libs/css/material.min.css">
<link rel="stylesheet" href="libs/css/material.style.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/bootstrap.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/login.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/material.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/material.style.css">
<meta name="mobile-web-app-capable" content="yes">
<link rel="icon" href="libs/img/icon/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="libs/img/icon/favicon.ico" type="image/x-icon" />
<link rel="icon" href="<%-originalURL%>libs/img/icon/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="<%-originalURL%>libs/img/icon/favicon.ico" type="image/x-icon" />
<% include header-favicon.ejs %>
<script src="libs/js/jquery.min.js"></script>
<script src="libs/js/jquery-ui.min.js"></script>
<script src="libs/js/jquery.serialize.js"></script>
<script src="<%-originalURL%>libs/js/jquery.min.js"></script>
<script src="<%-originalURL%>libs/js/jquery-ui.min.js"></script>
<script src="<%-originalURL%>libs/js/jquery.serialize.js"></script>
</head>
<% cleanLang = function(string){
if(!string){string=''}

View File

@ -10,7 +10,7 @@
<h4 class="modal-title" id="help_windowLabel"><i class="fa fa-question-circle"></i> &nbsp; <span><%-lang.Help%></span></h4>
</div>
<div class="modal-body">
<a href="http://shinobi.video/docs/donate"><img src="libs/img/icon/apple-touch-icon-152x152.png" class="pull-right" style="border-radius:50%;margin-left:20px;border: 1px solid #c3996b;"></a>
<a href="http://shinobi.video/docs/donate"><img src="<%-originalURL%>libs/img/icon/apple-touch-icon-152x152.png" class="pull-right" style="border-radius:50%;margin-left:20px;border: 1px solid #c3996b;"></a>
<p>For information about how to use Shinobi you can check out the <a target="_blank" href="http://shinobi.video/docs">Docs</a>.</p>
<p>If you would like to get professional support please consider ordering a <a href="http://shinobi.video/support">support package</a>. You can find <b>Moe Alam, The Author</b>, on the <a target="_blank" href="https://discord.gg/ehRd8Zz">Discord</a> Community Chat. For general questions and community support you can also try <a href="https://www.reddit.com/r/ShinobiCCTV">Reddit</a>.</p>
<p><strong>Support </strong> <a href="http://shinobi.video/support">from @moeiscool</a></p>

View File

@ -1,6 +1,6 @@
<% include blocks/header %>
<script>var $user=<%- JSON.stringify($user) %>;</script>
<link rel="stylesheet" href="libs/css/bootstrap.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/bootstrap.min.css">
<div id="main" class="container">
<a class="btn btn-danger btn-lg" record>Stream</a>
<div>
@ -19,9 +19,9 @@ requires https or firefox
</div>
<video id="video"><source></video>
<canvas id="canvas"></canvas>
<script src="libs/js/jquery.min.js"></script>
<script src="libs/js/socket.io.js"></script>
<script src="libs/js/menu.js"></script>
<script src="<%-originalURL%>libs/js/jquery.min.js"></script>
<script src="<%-originalURL%>libs/js/socket.io.js"></script>
<script src="<%-originalURL%>libs/js/menu.js"></script>
<script>
$.ccio = {}
$.ls = localStorage

View File

@ -8,7 +8,9 @@ if(config.ssl&&config.ssl.port&&data.protocol==='https'){
}
if(!data.port||data.port===''||data.port==80||data.port==443){data.url=baseUrl}else{data.url=baseUrl+':'+data.port}
if(data.addon || data.addon.indexOf('relative')>-1){
data.url=''
data.url = ''
}else if(config.baseURL){
data.url = config.baseURL
}
if(data.url.charAt(data.url.length - 1) !== '/'){
data.url += '/'

View File

@ -10,7 +10,7 @@
<div class="row">
<div class="col-xs-12">
<a href="http://shinobi.video" target="_blank">
<img src="libs/img/icon/apple-touch-icon-76x76.png" style="border-radius:50%">
<img src="<%-originalURL%>libs/img/icon/apple-touch-icon-76x76.png" style="border-radius:50%">
</a>
</div>
</div>
@ -50,7 +50,7 @@
</div>
</div>
</div>
<script src="libs/js/material.min.js"></script>
<script src="<%-originalURL%>libs/js/material.min.js"></script>
<script>
$.ccio={f:$('#auth-form'),ls:localStorage.getItem('ShinobiAuth_'+location.host)}
$.ccio.gid=function(x){

View File

@ -1,17 +1,17 @@
<% var details=JSON.parse($user.details) %>
<% include blocks/header %>
<script>var $user=<%- JSON.stringify($user) %>;</script>
<link rel="stylesheet" href="libs/css/pnotify.custom.min.css">
<link rel="stylesheet" href="libs/css/vbox.css">
<link rel="stylesheet" href="libs/css/daterangepicker.css">
<link rel="stylesheet" href="libs/css/circles.css">
<link rel="stylesheet" href="libs/css/bootstrap.min.css">
<link rel="stylesheet" href="libs/css/font-awesome.min.css">
<link rel="stylesheet" href="libs/css/fullcalendar.min.css">
<link rel="stylesheet" href="libs/css/gridstack.min.css">
<link rel="stylesheet" href="libs/css/gridstack-extra.min.css">
<link rel="stylesheet" href="libs/css/bootstrap-table.min.css">
<link rel="stylesheet" href="libs/css/main.dash2.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/pnotify.custom.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/vbox.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/daterangepicker.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/circles.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/bootstrap.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/font-awesome.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/fullcalendar.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/gridstack.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/gridstack-extra.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/bootstrap-table.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/main.dash2.css">
<style id="theme">
<% if(details.theme&&details.theme!==''){ %><%- include(__dirname+'/web/libs/themes/'+details.theme+'/style.css'); %><% } %>
</style>
@ -169,27 +169,28 @@
<script type="text/javascript" src="https://www.dropbox.com/static/api/2/dropins.js" id="dropboxjs" data-app-key="<%= config.DropboxAppKey %>"></script>
<!--Dropbox End-->
<% } %>
<script src="libs/js/material.min.js"></script>
<script src="libs/js/pnotify.custom.min.js"></script>
<script src="<%-originalURL%>libs/js/material.min.js"></script>
<script src="<%-originalURL%>libs/js/pnotify.custom.min.js"></script>
<script><% include ../libs/js/moment.js %></script>
<script><% include ../libs/js/livestamp.min.js %></script>
<script src="libs/js/placeholder.js"></script>
<script src="libs/js/bootstrap.min.js"></script>
<script src="libs/js/bootstrap-table.min.js"></script>
<script src="libs/js/socket.io.js"></script>
<script src="libs/js/fullcalendar.min.js"></script>
<script src="libs/js/hls.min.js"></script>
<script type="text/javascript" src="libs/js/flv.shinobi.js">;</script>
<script src="libs/js/menu.js"></script>
<script src="libs/js/clock.js"></script>
<script src="libs/js/poseidon.js"></script>
<script src="libs/js/Chart.js"></script>
<script src="libs/js/clusterPoints.js"></script>
<script src="libs/js/daterangepicker.js"></script>
<script src="libs/js/jquery.canvasAreaDraw.js"></script>
<script src="libs/js/jquery-ui.min.js"></script>
<script src="libs/js/lodash.min.js"></script>
<script src="libs/js/gridstack.min.js"></script>
<script src="libs/js/gridstack.jQueryUI.min.js"></script>
<script src="<%-originalURL%>libs/js/placeholder.js"></script>
<script src="<%-originalURL%>libs/js/bootstrap.min.js"></script>
<script src="<%-originalURL%>libs/js/bootstrap-table.min.js"></script>
<script src="<%-originalURL%>libs/js/socket.io.js"></script>
<script src="<%-originalURL%>libs/js/fullcalendar.min.js"></script>
<script src="<%-originalURL%>libs/js/hls.min.js"></script>
<script type="text/javascript" src="<%-originalURL%>libs/js/flv.shinobi.js">;</script>
<script src="<%-originalURL%>libs/js/menu.js"></script>
<script src="<%-originalURL%>libs/js/clock.js"></script>
<script src="<%-originalURL%>libs/js/poseidon.js"></script>
<script src="<%-originalURL%>libs/js/Chart.js"></script>
<script src="<%-originalURL%>libs/js/clusterPoints.js"></script>
<script src="<%-originalURL%>libs/js/daterangepicker.js"></script>
<script src="<%-originalURL%>libs/js/jquery.canvasAreaDraw.js"></script>
<script src="<%-originalURL%>libs/js/jquery-ui.min.js"></script>
<!--<script src="<%-originalURL%>libs/js/jquery.ui.touch.js"></script>-->
<script src="<%-originalURL%>libs/js/lodash.min.js"></script>
<script src="<%-originalURL%>libs/js/gridstack.min.js"></script>
<script src="<%-originalURL%>libs/js/gridstack.jQueryUI.min.js"></script>
<script><% include ../libs/js/main.dash2.js %></script>
<% include blocks/help.ejs %>

View File

@ -11,7 +11,7 @@
<div class="row">
<div class="col-xs-12">
<a href="http://shinobi.video" target="_blank">
<img src="libs/img/icon/apple-touch-icon-76x76.png" style="border-radius:50%">
<img src="<%-originalURL%>libs/img/icon/apple-touch-icon-76x76.png" style="border-radius:50%">
</a>
</div>
</div>
@ -75,7 +75,7 @@
</div>
</div>
</div>
<script src="libs/js/material.min.js"></script>
<script src="<%-originalURL%>libs/js/material.min.js"></script>
<script>
<% var failedLogin;if(failedLogin===true){ %>
localStorage.removeItem('ShinobiLogin_'+location.host)

View File

@ -1,6 +1,6 @@
<% include blocks/header %>
<script>var $user=<%- JSON.stringify($user) %>;</script>
<link rel="stylesheet" href="libs/css/bootstrap.min.css">
<link rel="stylesheet" href="<%-originalURL%>libs/css/bootstrap.min.css">
<div id="main" class="container">
<a class="btn btn-danger btn-lg" record>Stream</a>
<div>
@ -17,8 +17,8 @@ requires https or firefox
</div>
<video id="video"><source></video>
<canvas id="canvas"></canvas>
<script src="libs/js/socket.io.js"></script>
<script src="libs/js/menu.js"></script>
<script src="<%-originalURL%>libs/js/socket.io.js"></script>
<script src="<%-originalURL%>libs/js/menu.js"></script>
<script>
$.ccio={};$.ls=localStorage;
$.ccio.ws=io(location.origin);

View File

@ -10,15 +10,15 @@
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700,200" rel="stylesheet" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css" />
<!-- CSS Files -->
<link href="libs/css/bootstrap4.min.css" rel="stylesheet" />
<link href="libs/css/main.dash2.css" rel="stylesheet" />
<link rel="stylesheet" href="libs/css/pnotify.custom.min.css">
<link href="libs/css/now-ui-kit.css?v=1.1.0" rel="stylesheet" />
<script src="libs/js/jquery.min.js"></script>
<script src="libs/js/jquery.serialize.js"></script>
<script src="libs/js/pnotify.custom.min.js"></script>
<script src="libs/js/popper.min.js" type="text/javascript"></script>
<script src="libs/js/bootstrap4.min.js" type="text/javascript"></script>
<link href="<%-originalURL%>libs/css/bootstrap4.min.css" rel="stylesheet" />
<link href="<%-originalURL%>libs/css/main.dash2.css" rel="stylesheet" />
<link rel="stylesheet" href="<%-originalURL%>libs/css/pnotify.custom.min.css">
<link href="<%-originalURL%>libs/css/now-ui-kit.css?v=1.1.0" rel="stylesheet" />
<script src="<%-originalURL%>libs/js/jquery.min.js"></script>
<script src="<%-originalURL%>libs/js/jquery.serialize.js"></script>
<script src="<%-originalURL%>libs/js/pnotify.custom.min.js"></script>
<script src="<%-originalURL%>libs/js/popper.min.js" type="text/javascript"></script>
<script src="<%-originalURL%>libs/js/bootstrap4.min.js" type="text/javascript"></script>
<style>
.form-group label>div:first-child{width:40%}
.list-group li .form-group {margin:0}
@ -40,7 +40,7 @@
<span class="navbar-toggler-bar bar3"></span>
</button>
</div>
<div class="collapse navbar-collapse justify-content-end" id="navigation" data-nav-image="libs/img/blurred-image-1.jpg">
<div class="collapse navbar-collapse justify-content-end" id="navigation" data-nav-image="<%-originalURL%>libs/img/blurred-image-1.jpg">
<ul class="nav navbar-nav navbar-right">
<li class="nav-item">
<a href="javascript:location.href=location.pathname" class="nav-link" class="logout">
@ -167,12 +167,12 @@
</div>
</body>
<% include blocks/confirm.ejs %>
<script src="libs/js/pnotify.custom.min.js" type="text/javascript"></script>
<script src="<%-originalURL%>libs/js/pnotify.custom.min.js" type="text/javascript"></script>
<script><% include ../libs/js/moment.js %></script>
<script src="libs/js/livestamp.min.js" type="text/javascript"></script>
<script src="libs/js/socket.io.js" type="text/javascript"></script>
<script src="libs/js/placeholder.js" type="text/javascript"></script>
<script src="libs/js/now-ui-kit.js?v=1.1.0" type="text/javascript"></script>
<script src="<%-originalURL%>libs/js/livestamp.min.js" type="text/javascript"></script>
<script src="<%-originalURL%>libs/js/socket.io.js" type="text/javascript"></script>
<script src="<%-originalURL%>libs/js/placeholder.js" type="text/javascript"></script>
<script src="<%-originalURL%>libs/js/now-ui-kit.js?v=1.1.0" type="text/javascript"></script>
<script type="text/javascript">
PNotify.prototype.options.styling = "fontawesome";
$(document).ready(function() {