Added admin groups and delete users events. Also fixed missing creation of /admin group in nextcloud.

root 2021-06-06 23:34:19 +02:00
parent 90ef56bbdf
commit cc1d33efef
8 changed files with 220 additions and 48 deletions

View File

@ -114,50 +114,56 @@ class Admin():
try:
log.warning('MOODLE: Adding default group admin')
self.moodle.add_system_cohort('admin','system admins')
self.moodle.add_system_cohort('/admin','system admins')
log.warning('MOODLE: OK')
except:
log.warning('MOODLE: Seems to be there already')
try:
log.warning('MOODLE: Adding default group manager')
self.moodle.add_system_cohort('manager','system managers')
self.moodle.add_system_cohort('/manager','system managers')
log.warning('MOODLE: OK')
except:
log.warning('MOODLE: Seems to be there already')
try:
log.warning('MOODLE: Adding default group teacher')
self.moodle.add_system_cohort('teacher','system teacher')
self.moodle.add_system_cohort('/teacher','system teacher')
log.warning('MOODLE: OK')
except:
log.warning('MOODLE: Seems to be there already')
try:
log.warning('MOODLE: Adding default group student')
self.moodle.add_system_cohort('student','system student')
self.moodle.add_system_cohort('/student','system student')
log.warning('MOODLE: OK')
except:
log.warning('MOODLE: Seems to be there already')
try:
log.warning('NEXTCLOUD: Adding default group admin')
self.nextcloud.add_group('/admin')
log.warning('NEXTCLOUD: OK')
except ProviderItemExists:
log.warning('NEXTCLOUD: Seems to be there already')
try:
log.warning('NEXTCLOUD: Adding default group manager')
self.nextcloud.add_group('manager')
self.nextcloud.add_group('/manager')
log.warning('NEXTCLOUD: OK')
except ProviderItemExists:
log.warning('NEXTCLOUD: Seems to be there already')
try:
log.warning('NEXTCLOUD: Adding default group teacher')
self.nextcloud.add_group('teacher')
self.nextcloud.add_group('/teacher')
log.warning('NEXTCLOUD: OK')
except ProviderItemExists:
log.warning('NEXTCLOUD: Seems to be there already')
try:
log.warning('NEXTCLOUD: Adding default group student')
self.nextcloud.add_group('student')
self.nextcloud.add_group('/student')
log.warning('NEXTCLOUD: OK')
except ProviderItemExists:
log.warning('NEXTCLOUD: Seems to be there already')
@ -200,7 +206,7 @@ class Admin():
try:
log.warning('NEXTCLOUD: Adding user ddadmin and adding to group admin')
self.nextcloud.add_user(dduser,ddpassword,group='admin',email=ddmail,displayname='DD Admin')
self.nextcloud.add_user(dduser,ddpassword,group='/admin',email=ddmail,displayname='DD Admin')
log.warning('NEXTCLOUD: OK')
except ProviderItemExists:
log.warning('NEXTCLOUD: Seems to be there already')
@ -360,7 +366,7 @@ class Admin():
mgroups=[] if mgroups is None else mgroups
ngroups=[] if ngroups is None else ngroups
kgroups_names=[g['name'] for g in kgroups]
kgroups_names=[g['path'] for g in kgroups]
mgroups_names=[g['name'] for g in mgroups]
ngroups_names=ngroups
@ -369,7 +375,7 @@ class Admin():
groups=[]
for name in all_groups_names:
thegroup={}
keycloak_exists=[g for g in kgroups if g['name'] == name]
keycloak_exists=[g for g in kgroups if g['path'] == name]
if len(keycloak_exists):
thegroup=keycloak_exists[0]
thegroup['keycloak']=True
@ -784,10 +790,15 @@ class Admin():
def delete_user(self,userid):
log.warning('deleting user moodle, nextcloud keycloak')
ev=Events('Deleting user','Deleting from moodle')
self.delete_moodle_user(userid)
ev.update_text('Deleting from nextcloud')
self.delete_nextcloud_user(userid)
ev.update_text('Deleting from keycloak')
self.delete_keycloak_user(userid)
ev.update_text('Syncing data from applications...')
self.resync_data()
ev.update_text('User deleted')
return True
def get_user(self,userid):

View File

@ -90,41 +90,10 @@ $(document).ready(function() {
"width": "10px",
"defaultContent": '<button class="btn btn-xs btn-info" type="button" data-placement="top" ><i class="fa fa-plus"></i></button>'
},
{ "data": "id", "width": "10px" },
{ "data": "keycloak", "width": "10px" },
{ "data": "moodle", "width": "10px" },
{ "data": "nextcloud", "width": "10px" },
{ "data": "name", "width": "10px" },
{ "data": "path", "width": "10px" },
],
"order": [[3, 'asc']],
"columnDefs": [ {
"targets": 2,
"render": function ( data, type, full, meta ) {
if(full.keycloak){
return '<i class="fa fa-check" style="color:lightgreen"></i>'
}else{
return '<i class="fa fa-close" style="color:darkred"></i>'
};
}},
{
"targets": 3,
"render": function ( data, type, full, meta ) {
if(full.moodle){
return '<i class="fa fa-check" style="color:lightgreen"></i>'
}else{
return '<i class="fa fa-close" style="color:darkred"></i>'
};
}},
{
"targets": 4,
"render": function ( data, type, full, meta ) {
if(full.nextcloud){
return '<i class="fa fa-check" style="color:lightgreen"></i>'
}else{
return '<i class="fa fa-close" style="color:darkred"></i>'
};
}},
]
"order": [[2, 'asc']],
// "columnDefs": [ ]
} );
})

View File

@ -0,0 +1,130 @@
$(document).on('shown.bs.modal', '#modalAddDesktop', function () {
modal_add_desktops.columns.adjust().draw();
});
$(document).ready(function() {
$('.btn-global-resync').on('click', function () {
$.ajax({
type: "GET",
url:"api/resync",
success: function(data)
{
table.ajax.reload();
// $("#modalImport").modal('hide');
// users_table.ajax.reload();
// groups_table.ajax.reload();
},
error: function(data)
{
alert('Something went wrong on our side...')
}
});
});
// Open new group modal
$('.btn-new').on('click', function () {
$('#modalAddGroup').modal({
backdrop: 'static',
keyboard: false
}).modal('show');
});
// Send new group form
$('#modalAddGroup #send').on('click', function () {
var form = $('#modalAddGroupForm');
formdata = form.serializeObject()
console.log('NEW GROUP')
console.log(formdata)
// $.ajax({
// type: "POST",
// "url": "/groups_list",
// success: function(data)
// {
// console.log('SUCCESS')
// // $("#modalAddGroup").modal('hide');
// },
// error: function(data)
// {
// alert('Something went wrong on our side...')
// }
// });
});
$('.btn-delete_keycloak').on('click', function () {
$.ajax({
type: "DELETE",
url:"/api/groups/keycloak",
success: function(data)
{
console.log('SUCCESS')
// $("#modalImport").modal('hide');
// users_table.ajax.reload();
// groups_table.ajax.reload();
},
error: function(data)
{
alert('Something went wrong on our side...')
}
});
});
//DataTable Main renderer
var table = $('#groups').DataTable({
"ajax": {
"url": "/api/groups",
"dataSrc": ""
},
"language": {
"loadingRecords": '<i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i><span class="sr-only">Loading...</span>',
"emptyTable": "<h1>You don't have any group created yet.</h1><br><h2>Create one using the +Add new button on top right of this page.</h2>"
},
"rowId": "id",
"deferRender": true,
"columns": [
{
"className": 'details-control',
"orderable": false,
"data": null,
"width": "10px",
"defaultContent": '<button class="btn btn-xs btn-info" type="button" data-placement="top" ><i class="fa fa-plus"></i></button>'
},
{ "data": "id", "width": "10px" },
{ "data": "keycloak", "width": "10px" },
{ "data": "moodle", "width": "10px" },
{ "data": "nextcloud", "width": "10px" },
{ "data": "name", "width": "10px" },
{ "data": "path", "width": "10px" },
],
"order": [[3, 'asc']],
"columnDefs": [ {
"targets": 2,
"render": function ( data, type, full, meta ) {
if(full.keycloak){
return '<i class="fa fa-check" style="color:lightgreen"></i>'
}else{
return '<i class="fa fa-close" style="color:darkred"></i>'
};
}},
{
"targets": 3,
"render": function ( data, type, full, meta ) {
if(full.moodle){
return '<i class="fa fa-check" style="color:lightgreen"></i>'
}else{
return '<i class="fa fa-close" style="color:darkred"></i>'
};
}},
{
"targets": 4,
"render": function ( data, type, full, meta ) {
if(full.nextcloud){
return '<i class="fa fa-check" style="color:lightgreen"></i>'
}else{
return '<i class="fa fa-close" style="color:darkred"></i>'
};
}},
]
} );
})

View File

@ -222,7 +222,7 @@ $(document).ready(function() {
"columnDefs": [ {
"targets": 1,
"render": function ( data, type, full, meta ) {
return '<object data="/static/img/missing.jpg" type="image/jpg" width="25" height="25"><img src="/avatar/'+full.id+'" title="'+full.id+'" width="25" height="25"></object>'
return '<img src="/avatar/'+full.id+'" title="'+full.id+'" width="25" height="25">'
}},
{
"targets": 6,

View File

@ -27,10 +27,6 @@
<thead>
<tr>
<th></th>
<th>Id</th>
<th>Keycloak</th>
<th>Moodle</th>
<th>Nextcloud</th>
<th>Name</th>
<th>Path</th>
</tr>

View File

@ -0,0 +1,59 @@
<!-- extend base layout -->
{% extends "base.html" %}
{% block css %}
<!-- Ion.RangeSlider -->
<link href="/vendors/normalize-css/normalize.css" rel="stylesheet">
<!-- Switchery -->
<link href="/vendors/switchery/dist/switchery.min.css" rel="stylesheet">
{% endblock %}
{% block content %}
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h3><i class="fa fa-users"></i> Groups</h3>
<ul class="nav navbar-right panel_toolbox">
<li>
<a class="btn-new"><span style="color: #5499c7; "><i class="fa fa-plus"></i> Add new</span></a>
<!-- <a class="btn-delete_keycloak"><span style="color: #c75454; "><i class="fa fa-cross"></i> Delete all keycloak</span></a> -->
</li>
</ul>
<div class="clearfix"></div>
</div>
<div class="x_content">
<p class="text-muted font-13 m-b-30"></p>
<table id="groups" class="table" width="100%">
<thead>
<tr>
<th></th>
<th>Id</th>
<th>Keycloak</th>
<th>Moodle</th>
<th>Nextcloud</th>
<th>Name</th>
<th>Path</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
{% include 'pages/modals/groups_modals.html' %}
{% endblock %}
{% block pagescript %}
<!-- Ion.RangeSlider -->
<script src="/vendors/ion.rangeSlider/js/ion.rangeSlider.min.js"></script>
<!-- iCheck -->
<script src="/vendors/iCheck/icheck.min.js"></script>
<!-- Switchery -->
<script src="/vendors/switchery/dist/switchery.min.js"></script>
<!-- Desktops sse & modals -->
<script src="/static/js/sysadmin/groups.js"></script>
{% endblock %}

View File

@ -21,6 +21,7 @@
<h3>System Admin</h3>
<div class="clearfix"></div>
<li><a href="/sysadmin/users"><i class="fa fa-user"></i> SysAdminUsers</span></a></li>
<li><a href="/sysadmin/groups"><i class="fa fa-user"></i> SysAdminGroups</span></a></li>
<li><a href="/sysadmin/external"><i class="fa fa-external-link"></i> External</a></li>
{% endif %}
</ul>

View File

@ -72,7 +72,13 @@ def avatar(userid):
@login_required
def web_sysadmin_users():
return render_template('pages/sysadmin/users.html', title="SysAdmin Users", nav="SysAdminUsers")
@app.route('/sysadmin/groups')
@login_required
def web_sysadmin_groups():
return render_template('pages/sysadmin/groups.html', title="SysAdmin Groups", nav="SysAdminGroups")
@app.route('/sysadmin/external')
@login_required
## SysAdmin role