diff --git a/admin/src/admin/lib/admin.py b/admin/src/admin/lib/admin.py
index 8c9fe21..601f42a 100644
--- a/admin/src/admin/lib/admin.py
+++ b/admin/src/admin/lib/admin.py
@@ -3,6 +3,7 @@ from .keycloak import Keycloak
from .moodle import Moodle
from .nextcloud import Nextcloud
+import logging as log
from pprint import pprint
class Admin():
@@ -20,21 +21,26 @@ class Admin():
# pprint(self.get_nextcloud_users())
def get_moodle_users(self):
- users = self.moodle.get_user_by('email','%%')['users']
+ users = self.moodle.get_users_with_groups_and_roles()
+ #self.moodle.get_user_by('email','%%')['users']
return [{"id":u['id'],
"username":u['username'],
"first": u['firstname'],
"last": u['lastname'],
- "email": u['email']}
+ "email": u['email'],
+ "groups": u['groups'],
+ "roles": u['roles']}
for u in users]
def get_keycloak_users(self):
- users = self.keycloak.get_users()
+ users = self.keycloak.get_users_with_groups_and_roles()
return [{"id":u['id'],
"username":u['username'],
"first": u.get('firstName',None),
"last": u.get('lastName',None),
- "email": u.get('email','')}
+ "email": u.get('email',''),
+ "groups": u['groups'],
+ "roles": u['roles']}
for u in users]
def get_nextcloud_users(self):
@@ -46,7 +52,9 @@ class Admin():
"username":u['id'],
"first": u['displayname'],
"last": None,
- "email": u['email']})
+ "email": u['email'],
+ "groups": u['groups'],
+ "roles": []})
return users_list
def get_mix_users(self):
@@ -67,24 +75,30 @@ class Admin():
if len(keycloak_exists):
theuser=keycloak_exists[0]
theuser['keycloak']=True
+ theuser['keycloak_groups']=keycloak_exists[0]['groups']
else:
theuser['id']=False
theuser['keycloak']=False
+ theuser['keycloak_groups']=[]
moodle_exists=[u for u in musers if u['username'] == username]
if len(moodle_exists):
theuser={**moodle_exists[0], **theuser}
theuser['moodle']=True
+ theuser['moodle_groups']=moodle_exists[0]['groups']
else:
theuser['moodle']=False
+ theuser['moodle_groups']=[]
nextcloud_exists=[u for u in nusers if u['username'] == username]
if len(nextcloud_exists):
theuser={**nextcloud_exists[0], **theuser}
theuser['nextcloud']=True
+ theuser['nextcloud_groups']=nextcloud_exists[0]['groups']
else:
theuser['nextcloud']=False
-
+ theuser['nextcloud_groups']=[]
+ del theuser['groups']
users.append(theuser)
return users
@@ -159,17 +173,21 @@ class Admin():
return self.external['roles']
def upload_json(self,data):
- pass
+ users=[]
+ for u in data['data']['users']:
+ users.append({'provider':data['provider'],
+ 'id':u['id'],
+ 'email': u['primaryEmail'],
+ 'firstname': u['name']['givenName'],
+ 'lastname': u['name']['givenName'],
+ 'username': u['customerId'],
+ 'groups':[u['orgUnitPath']],
+ 'roles':[]})
+ self.external['users']=set(self.external['users']+users)
+ return self.external['users']
+
+
# with open(os.path.join(app.root_path, "../custom/jsons/google_all_imported_espinalt.json"),"r") as crt:
# pprint(data)
-# 'email': 'email',
-# 'firstname': 'users',
-# 'format': 'json',
-# 'groupid': 'users',
-# 'groupname': 'users',
-# 'lastname': 'users',
-# 'provider': 'asdfsad',
-# 'usergroup': 'users',
-# 'userid': 'users',
-# 'username': 'users'}
+
diff --git a/admin/src/admin/lib/keycloak.py b/admin/src/admin/lib/keycloak.py
index 6a54e75..b209260 100644
--- a/admin/src/admin/lib/keycloak.py
+++ b/admin/src/admin/lib/keycloak.py
@@ -4,9 +4,10 @@ import time ,os
from admin import app
from datetime import datetime, timedelta
-import logging
+import logging as log
import traceback
import yaml, json
+from pprint import pprint
from jinja2 import Environment, FileSystemLoader
@@ -64,6 +65,15 @@ class Keycloak():
self.connect()
return self.keycloak_admin.get_users({})
+ def get_users_with_groups_and_roles(self):
+ self.connect()
+ users=self.keycloak_admin.get_users({})
+ for user in users:
+ log.error(user)
+ user['groups']=[g['path'] for g in self.keycloak_admin.get_user_groups(user_id=user['id'])]
+ user['roles']= [r['name'] for r in self.keycloak_admin.get_realm_roles_of_user(user_id=user['id'])]
+ return users
+
def add_user(self,username,first,last,email,password):
# Returns user id
self.connect()
@@ -84,6 +94,10 @@ class Keycloak():
self.connect()
return self.keycloak_admin.delete_user(user_id=userid)
+ def get_user_groups(self,userid):
+ self.connect()
+ return self.keycloak_admin.get_user_groups(user_id=userid)
+
## GROUPS
def get_groups(self,with_subgroups=True):
self.connect()
@@ -94,8 +108,7 @@ class Keycloak():
if len(group['subGroups']):
for sg in group['subGroups']:
subgroups.append(sg)
- # import pprint
- # return groups+subgroups
+ return groups+subgroups
def get_group(self,path,recursive=True):
self.connect()
diff --git a/admin/src/admin/lib/moodle.py b/admin/src/admin/lib/moodle.py
index 087f2e9..f122a4a 100644
--- a/admin/src/admin/lib/moodle.py
+++ b/admin/src/admin/lib/moodle.py
@@ -1,5 +1,8 @@
from requests import get, post
from admin import app
+
+import logging as log
+
# Module variables to connect to moodle api
class Moodle():
@@ -68,6 +71,14 @@ class Moodle():
user = self.call('core_user_get_users', criteria=criteria)
return user
+ def get_users_with_groups_and_roles(self):
+ users=self.get_user_by('email','%%')['users']
+ for user in users:
+ user['groups']=[c['name'] for c in self.get_user_cohorts(user['id'])]
+ user['roles']=[]
+ log.error(users)
+ return users
+
def enroll_user_to_course(self, user_id, course_id, role_id=5):
# 5 is student
data = [{'roleid': role_id, 'userid': user_id, 'courseid': course_id}]
@@ -80,4 +91,15 @@ class Moodle():
def get_cohorts(self):
cohorts = self.call('core_cohort_get_cohorts')
- return cohorts
\ No newline at end of file
+ return cohorts
+
+ def get_cohort_members(self, cohort_id):
+ members = self.call('core_cohort_get_cohort_members', cohortids=[cohort_id])[0]['userids']
+ return members
+
+ def get_user_cohorts(self, user_id):
+ user_cohorts=[]
+ cohorts=self.get_cohorts()
+ for cohort in cohorts:
+ if user_id in self.get_cohort_members(cohort['id']): user_cohorts.append(cohort)
+ return user_cohorts
\ No newline at end of file
diff --git a/admin/src/admin/lib/postup.py b/admin/src/admin/lib/postup.py
index 462a487..bf05492 100644
--- a/admin/src/admin/lib/postup.py
+++ b/admin/src/admin/lib/postup.py
@@ -68,7 +68,20 @@ class Postup():
('dd admin', 1, '', 1, NULL, 1621719763, 1621719850, 'dd_admin', 0, 0);""")
self.pg.update("""INSERT INTO "mdl_external_services_functions" ("externalserviceid", "functionname") VALUES
+ (3, 'core_course_update_courses'),
(3, 'core_user_get_users'),
+ (3, 'core_user_get_users_by_field'),
+ (3, 'core_user_update_picture'),
+ (3, 'core_user_update_users'),
+ (3, 'core_user_delete_users'),
+ (3, 'core_user_create_users'),
+ (3, 'core_cohort_get_cohort_members'),
+ (3, 'core_cohort_add_cohort_members'),
+ (3, 'core_cohort_delete_cohort_members'),
+ (3, 'core_cohort_create_cohorts'),
+ (3, 'core_cohort_delete_cohorts'),
+ (3, 'core_cohort_search_cohorts'),
+ (3, 'core_cohort_update_cohorts'),
(3, 'core_cohort_get_cohorts');""")
self.pg.update("""INSERT INTO "mdl_external_services_users" ("externalserviceid", "userid", "iprestriction", "validuntil", "timecreated") VALUES
diff --git a/admin/src/admin/static/js/external.js b/admin/src/admin/static/js/external.js
index 6335d3d..593eb82 100644
--- a/admin/src/admin/static/js/external.js
+++ b/admin/src/admin/static/js/external.js
@@ -21,7 +21,7 @@ $(document).ready(function() {
$.ajax({
type: "POST",
url:"/isard-sso-admin/external",
- data: formdata,
+ data: JSON.stringify(formdata),
success: function(data)
{
console.log(data)
@@ -54,44 +54,17 @@ $(document).ready(function() {
"width": "10px",
"defaultContent": ''
},
+ { "data": "provider", "width": "10px" },
{ "data": "id", "width": "10px" },
- { "data": "keycloak", "width": "10px" },
- { "data": "moodle", "width": "10px" },
- { "data": "nextcloud", "width": "10px" },
{ "data": "username", "width": "10px"},
{ "data": "first", "width": "10px"},
{ "data": "last", "width": "10px"},
{ "data": "email", "width": "10px"},
+ { "data": "groups", "width": "10px"},
+ { "data": "roles", "width": "10px"},
],
"order": [[4, 'asc']],
- "columnDefs": [ {
- "targets": 2,
- "render": function ( data, type, full, meta ) {
- if(full.keycloak){
- return ''
- }else{
- return ''
- };
- }},
- {
- "targets": 3,
- "render": function ( data, type, full, meta ) {
- if(full.moodle){
- return ''
- }else{
- return ''
- };
- }},
- {
- "targets": 4,
- "render": function ( data, type, full, meta ) {
- if(full.nextcloud){
- return ''
- }else{
- return ''
- };
- }},
- ]
+ "columnDefs": [ ]
} );
});
diff --git a/admin/src/admin/static/js/users.js b/admin/src/admin/static/js/users.js
index e266cae..17130e1 100644
--- a/admin/src/admin/static/js/users.js
+++ b/admin/src/admin/static/js/users.js
@@ -36,8 +36,11 @@ $(document).ready(function() {
},
{ "data": "id", "width": "10px" },
{ "data": "keycloak", "width": "10px" },
+ { "data": "keycloak_groups", "width": "10px" },
{ "data": "moodle", "width": "10px" },
+ { "data": "moodle_groups", "width": "10px" },
{ "data": "nextcloud", "width": "10px" },
+ { "data": "nextcloud_groups", "width": "10px" },
{ "data": "username", "width": "10px"},
{ "data": "first", "width": "10px"},
{ "data": "last", "width": "10px"},
@@ -54,7 +57,7 @@ $(document).ready(function() {
};
}},
{
- "targets": 3,
+ "targets": 4,
"render": function ( data, type, full, meta ) {
if(full.moodle){
return ''
@@ -63,7 +66,7 @@ $(document).ready(function() {
};
}},
{
- "targets": 4,
+ "targets": 6,
"render": function ( data, type, full, meta ) {
if(full.nextcloud){
return ''
diff --git a/admin/src/admin/static/templates/pages/external.html b/admin/src/admin/static/templates/pages/external.html
index c09ddab..99c205d 100644
--- a/admin/src/admin/static/templates/pages/external.html
+++ b/admin/src/admin/static/templates/pages/external.html
@@ -27,14 +27,14 @@
+ Provider
Id
- Keycloak
- Moodle
- Nextcloud
Username
First
Last
email
+ groups
+ roles