1
0
Fork 0
mirror of https://gitlab.com/Shinobi-Systems/ShinobiCE.git synced 2025-03-09 15:40:15 +00:00

Blue Turtle - The Refactoring

This commit is contained in:
Moe 2018-10-24 21:42:47 -07:00
parent 04011678fb
commit b7d08eb500
67 changed files with 11651 additions and 8452 deletions

View file

@ -1,32 +1,18 @@
<% include blocks/header %>
<script>$user=<%-JSON.stringify($user)%></script>
<style>
.shinobi-bg {
background: url(/libs/img/bg.jpg);
background-size: cover;
background-position: center;
position: relative;
}.shinobi-bg-shade {
position: absolute;
height: 100%;
width: 100%;
background: rgba(0,0,0,0.5);
}
nav{margin-top:20px}
</style>
<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/admin-page.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">
<div class="container">
<nav class="navbar navbar-default">
<nav class="navbar navbar-default navbar-forestgreen">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
@ -51,18 +37,18 @@
</ul>
</div><!-- /.container-fluid -->
</nav>
<div class="row">
<div class="col-md-6">
<div class="form-group-group grey">
<div class="form-group-group forestgreen">
<h4>Sub-Accounts</h4>
<table class="table table-striped" id="sub_accounts"></table>
</div>
</div>
<div class="col-md-6">
<form id="add_new">
<div class="form-group-group grey">
<div class="form-group-group forestgreen">
<h4>Add<small id="msg" class="pull-right" style="color:#fff"></small></h4>
<div class="form-group">
<label><div><span>Email</span></div>
@ -93,7 +79,6 @@
</div>
<% include blocks/confirm.ejs %>
<% include blocks/subpermissions.ejs %>
</div>
</body>
<script><% include ../libs/js/socket.io.js %></script>
<script><% include ../libs/js/pnotify.custom.min.js %></script>
@ -109,6 +94,7 @@ $.ccio.cx=function(x){if(!x.ke){x.ke=$user.ke;};if(!x.uid){x.uid=$user.uid;};ret
$.ccio.ws.on('connect',function(d){
$.ccio.cx({f:'init',auth:$user.auth_token});
})
PNotify.prototype.options.styling = "fontawesome";
$.ccio.ws.on('f',function(d){
console.log(d);
switch(d.f){
@ -117,13 +103,30 @@ $.ccio.ws.on('f',function(d){
$.each(d.form,function(n,v){
account[n]=v;
});
account.detailsJSON=JSON.parse(account.details);
account.detailsJSON=JSON.parse(account.details)
new PNotify({
title : 'Account Edited',
text : '<b>' + account.mail + '</b> has been updated.',
type : 'success'
})
break;
case'add_sub_account':
$.ccio.tm(0,d,'#sub_accounts')
var account = $.ccio.subs[d.uid]
new PNotify({
title : 'Account Added',
text : '<b>' + account.mail + '</b> has been added.',
type : 'success'
})
break;
case'delete_sub_account':
$('#sub_accounts tr[uid="'+d.uid+'"]').remove()
var account = $.ccio.subs[d.uid]
new PNotify({
title : 'Account Deleted',
text : '<b>' + account.mail + '</b> has been deleted.',
type : 'info'
})
break;
}
})
@ -146,30 +149,36 @@ $subs=<%-JSON.stringify($subs)%>;
$.each($subs,function(n,v){
$.ccio.tm(0,v,'#sub_accounts')
})
//add new
$.aN={e:$('#add_new')};
$.aN.e.submit(function(e){
e.preventDefault();
e.s=$.aN.e.serializeObject();e.m=$('#msg').empty()
$.post($user.auth_token+'/register/'+$user.ke+'/'+$user.uid,e.s,function(d){
e.s = $.aN.e.serializeObject()
e.m = $('#msg').empty()
$.post('<%=originalURL%><%=config.webPaths.adminApiPrefix%>'+$user.auth_token+'/accounts/'+$user.ke+'/register',{data:e.s},function(d){
if(d.msg){
e.m.text(d.msg)
};
}
});
return false;
});
//sub simple lister
$.sU={e:$('#sub_accounts')};
$.sU.e.on('click','.delete',function(e){
e.e=$(this).parents('tr');e.m=e.e.find('.mail').text();e.u=e.e.attr('uid');
$.confirm.e.modal('show');
$.confirm.title.html('Delete Sub-Account <small>'+e.u+'</small>')
e.html='Do you want to delete <b>'+e.m+'</b>? You cannot recover this account.'
$.confirm.body.html(e.html)
var el = $(this).parents('tr')
var subAccountEmail = el.find('.mail').text()
var subAccountUid = el.attr('uid')
$.confirm.e.modal('show')
$.confirm.title.html('Delete Sub-Account <small>'+subAccountUid+'</small>')
var html = 'Do you want to delete <b>'+subAccountEmail+'</b>? You cannot recover this account.'
$.confirm.body.html(html)
$.confirm.click({title:'Delete',class:'btn-danger'},function(){
$.ccio.cx({f:'accounts',ff:'delete',$uid:e.u,auth:$user.auth_token,mail:e.m})
});
$.post('<%=originalURL%><%=config.webPaths.adminApiPrefix%>'+$user.auth_token+'/accounts/'+$user.ke+'/delete',{
uid: subAccountUid,
mail: subAccountEmail
},function(data){})
})
})
$.sU.e.on('click','.permission',function(e){
e.e=$(this).parents('tr');e.m=e.e.find('.mail').text();e.u=e.e.attr('uid');
@ -235,15 +244,28 @@ $.pR.e.on('change','[monitor]',function(e){
e.details.val(JSON.stringify(e.detail))
});
$.pR.f.submit(function(e){
e.preventDefault();
e.s=$(this).serializeObject()
$.ccio.cx({f:'accounts',ff:'edit',$uid:$.pR.user,auth:$user.auth_token,mail:$.ccio.subs[$.pR.user].mail,form:e.s})
$.pR.e.modal('hide')
return false;
e.preventDefault()
var form = $(this).serializeObject()
$.post('<%=originalURL%><%=config.webPaths.adminApiPrefix%>'+$user.auth_token+'/accounts/'+$user.ke+'/edit',{
uid: $.pR.user,
mail: $.ccio.subs[$.pR.user].mail,
data: form
},function(data){
if(data.ok){
$.pR.e.modal('hide')
}else{
new PNotify({
title : 'Failed to Add Account',
text : data.msg,
type : 'error'
})
}
})
return false
})
$('body')
.on('click','.logout',function(e){
localStorage.removeItem('ShinobiLogin_'+location.host);location.href=location.href;
})
</script>
</script>

View file

@ -92,4 +92,4 @@
</div>
</form>
</div>
</div>
</div>

View file

@ -0,0 +1,39 @@
<form>
<nav class="navbar navbar-rounded navbar-expand-lg bg-primary">
<div class="container">
<div class="collapse navbar-collapse">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link submit">
<p><i class="fa fa-check"></i> <%-lang.Save%></p>
</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="form-group">
<label>
<div><span><%-lang.Email%></span></div>
<div><input class="form-control" type="email" name="mail" value="<%- $user.mail %>"></div>
</label>
</div>
<!-- <div class="form-group">
<label>
<div><span><%-lang.Username%></span></div>
<div><input class="form-control" type="text" name="pass"></div>
</label>
</div> -->
<div class="form-group">
<label>
<div><span><%-lang.Password%></span></div>
<div><input class="form-control" type="password" name="pass"></div>
</label>
</div>
<div class="form-group">
<label>
<div><span><%-lang['Password Again']%></span></div>
<div><input class="form-control" type="password" name="pass_again"></div>
</label>
</div>
</form>

View file

@ -30,15 +30,15 @@
<div class="form-group-group blue where">
<h4>Conditions
<div class="pull-right">
<a class="btn btn-success btn-xs add">&nbsp;<i class="fa fa-plus"></i>&nbsp;</a>
<a class="btn btn-danger btn-xs remove">&nbsp;<i class="fa fa-trash-o"></i>&nbsp;</a>
<a class="btn btn-success btn-xs add">&nbsp;<i class="fa fa-plus"></i>&nbsp;</a>
<a class="btn btn-danger btn-xs remove">&nbsp;<i class="fa fa-trash-o"></i>&nbsp;</a>
</div>
</h4>
<div id="detector_filters_where"></div>
</div>
<div class="form-group-group red actions">
<h4><%- lang['Action for Selected'] %></h4>
<%
<%
var possibleActions = [
{
"name": "halt",
@ -210,6 +210,14 @@
}
]
},
{
"name": "indifference",
"field": "Modify Indifference",
"description": "Modify minimum indifference required for event.",
"placeholder": "",
"default": "",
"example": ""
},
].forEach(function(item){ %>
<%
var name = 'actions='+item.name
@ -226,11 +234,15 @@
</span>
</div>
<div>
<% if(item.possible){ %>
<select <%- name %> class="form-control">
<% item.possible.forEach(function(option){ %>
<option value="<%-option.value%>"><%-option.name%></option>
<% }) %>
</select>
<% }else{ %>
<input <%- name %> class="form-control" value="<%- item.default %>" placeholder="<%- item.placeholder %>">
<% } %>
</div>
</label>
</div>
@ -246,4 +258,4 @@
</div>
</form>
</div>
</div>
</div>

View file

@ -1,3 +1,5 @@
<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" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="Shinobi">
@ -9,4 +11,4 @@
<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" />
<link rel="apple-touch-icon" sizes="180x180" href="<%-originalURL%>libs/img/icon/apple-touch-icon-180x180.png" />

View file

@ -8,8 +8,6 @@
<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="<%-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="<%-originalURL%>libs/js/jquery.min.js"></script>
<script src="<%-originalURL%>libs/js/jquery-ui.min.js"></script>
@ -18,4 +16,4 @@
<% cleanLang = function(string){
if(!string){string=''}
return string.replace(/'/g,"\\'")
}%>
}%>

View file

@ -34,7 +34,7 @@
<label><div><span><%-lang['2-Factor Authentication']%> (<%-lang.Email%>)</span></div>
<div><select class="form-control" detail="factorAuth">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
@ -66,8 +66,8 @@
<div class="form-group">
<label><div><span><%-lang['Permissions']%></span></div>
<div><select class="form-control" detail="permissions" selector="h_l">
<option value="all" selected><%-lang['All Privileges']%></option>
<option value="limited"><%-lang.Limited%></option>
<option value="all" selected><%-lang['All Privileges']%></option>
<option value="limited"><%-lang.Limited%></option>
</select></div>
</label>
</div>
@ -75,7 +75,7 @@
<label><div><span><%-lang['Can edit Max Storage']%></span></div>
<div><select class="form-control" detail="edit_size">
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
</div>
@ -83,7 +83,7 @@
<label><div><span><%-lang['Can edit Max Days']%></span></div>
<div><select class="form-control" detail="edit_days">
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
</div>
@ -91,7 +91,7 @@
<label><div><span><%-lang['Can edit how long to keep Events']%> <small><%-lang['in Days']%></small></span></div>
<div><select class="form-control" detail="edit_event_days">
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
</div>
@ -99,7 +99,7 @@
<label><div><span><%-lang['Can edit how long to keep Logs']%> <small><%-lang['in Days']%></small></span></div>
<div><select class="form-control" detail="edit_log_days">
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
</div>
@ -107,7 +107,7 @@
<label><div><span><%-lang['Can use Admin Panel']%></span></div>
<div><select class="form-control" detail="use_admin">
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
</div>
@ -115,7 +115,7 @@
<label><div><span><%-lang['Can use Amazon S3']%></span></div>
<div><select class="form-control" detail="use_aws_s3">
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
</div>
@ -123,7 +123,7 @@
<label><div><span><%-lang['Can use WebDAV']%></span></div>
<div><select class="form-control" detail="use_webdav">
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
</div>
@ -131,7 +131,7 @@
<label><div><span><%-lang['Can use Discord Bot']%></span></div>
<div><select class="form-control" detail="use_discordbot">
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
</div>
@ -139,15 +139,15 @@
<label><div><span><%-lang['Can use LDAP']%></span></div>
<div><select class="form-control" detail="use_ldap">
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default pull-left" data-dismiss="modal"><i class="fa fa-times"></i> <%-lang.Close%></button>
<div class="pull-left">
<div class="pull-left" style="display:none">
<div class="marc-toggle display-inline">
<input type="checkbox" id="edit"/><label for="edit">Add or Edit</label>
</div>
@ -164,16 +164,32 @@ $.aN={e:$('#add_edit')};$.aN.f=$.aN.e.find('form')
$.aN.modeIsEdit = false
$.aN.f.submit(function(e){
e.preventDefault();
e.s=$.aN.f.serializeObject()
e.cx={f:'accounts',ff:'register',form:e.s};
if($.aN.modeIsEdit){
e.cx.ff='edit';
e.cx.account=$.aN.selected;
var formValues = $.aN.f.serializeObject()
var postData = {
data: formValues
}
$.ccio.cx(e.cx)
$.aN.e.modal('hide')
var webPath = 'registerAdmin'
if($.aN.modeIsEdit){
webPath = 'editAdmin'
postData.account = $.aN.selected
}
$.post('<%=originalURL%><%=config.webPaths.superApiPrefix%>'+$user.sessionKey+'/accounts/'+webPath,postData,function(data){
console.log(data)
if(data.ok === true){
$.aN.e.modal('hide')
}
})
return false;
});
})
//client side email check
$.aN.e.on('change','[name="mail"]',function(){
var thisVal = $(this).val()
$.each(users,function(n,user){
if($.aN.selected && user.ke !== $.aN.selected.ke && thisVal.toLowerCase() === user.mail.toLowerCase()){
new PNotify({text:"<%=lang['Email address is in use.']%>",type:'error'})
}
})
})
$.aN.e.on('change','[detail]',function(){
e = {}
e.ar = {}
@ -181,7 +197,7 @@ $.aN.e.on('change','[detail]',function(){
try{
e.ar = Object.assign(JSON.parse($.aN.selected.details),{})
}catch(err){
}
}
$.each($.aN.e.find('[detail]'),function(n,v){
@ -194,7 +210,7 @@ $('#edit').change(function(e){
if($('#edit').is(':checked')){
$.aN.modeIsEdit = true
$('#title').text("<%-lang['Edit']%>")
$.aN.e.find('[name="mail"],[name="ke"]').prop('disabled',true)
$.aN.e.find('[name="ke"]').prop('disabled',true)
}else{
$.aN.modeIsEdit = false
$('#title').text("<%-lang['Add New']%>")
@ -224,7 +240,19 @@ $.aC.e.on('click','.delete',function(e){
e.html='Do you want to delete <b>'+e.account.mail+'</b>? You cannot recover this account. Files will remain in the filesystem. If you choose to create an account with the same Group Key it will have the previous events activated in that account.'
$.confirm.body.html(e.html)
$.confirm.click({title:'Delete',class:'btn-danger'},function(){
$.ccio.cx({f:'accounts',ff:'delete',account:e.account})
// $.ccio.cx({f:'accounts',ff:'delete',account:e.account})
$.post('<%=originalURL%><%=config.webPaths.superApiPrefix%>'+$user.sessionKey+'/accounts/deleteAdmin',{
account : e.account,
// "deleteSubAccounts" : "1",
// "deleteMonitors" : "1",
// "deleteVideos" : "1",
// "deleteEvents" : "1"
},function(data){
console.log(data)
if(data.ok === true){
$.aN.e.modal('hide')
}
})
});
})
$.aC.e.on('click','.permission',function(e){
@ -236,13 +264,15 @@ $.aC.e.on('click','.permission',function(e){
$.aN.e.find('input').val('');
$.each(e.account,function(n,v){
if(n=='pass'){return}
$.aN.e.find('[name="'+n+'"]').val(v).change()
var el = $.aN.e.find('[name="'+n+'"]')
el.val(v)
if(n !== 'mail')el.change()
})
$.each(JSON.parse(e.account.details),function(n,v){
$.aN.e.find('[detail="'+n+'"]').val(v)
})
$('#edit').prop('checked',true).change().parent().addClass('is-checked')
// $.pR.e.modal('show');
})
</script>
</script>

View file

@ -233,14 +233,26 @@
<div class="form-group">
<label><div><span><%-lang.hwaccel%></span></div>
<div><select class="form-control" detail="hwaccel">
<option value="auto"><%-lang.Auto%></option>
<option value="cuvid"><%-lang.cuvid%></option>
<option value="vaapi"><%-lang.vaapi%></option>
<option value="qsv"><%-lang.qsv%></option>
<option value="vdpau"><%-lang.vdpau%></option>
<option value="dxva2"><%-lang.dxva2%></option>
<option value="vda"><%-lang.vda%></option>
<option value="videotoolbox"><%-lang.videotoolbox%></option>
<% if(config.availableHWAccels) {
var methods = {
auto: {label:lang['Auto'],value:'auto'},
drm: {label:lang['drm'],value:'drm'},
cuvid: {label:lang['cuvid'],value:'cuvid'},
vaapi: {label:lang['vaapi'],value:'vaapi'},
qsv: {label:lang['qsv'],value:'qsv'},
vdpau: {label:lang['vdpau'],value:'vdpau'},
dxva2: {label:lang['dxva2'],value:'dxva2'},
vdpau: {label:lang['vdpau'],value:'vdpau'},
videotoolbox: {label:lang['videotoolbox'],value:'videotoolbox'}
}
config.availableHWAccels.forEach(function(availibleMethod){
if(methods[availibleMethod]){
var method = methods[availibleMethod] %>
<option value="<%= method.value %>"><%= method.label %></option>
<% }
})
}
%>
</select></div>
</label>
</div>
@ -1012,6 +1024,11 @@
</select></div>
</label>
</div>
<div class="form-group h_det_discord_input h_det_discord_1">
<label><div><span><%-lang['Allow Next Discord Alert']%></span></div>
<div><input class="form-control" detail="detector_discordbot_timeout" placeholder="10"></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Detector Filters']%></span></div>
<div><select class="form-control" detail="use_detector_filters" selector="h_det_fil">
@ -1028,11 +1045,6 @@
</select></div>
</label>
</div>
<div class="form-group h_det_discord_input h_det_discord_1">
<label><div><span><%-lang['Allow Next Discord Alert']%></span></div>
<div><input class="form-control" detail="detector_discordbot_timeout" placeholder="10"></div>
</label>
</div>
<div class="hidden">
<input detail="cords">
<input detail="detector_filters">
@ -1058,6 +1070,21 @@
<div><input class="form-control" detail="detector_sensitivity" placeholder="0.5"></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Max Indifference']%></span></div>
<div><input class="form-control" detail="detector_max_sensitivity" placeholder=""></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Trigger Threshold']%></span></div>
<div><input class="form-control" detail="detector_threshold" placeholder="1"></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Color Threshold']%></span></div>
<div><input class="form-control" detail="detector_color_threshold" placeholder="9"></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Full Frame Detection']%></span></div>
<div><select class="form-control" detail="detector_frame">
@ -1114,7 +1141,7 @@
</div>
</div>
</div>
<div class="form-group-group orange shinobi-detector-opencv shinobi-detector-openalpr shinobi-detector-pythonyolo shinobi-detector_plug" section id="monSectionDetectorObject">
<div class="form-group-group orange shinobi-detector-opencv shinobi-detector-openalpr shinobi-detector-pythonyolo shinobi-detector-yolo shinobi-detector-pythondlib shinobi-detector_plug" section id="monSectionDetectorObject">
<h4><%-lang['Object Detection']%> <small><%-lang['Plugin']%> : <b class="shinobi-detector_name"></b> <b class="shinobi-detector-invert"><%-lang['Not Connected']%></b><b class="shinobi-detector" style="display:none"><%-lang['Connected']%></b></small></h4>
<div class="form-group">
<label><div><span><%-lang['Detect Objects']%></span></div>

View file

@ -14,8 +14,8 @@
<div class="form-group-group orange where">
<h4><span class="cord_name"></span>
<div class="pull-right">
<a class="btn btn-success btn-xs add">&nbsp;<i class="fa fa-plus"></i>&nbsp;</a>
<a class="btn btn-danger btn-xs erase">&nbsp;<i class="fa fa-trash-o"></i>&nbsp;</a>
<a class="btn btn-success btn-xs add">&nbsp;<i class="fa fa-plus"></i>&nbsp;</a>
<a class="btn btn-danger btn-xs erase">&nbsp;<i class="fa fa-trash-o"></i>&nbsp;</a>
</div>
</h4>
<div class="form-group">
@ -24,19 +24,35 @@
<div><select id="regions_list" class="form-control"></select></div>
</label>
</div>
<div class="row">
<div class="form-group col-md-12">
<label>
<div><span><%-lang['Region Name']%></span></div>
<div><input class="form-control" name="name"></div>
</label>
</div>
<div class="form-group col-md-12">
<label>
<div><span><%-lang.Indifference%></span></div>
<div><input class="form-control" name="sensitivity"></div>
</label>
</div>
<div class="form-group">
<label>
<div><span><%-lang['Region Name']%></span></div>
<div><input class="form-control" name="name"></div>
</label>
</div>
<div class="form-group">
<label>
<div><span><%-lang['Indifference']%></span></div>
<div><input class="form-control" name="sensitivity"></div>
</label>
</div>
<div class="form-group">
<label>
<div><span><%-lang['Max Indifference']%></span></div>
<div><input class="form-control" name="max_sensitivity"></div>
</label>
</div>
<div class="form-group">
<label>
<div><span><%-lang['Trigger Threshold']%></span></div>
<div><input class="form-control" name="threshold"></div>
</label>
</div>
<div class="form-group">
<label>
<div><span><%-lang['Color Threshold']%></span></div>
<div><input class="form-control" name="color_threshold"></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang.Points%></span></div></label>
@ -64,4 +80,4 @@
</div>
</form>
</div>
</div>
</div>

View file

@ -30,14 +30,14 @@
<label><div><span><%-lang['Enabled']%></span></div>
<div><select class="form-control" detail="factorAuth">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang.Email%></span></div>
<div><select class="form-control" detail="factor_mail">
<option value="1" selected><%-lang.Yes%></option>
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
@ -46,7 +46,7 @@
<label><div><span><%-lang.Discord%></span></div>
<div><select class="form-control" detail="factor_discord">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
@ -144,7 +144,7 @@
<label><div><span><%-lang['Popout Monitor on Event']%></span></div>
<div><select class="form-control" detail="event_mon_pop">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
@ -194,11 +194,34 @@
<div class="form-group">
<label><div><span><%-lang.Autosave%></span></div>
<div><select class="form-control" detail="webdav_save">
<option value="0"><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Save Links to Database']%></span></div>
<div><select class="form-control" detail="webdav_log" selector="h_webdavsld">
<option value="0"><%-lang.No%></option>
<option value="1" selected><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="h_webdavsld_input h_webdavsld_1">
<div class="form-group">
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
<div><select class="form-control" detail="use_webdav_size_limit" selector="h_webdavzl">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="form-group h_webdavzl_input h_webdavzl_1">
<label><div><span><%-lang['Max Storage Amount']%></span></div>
<div><input class="form-control" placeholder="10000" detail="webdav_size_limit"></div>
</label>
</div>
</div>
<div class="form-group">
<label><div><span><%-lang['Save Directory']%></span></div>
<div><input class="form-control" placeholder="/" detail="webdav_dir"></div>
@ -246,26 +269,41 @@
<option value="eu-west-1">EU (Ireland)</option>
<option value="eu-west-2">EU (London)</option>
<option value="eu-west-3">EU (Paris)</option>
<option value="sa-east-1">South America (São Paulo)</option>
<option value="sa-east-1">South America (São Paulo)</option>
</select></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang.Autosave%></span></div>
<div><select class="form-control" detail="aws_s3_save">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Save Links to Database']%></span></div>
<div><select class="form-control" detail="aws_s3_log">
<option value="0"><%-lang.No%></option>
<option value="1" selected><%-lang.Yes%></option>
<div><select class="form-control" detail="aws_s3_log" selector="h_s3sld">
<option value="0"><%-lang.No%></option>
<option value="1" selected><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="h_s3sld_input h_s3sld_1">
<div class="form-group">
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
<div><select class="form-control" detail="use_aws_s3_size_limit" selector="h_s3zl">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="form-group h_s3zl_input h_s3zl_1">
<label><div><span><%-lang['Max Storage Amount']%></span></div>
<div><input class="form-control" placeholder="10000" detail="aws_s3_size_limit"></div>
</label>
</div>
</div>
<div class="form-group">
<label><div><span><%-lang['Save Directory']%></span></div>
<div><input class="form-control" placeholder="" detail="aws_s3_dir"></div>
@ -273,14 +311,72 @@
</div>
</div>
<% } %>
<% if(details.use_bb_b2!=='0'){ %>
<div class="form-group-group forestgreen">
<h4><%-lang['Backblaze B2']%></h4>
<div class="form-group">
<label><div><span><%-lang.Bucket%></span></div>
<div><input class="form-control" detail="bb_b2_bucket" placeholder="Example : slippery-seal"></div>
</label>
</div>
<div class="row">
<div class="form-group col-md-12">
<label><div><span><%-lang.accountId%></span></div>
<div><input class="form-control" detail="bb_b2_accountId"></div>
</label>
</div>
<div class="form-group col-md-12">
<label><div><span><%-lang.applicationKey%></span></div>
<div><input class="form-control" type="password" detail="bb_b2_applicationKey"></div>
</label>
</div>
</div>
<div class="form-group">
<label><div><span><%-lang.Autosave%></span></div>
<div><select class="form-control" detail="bb_b2_save">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Save Links to Database']%></span></div>
<div><select class="form-control" detail="bb_b2_log" selector="h_b2sld">
<option value="0"><%-lang.No%></option>
<option value="1" selected><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="h_b2sld_input h_b2sld_1">
<div class="form-group">
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
<div><select class="form-control" detail="use_bb_b2_size_limit" selector="h_b2zl">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="form-group h_b2zl_input h_b2zl_1">
<label><div><span><%-lang['Max Storage Amount']%></span></div>
<div><input class="form-control" placeholder="10000" detail="bb_b2_size_limit"></div>
</label>
</div>
</div>
<div class="form-group">
<label><div><span><%-lang['Save Directory']%></span></div>
<div><input class="form-control" placeholder="" detail="bb_b2_dir"></div>
</label>
</div>
</div>
<% } %>
<% if(details.use_discordbot!=='0'){ %>
<div class="form-group-group forestgreen">
<h4><%-lang['Discord Bot']%></h4>
<div class="form-group">
<label><div><span><%-lang.Enabled%></span></div>
<div><select class="form-control" detail="discordbot" selector="u_discord_bot">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
@ -304,8 +400,8 @@
<div class="form-group">
<label><div><span><%-lang.Enable%></span></div>
<div><select class="form-control" detail="ldap_enable" selector="ldap_i">
<option value="0"><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
@ -349,7 +445,7 @@
<div class="form-group">
<label><div><span><%-lang['Force Monitors Per Row']%></span></div>
<div><select class="form-control" localStorage="montage_use" selector="st_force_mon_rows">
<option value="1"><%-lang.Yes%></option>
<option value="1"><%-lang.Yes%></option>
<option value="0" selected><%-lang.No%></option>
</select></div>
</label>
@ -362,15 +458,15 @@
<div class="form-group">
<label><div><span><%-lang['Browser Console Log']%></span></div>
<div><select class="form-control" localStorage="browserLog">
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
<option value="0" selected><%-lang.No%></option>
<option value="1"><%-lang.Yes%></option>
</select></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Get Logs to Client']%></span></div>
<div><select class="form-control" detail="get_server_log">
<option value="1" selected><%-lang.Yes%></option>
<option value="1" selected><%-lang.Yes%></option>
<option value="0"><%-lang.No%></option>
</select></div>
</label>
@ -398,4 +494,4 @@
</div>
</form>
</div>
</div>
</div>

View file

@ -1,5 +1,5 @@
<!--Videos List Window-->
<div class="modal full fade" id="videos_viewer" role="dialog" aria-labelledby="videos_viewerLabel" aria-hidden="true">
<div class="modal full fade dark" id="videos_viewer" role="dialog" aria-labelledby="videos_viewerLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<form class="modal-content">
<div class="modal-header">
@ -21,6 +21,16 @@
<div><input id="videos_viewer_limit" value="100" class="form-control" placeholder="0 for No Limit" localStorage="videosViewerLimit" /></div>
</label>
</div>
<div class="form-group">
<label><div><span><%-lang['Video Set']%></span></div>
<div>
<select class="form-control" id="videos_viewer_set">
<option value="local">Local</option>
<option value="cloud">Cloud</option>
</select>
</div>
</label>
</div>
<div id="videos_viewer_preview" class="text-center"></div>
</div>
<div class="col-md-9">
@ -31,8 +41,8 @@
<div class="modal-footer">
<div class="row">
<div class="col-md-4 text-left">
<a class="btn btn-danger delete_selected"><i class="fa fa-trash-o"></i> &nbsp; <%-lang['Delete']%></a>
<a class="btn btn-default export_selected"><i class="fa fa-folder-o"></i> &nbsp; <%-lang['Zip and Download']%></a>
<a class="btn btn-danger delete_selected"><i class="fa fa-trash-o"></i> &nbsp; <%-lang['Delete']%></a>
<a class="btn btn-default export_selected"><i class="fa fa-folder-o"></i> &nbsp; <%-lang['Zip and Download']%></a>
</div>
<div class="col-md-4">
<div class="text-center" id="videos_viewer_pages"></div>
@ -66,4 +76,4 @@
</div>
</div>
</div>
</div>
</div>

View file

@ -175,7 +175,7 @@ $(document).ready(function(){
$.shinobi.mon[d.id].Base64.disconnect()
}
if($.shinobi.mon[d.id].Poseidon){
$.shinobi.mon[d.id].Poseidon.destroy()
$.shinobi.mon[d.id].Poseidon.stop()
}
if ($.shinobi.mon[d.id].h265Player) {
$.shinobi.mon[d.id].h265Player.stop()
@ -253,13 +253,19 @@ $(document).ready(function(){
var stream = $('#SHINOBI_'+d.ke+'_'+d.id+' .stream-element');
if($.shinobi.mon[d.id].details.stream_flv_type==='ws'){
var createPoseidon = function(){
var onPoseidonError = function(){
// setTimeout(function(){
// $.ccio.cx({f:'monitor',ff:'watch_on',id:d.id},user)
// },2000)
}
$.shinobi.mon[d.id].Poseidon = new Poseidon({
video: stream[0],
auth_token:'<%=data.auth%>',
ke:d.ke,
uid:'<%=data.uid%>',
id:d.id,
url: '<%=data.url%>'
url: '<%=data.url%>',
onError : onPoseidonError
});
$.shinobi.mon[d.id].Poseidon.start();
$.shinobi.mon[d.id].Poseidon._socket.on('data',function(res){

View file

@ -1,6 +1,7 @@
<% var details=JSON.parse($user.details) %>
<% var details = JSON.parse($user.details) %>
<% include blocks/header %>
<script>var $user=<%- JSON.stringify($user) %>;</script>
<script>var $user = <%- JSON.stringify($user) %>;</script>
<script>var lang = <%- JSON.stringify(lang) %>;</script>
<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">
@ -194,5 +195,6 @@
<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 src="<%-originalURL%>libs/js/basic.js"></script>
<script><% include ../libs/js/main.dash2.js %></script>
<% include blocks/help.ejs %>

View file

@ -22,6 +22,11 @@
<div class="col-lg-12">
<form id="login-form" method="post" style="display: block;">
<input type="hidden" name="machineID" id="machineID" value="">
<% var message,timeLeft;if(message){ %>
<div class="form-group text-center monospace">
<%= message %>
</div>
<% } %>
<div class="form-group">
<input type="text" name="mail" id="email" tabindex="1" class="monospace form-control" placeholder="Email" value="">
</div>

View file

@ -14,6 +14,7 @@
<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" />
<link href="<%-originalURL%>libs/css/super-page.css" 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>
@ -31,7 +32,7 @@
<nav id="main-nav" class="navbar navbar-expand-lg bg-primary fixed-top" color-on-scroll="400">
<div class="container">
<div class="navbar-translate">
<a tabindex="1" class="navbar-brand logout" href="/" data-placement="bottom" target="_blank">
<a tabindex="1" class="navbar-brand logout" style="outline:0" href="/" data-placement="bottom">
<%-lang.superAdminTitle%>
</a>
<button class="navbar-toggler navbar-toggler" type="button" data-toggle="collapse" data-target="#navigation" aria-controls="navigation-index" aria-expanded="false" aria-label="Toggle navigation">
@ -69,6 +70,9 @@
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#system" role="tab">Controls and Logs</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#changeSuperPreferences" role="tab">Preferences</a>
</li>
</ul>
<div class="card-body">
<!-- Tab panes -->
@ -96,15 +100,10 @@
<div class="collapse navbar-collapse">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link add" href="javascript:$.conf.e.submit()">
<a class="nav-link submit">
<p><i class="fa fa-check"></i> <%-lang.Save%></p>
</a>
</li>
<li class="nav-item">
<a class="nav-link add" href="javascript:$.conf.e.submit()">
<p class="msg"></p>
</a>
</li>
</ul>
</div>
</div>
@ -117,7 +116,7 @@
</div>
</form>
</div>
<div class="tab-pane" id="system" role="tabpanel">
<div class="tab-pane text-left" id="system" role="tabpanel">
<nav class="navbar navbar-rounded navbar-expand-lg bg-primary">
<div class="container">
<div class="collapse navbar-collapse">
@ -157,6 +156,9 @@
<table class="table table-striped"></table>
</div>
</div>
<div class="tab-pane text-left" id="changeSuperPreferences" role="tabpanel">
<% include blocks/changeSuperPreferences.ejs %>
</div>
</div>
</div>
</div>
@ -209,26 +211,33 @@ switch($user.lang){
$.ccio.ws=io(location.origin);
$.ccio.cx=function(x){return $.ccio.ws.emit('super',x)}
$.ccio.ws.on('connect',function(d){
$.ccio.cx({f:'init',mail:$user.mail,pass:$user.pass});
$.ccio.cx({f:'init',mail:$user.mail,pass:$user.pass})
})
$.ccio.ws.on('f',function(d){
switch(d.f){
case'init_success':
$user.sessionKey = d.superSessionKey
break;
case'log':
$.ccio.tm(4,d.log,'#logs table')
break;
case'save_configuration':
d.msg = 'Saved, Restart Shinobi to apply changes.'
break;
case'save_preferences':
d.msg = 'Saved Preferences'
break;
case'edit_account':
d.msg='Account Edited';
$.each(d.form,function(n,v){
$.ccio.accounts[d.ke][n]=v;
});
$.ccio.accounts[d.ke][n]=v
})
$('[ke="'+d.ke+'"] .mail').text(d.form.mail)
break;
case'add_account':
d.msg='Account Created';
$.ccio.tm(0,d,'#accounts table')
$.aN.selected=$.ccio.accounts[d.ke];
$.aN.selected = $.ccio.accounts[d.ke]
break;
case'delete_account':
$('#accounts table tr[ke="'+d.ke+'"]').remove()
@ -328,10 +337,10 @@ $.logs={e:$('#logs')}
var stringedConfig = JSON.stringify(plainConfig)
%>
var config = <%- JSON.stringify(plainConfig) || [] %>
$.conf={e:$('#conf_json')};
$.conf={e:$('#config')};
$.conf.f = $.conf.e.find('form')
$.conf.configForHumans=$('#configForHumans')
$.conf.draw=$.conf.e.find('[name="json"]')
$.conf.msg=$.conf.e.find('.msg')
$.conf.valid=1;
$.conf.jsonToFields = function(){
// var tmp = ''
@ -358,7 +367,10 @@ $.conf.draw.keyup(function(){
}
new PNotify({text:msg,type:color})
})
$.conf.e.submit(function(e){
$.conf.e.find('.submit').click(function(e){
$.conf.f.submit()
})
$.conf.f.submit(function(e){
e.preventDefault()
if($.conf.valid===1){
$.confirm.e.modal('show');
@ -367,7 +379,12 @@ $.conf.e.submit(function(e){
e.html+='<pre>'+JSON.stringify($.parseJSON($.conf.draw.val()),null,3)+'</pre>'
$.confirm.body.html(e.html)
$.confirm.click({title:'Save',class:'btn-success'},function(){
$.ccio.cx({f:'system',ff:'configure',data:$.parseJSON($.conf.draw.val())})
$.post('<%=originalURL%><%=config.webPaths.superApiPrefix%>'+$user.sessionKey+'/system/configure',{
data: $.conf.draw.val()
},function(data){
// console.log(data)
})
// $.ccio.cx({f:'system',ff:'configure',data:$.parseJSON($.conf.draw.val())})
});
}else{
new PNotify({text:'Invalid JSON Syntax, Cannot Save.',type:'error'})
@ -418,7 +435,7 @@ $.conf.e.on('keyup','.config-row input',function(){
$.conf.draw.val(JSON.stringify(newConfig,null,3))
console.log(newConfig)
})
$.conf.e.ready(function(){
$.conf.f.ready(function(){
$.conf.jsonToFields()
})
//sys controls
@ -431,7 +448,10 @@ $.system.e.find('[system]').click(function(e){
e.html='Do you want to delete these logs? User logs will <b>not</b> be deleted.'
$.confirm.body.html(e.html)
$.confirm.click({title:'Delete',class:'btn-danger'},function(){
$.ccio.cx({f:'logs',ff:'delete',ke:'$'})
// $.ccio.cx({f:'logs',ff:'delete',ke:'$'})
$.get('<%=originalURL%><%=config.webPaths.superApiPrefix%>'+$user.sessionKey+'/logs/delete',function(data){
console.log(data)
})
$.logs.e.find('table').empty()
});
break;
@ -440,8 +460,11 @@ $.system.e.find('[system]').click(function(e){
$.confirm.title.html('Update Shinobi?')
$.confirm.body.html('Updating Shinobi means overwriting files. If you have modified any files yourself you should update Shinobi manually.')
$.confirm.click({title:'Update',class:'btn-danger'},function(){
$.ccio.cx({f:'system',ff:'update'})
});
// $.ccio.cx({f:'system',ff:'update'})
$.get('<%=originalURL%><%=config.webPaths.superApiPrefix%>'+$user.sessionKey+'/system/update',function(data){
console.log(data)
})
})
break;
}
})
@ -466,9 +489,31 @@ $.system.e.find('[restart]').click(function(e){
$.confirm.title.html('Restart?')
$.confirm.body.html(e.html)
$.confirm.click({title:'Restart',class:'btn-danger'},function(){
$.ccio.cx({f:'system',ff:'restart',target:e.target})
// $.ccio.cx({f:'system',ff:'restart',target:e.target})
$.get('<%=originalURL%><%=config.webPaths.superApiPrefix%>'+$user.sessionKey+'/system/restart/'+encodeURIComponent(e.target),function(data){
console.log(data)
})
});
})
$.changeSuperPreferences = {
window : $('#changeSuperPreferences')
}
$.changeSuperPreferences.form = $.changeSuperPreferences.window.find('form')
$.changeSuperPreferences.form.find('.submit').click(function(){
$.changeSuperPreferences.form.submit()
})
$.changeSuperPreferences.form.submit(function(e){
e.preventDefault()
var formValues = $(this).serializeObject()
// $.ccio.cx({f:'accounts',ff:'saveSuper',form:formValues})
$.post('<%=originalURL%><%=config.webPaths.superApiPrefix%>'+$user.sessionKey+'/accounts/saveSettings',{
data: JSON.stringify(formValues)
},function(data){
console.log(data)
})
return false
})
////
$(document).ready(function(){
$.each(<%-JSON.stringify(Logs)%>,function(n,v){
$.ccio.tm(4,v,'#logs table')
@ -478,7 +523,7 @@ $(document).ready(function(){
$('body')
.on('click','.logout',function(e){
localStorage.removeItem('ShinobiLogin_'+location.host);location.href='/';
})
})
</script>
<% include blocks/mainpermissions.ejs %>
</html>
</html>