diff --git a/admin/src/admin/lib/admin.py b/admin/src/admin/lib/admin.py index 66c6ff5..4ce569c 100644 --- a/admin/src/admin/lib/admin.py +++ b/admin/src/admin/lib/admin.py @@ -9,22 +9,26 @@ import traceback from .nextcloud_exc import * from .helpers import filter_roles_list, filter_roles_listofdicts + +socketio = SocketIO(app) + class Admin(): def __init__(self): self.keycloak=Keycloak(verify=app.config['VERIFY']) self.moodle=Moodle(verify=app.config['VERIFY']) self.nextcloud=Nextcloud(verify=app.config['VERIFY']) - # self.internal={'users':self.get_mix_users(), - # 'groups':self.get_mix_groups(), - # 'roles':[]} + self.internal={} + self.resync_data() self.external={'users':[], 'groups':[], 'roles':[]} - #pprint(self.get_moodle_groups()) - # pprint(self.get_moodle_users()) - # pprint(self.get_keycloak_users()) - # pprint(self.get_nextcloud_users()) + + def resync_data(self): + self.internal={'users':self._get_mix_users(), + 'groups':self._get_mix_groups(), + 'roles':self._get_roles()} + return True def get_moodle_users(self): return self.moodle.get_users_with_groups_and_roles() @@ -85,6 +89,9 @@ class Admin(): # return self.internal['users'] def get_mix_users(self): + return self.internal['users'] + + def _get_mix_users(self): kusers=self.get_keycloak_users() musers=self.get_moodle_users() nusers=self.get_nextcloud_users() @@ -131,6 +138,9 @@ class Admin(): return users def get_roles(self): + return self.internal['roles'] + + def _get_roles(self): return filter_roles_listofdicts(self.keycloak.get_roles()) def get_keycloak_groups(self): @@ -145,10 +155,10 @@ class Admin(): log.warning('Loading nextcloud groups... can take a long time...') return self.nextcloud.get_groups_list() - # def get_ram_groups(self): - # return self.internal['groups'] - def get_mix_groups(self): + return self.internal['groups'] + + def _get_mix_groups(self): kgroups=self.get_keycloak_groups() mgroups=self.get_moodle_groups() ngroups=self.get_nextcloud_groups() @@ -236,15 +246,13 @@ class Admin(): self.keycloak.add_user(u['username'],u['first'],u['last'],u['email'],'1Provaprovaprova',group=u['groups'][0]) def sync_to_moodle(self): - users=self.get_mix_users() - for u in users: + for u in self.internal['users']: if not u['moodle']: log.error('Creating moodle user: '+u['username']) self.moodle.create_user(u['email'],u['username'],'-1Provaprovaprova',u['first'],u['last']) def sync_to_nextcloud(self): - users=self.get_mix_users() - for u in users: + for u in self.internal['users']: if not u['nextcloud']: log.error('Creating nextcloud user: '+u['username']) group=u['keycloak_groups'][0] if len(u['keycloak_groups']) else False @@ -258,21 +266,25 @@ class Admin(): #
Las contraseñas deben tener al menos 1 dígito(s).
Las contraseñas deben tener al menos 1 mayúscula(s).
Las contraseñas deben tener al menos 1 caracter(es) no alfanumérico(s) como *,-, def delete_keycloak_users(self): - users=self.get_keycloak_users() - for u in users: + for u in self.internal['users']: + if not u['keycloak']: continue # Do not remove admin users!!! What to do with managers??? if 'admin' in u['roles']: continue if 'manager' in u['roles']: continue log.info('Removing keycloak user: '+u['username']) try: self.keycloak.delete_user(u['id']) + socketio.emit('update', + json.dumps({'status':True,'item':'user','action':'delete','itemdata':u}), + namespace='/isard-sso-admin/sio', + room='admin') except: log.error(traceback.format_exc()) log.warning('Could not remove user: '+u['username']) def delete_keycloak_groups(self): - groups=self.get_keycloak_groups() - for g in groups: + for g in self.internal['groups']: + if not g['keycloak']: continue # Do not remove admin group. It should not exist in keycloak, only in nextcloud if g['name'] == ['admin']: continue log.info('Removing keycloak group: '+g['name']) diff --git a/admin/src/admin/lib/keycloak.py b/admin/src/admin/lib/keycloak.py index 7195023..8ad0f63 100644 --- a/admin/src/admin/lib/keycloak.py +++ b/admin/src/admin/lib/keycloak.py @@ -127,11 +127,11 @@ class Keycloak(): log.error(uid) if group: try: - gid=self.keycloak_admin.get_group_by_path(path='/'+group,search_in_subgroups=False)['id'] + gid=self.keycloak_admin.get_group_by_path(path=group,search_in_subgroups=False)['id'] log.error('group created with gid: '+str(gid)) except: self.keycloak_admin.create_group({"name":group}) - gid=self.keycloak_admin.get_group_by_path('/'+group)['id'] + gid=self.keycloak_admin.get_group_by_path(group)['id'] log.error(gid) self.keycloak_admin.group_user_add(uid,gid) diff --git a/admin/src/admin/static/dd.js b/admin/src/admin/static/dd.js index 8f35d59..c3652cb 100644 --- a/admin/src/admin/static/dd.js +++ b/admin/src/admin/static/dd.js @@ -350,5 +350,4 @@ $(document).ready(function() { $BOX_PANEL.remove(); }); -}); - +}); \ No newline at end of file diff --git a/admin/src/admin/static/js/groups.js b/admin/src/admin/static/js/groups.js index 6a602b4..d75762c 100644 --- a/admin/src/admin/static/js/groups.js +++ b/admin/src/admin/static/js/groups.js @@ -5,6 +5,24 @@ $(document).on('shown.bs.modal', '#modalAddDesktop', function () { $(document).ready(function() { + $('.btn-global-resync').on('click', function () { + $.ajax({ + type: "GET", + url:"/isard-sso-admin/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...') + } + }); + }); + $('.btn-new').on('click', function () { $("#modalAdd")[0].reset(); $('#modalAddDesktop').modal({ @@ -14,6 +32,24 @@ $(document).ready(function() { $('#modalAdd').parsley(); }); + $('.btn-delete_keycloak').on('click', function () { + $.ajax({ + type: "DELETE", + url:"/isard-sso-admin/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": { diff --git a/admin/src/admin/static/js/roles.js b/admin/src/admin/static/js/roles.js index 83e4b31..a782547 100644 --- a/admin/src/admin/static/js/roles.js +++ b/admin/src/admin/static/js/roles.js @@ -5,6 +5,24 @@ $(document).on('shown.bs.modal', '#modalAddDesktop', function () { $(document).ready(function() { + $('.btn-global-resync').on('click', function () { + $.ajax({ + type: "GET", + url:"/isard-sso-admin/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...') + } + }); + }); + $('.btn-new').on('click', function () { $("#modalAdd")[0].reset(); $('#modalAddDesktop').modal({ diff --git a/admin/src/admin/static/js/status_socket.js b/admin/src/admin/static/js/status_socket.js new file mode 100644 index 0000000..81baeaa --- /dev/null +++ b/admin/src/admin/static/js/status_socket.js @@ -0,0 +1,19 @@ + // SocketIO + socket = io.connect(location.protocol+'//' + document.domain + ':' + location.port+'/isard-sso-admin/sio'); + + socket.on('connect', function() { + connection_done(); + console.log('Listening status socket'); + }); + + socket.on('connect_error', function(data) { + connection_lost(); + }); + + socket.on('update', function(data) { + var data = JSON.parse(data); + console.log('Status update') + console.log(data) + // var data = JSON.parse(data); + // drawUserQuota(data); + }); diff --git a/admin/src/admin/static/js/users.js b/admin/src/admin/static/js/users.js index 3298d8c..6bf1298 100644 --- a/admin/src/admin/static/js/users.js +++ b/admin/src/admin/static/js/users.js @@ -5,6 +5,25 @@ $(document).on('shown.bs.modal', '#modalAddDesktop', function () { $(document).ready(function() { + $('.btn-global-resync').on('click', function () { + $.ajax({ + type: "GET", + url:"/isard-sso-admin/resync", + success: function(data) + { + console.log('Reloaded') + table.ajax.reload(); + // $("#modalImport").modal('hide'); + // users_table.ajax.reload(); + // groups_table.ajax.reload(); + }, + error: function(data) + { + alert('Something went wrong on our side...') + } + }); + }); + $('.btn-new').on('click', function () { $("#modalAdd")[0].reset(); $('#modalAddDesktop').modal({ diff --git a/admin/src/admin/static/templates/base.html b/admin/src/admin/static/templates/base.html index 2901cf9..30ac39c 100644 --- a/admin/src/admin/static/templates/base.html +++ b/admin/src/admin/static/templates/base.html @@ -19,8 +19,6 @@ - - @@ -116,8 +114,6 @@ - - diff --git a/admin/src/admin/static/templates/header.html b/admin/src/admin/static/templates/header.html index 6e6e6c0..6fb233c 100644 --- a/admin/src/admin/static/templates/header.html +++ b/admin/src/admin/static/templates/header.html @@ -1,5 +1,5 @@
- +
diff --git a/admin/src/admin/static/templates/pages/about.html b/admin/src/admin/static/templates/pages/about.html index eeff9b6..35b432c 100644 --- a/admin/src/admin/static/templates/pages/about.html +++ b/admin/src/admin/static/templates/pages/about.html @@ -53,5 +53,5 @@ {% block pagescript %} - + {% endblock %} diff --git a/admin/src/admin/static/templates/pages/groups.html b/admin/src/admin/static/templates/pages/groups.html index d8edefb..5d3c054 100644 --- a/admin/src/admin/static/templates/pages/groups.html +++ b/admin/src/admin/static/templates/pages/groups.html @@ -16,6 +16,7 @@
diff --git a/admin/src/admin/static/templates/sidebar.html b/admin/src/admin/static/templates/sidebar.html index 91e9f9c..f264db2 100644 --- a/admin/src/admin/static/templates/sidebar.html +++ b/admin/src/admin/static/templates/sidebar.html @@ -12,7 +12,7 @@

Administration