progress in admin
parent
7a8f47157c
commit
dc9804973f
|
@ -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'}
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
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
|
|
@ -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
|
||||
|
|
|
@ -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": '<button class="btn btn-xs btn-info" type="button" data-placement="top" ><i class="fa fa-plus"></i></button>'
|
||||
},
|
||||
{ "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 '<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>'
|
||||
};
|
||||
}},
|
||||
]
|
||||
"columnDefs": [ ]
|
||||
} );
|
||||
});
|
||||
|
||||
|
|
|
@ -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 '<i class="fa fa-check" style="color:lightgreen"></i>'
|
||||
|
@ -63,7 +66,7 @@ $(document).ready(function() {
|
|||
};
|
||||
}},
|
||||
{
|
||||
"targets": 4,
|
||||
"targets": 6,
|
||||
"render": function ( data, type, full, meta ) {
|
||||
if(full.nextcloud){
|
||||
return '<i class="fa fa-check" style="color:lightgreen"></i>'
|
||||
|
|
|
@ -27,14 +27,14 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Provider</th>
|
||||
<th>Id</th>
|
||||
<th>Keycloak</th>
|
||||
<th>Moodle</th>
|
||||
<th>Nextcloud</th>
|
||||
<th>Username</th>
|
||||
<th>First</th>
|
||||
<th>Last</th>
|
||||
<th>email</th>
|
||||
<th>groups</th>
|
||||
<th>roles</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
|
@ -28,8 +28,11 @@
|
|||
<th></th>
|
||||
<th>Id</th>
|
||||
<th>Keycloak</th>
|
||||
<th>K.Groups</th>
|
||||
<th>Moodle</th>
|
||||
<th>M.Groups</th>
|
||||
<th>Nextcloud</th>
|
||||
<th>N.Groups</th>
|
||||
<th>Username</th>
|
||||
<th>First</th>
|
||||
<th>Last</th>
|
||||
|
|
|
@ -9,6 +9,8 @@ import time,json
|
|||
import sys,os
|
||||
from flask import render_template, Response, request, redirect, url_for, jsonify
|
||||
|
||||
from pprint import pprint
|
||||
|
||||
@app.route('/isard-sso-admin/users')
|
||||
# @login_required
|
||||
def users():
|
||||
|
@ -46,8 +48,8 @@ def groups_list():
|
|||
# @login_required
|
||||
def external():
|
||||
if request.method == 'POST':
|
||||
app.admin.upload_json(request.form)
|
||||
return json.dumps({}), 200, {'Content-Type': 'application/json'}
|
||||
pprint(request.get_json(force=True))
|
||||
return json.dumps(app.admin.upload_json(request.get_json(force=True))), 200, {'Content-Type': 'application/json'}
|
||||
return render_template('pages/external.html', title="External", nav="External")
|
||||
|
||||
@app.route('/isard-sso-admin/external_users_list')
|
||||
|
|
Loading…
Reference in New Issue