fixed keycloak timeout session

root 2021-05-26 11:22:22 +02:00
parent 6a0e2f145a
commit 7a8f47157c
5 changed files with 96 additions and 33 deletions

View File

@ -156,4 +156,20 @@ class Admin():
return self.external['groups']
def get_external_roles(self):
return self.external['roles']
return self.external['roles']
def upload_json(self,data):
pass
# 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'}

View File

@ -23,14 +23,18 @@ class Keycloak():
password=os.environ['KEYCLOAK_PASSWORD'],
realm='master',
verify=True):
self.keycloak_admin = KeycloakAdmin(server_url=url,
username=username,
password=password,
realm_name=realm,
verify=verify)
from pprint import pprint
self.url=url
self.username=username
self.password=password
self.realm=realm
self.verify=verify
def connect(self):
self.keycloak_admin = KeycloakAdmin(server_url=self.url,
username=self.username,
password=self.password,
realm_name=self.realm,
verify=self.verify)
######## Example create group and subgroup
@ -53,13 +57,16 @@ class Keycloak():
## USERS
def get_user_id(self,username):
self.connect()
return self.keycloak_admin.get_user_id(username)
def get_users(self):
self.connect()
return self.keycloak_admin.get_users({})
def add_user(self,username,first,last,email,password):
# Returns user id
self.connect()
return self.keycloak_admin.create_user({"email": email,
"username": username,
"enabled": True,
@ -70,13 +77,16 @@ class Keycloak():
"temporary":False}]})
def add_user_role(self,client_id,user_id,role_id,role_name):
self.connect()
return self.keycloak_admin.assign_client_role(client_id="client_id", user_id="user_id", role_id="role_id", role_name="test")
def delete_user(self,userid):
self.connect()
return self.keycloak_admin.delete_user(user_id=userid)
## GROUPS
def get_groups(self,with_subgroups=True):
self.connect()
groups = self.keycloak_admin.get_groups()
subgroups=[]
if with_subgroups:
@ -88,31 +98,39 @@ class Keycloak():
# return groups+subgroups
def get_group(self,path,recursive=True):
self.connect()
return self.keycloak_admin.get_group_by_path(path=path,search_in_subgroups=recursive)
def add_group(self,name,parent=None):
self.connect()
return self.keycloak_admin.create_group({"name":name}, parent=parent)
def delete_group(self,group_id):
self.connect()
return self.keycloak_admin.delete_group(group_id=group_id)
## ROLES
def get_roles(self):
self.connect()
return self.keycloak_admin.get_realm_roles()
def get_role(self,name):
self.connect()
return self.keycloak_admin.get_realm_role(name=name)
def add_role(self,name):
self.connect()
return self.keycloak_admin.create_realm_role({"name":name})
def delete_role(self,name):
self.connect()
return self.keycloak_admin.delete_realm_role(name)
## CLIENTS
def get_client_roles(self,client_id):
self.connect()
return self.keycloak_admin.get_client_roles(client_id=client_id)
# def add_client_role(self,client_id,roleName):
@ -121,17 +139,21 @@ class Keycloak():
## SYSTEM
def get_server_info(self):
self.connect()
return self.keycloak_admin.get_server_info()
def get_server_clients(self):
self.connect()
return self.keycloak_admin.get_clients()
def get_server_rsa_key(self):
self.connect()
rsa_key = [k for k in self.keycloak_admin.get_keys()['keys'] if k['type']=='RSA'][0]
return {'name':rsa_key['kid'],'certificate':rsa_key['certificate']}
## CLIENTS
def add_moodle_client(self):
self.connect()
demo={
"id" : "a92d5417-92b6-4678-9cb9-51bc0edcee8c",
"clientId" : "https://moodle."+app.config['DOMAIN']+"/auth/saml2/sp/metadata.php",

View File

@ -14,14 +14,23 @@ $(document).ready(function() {
$("#modalImport #send").on('click', function(e){
var form = $('#modalImportForm');
//
form.parsley().validate();
if (form.parsley().isValid()){ // || 'unlimited' in formdata){
uploaded=JSON.parse(filecontents)
if (form.parsley().isValid()){
formdata = form.serializeObject()
console.log(formdata)
//socket.emit('bulkusers_add',{'data':data,'users':users})
//$('#modalImport #send').prop('disabled', true);
formdata['data']=JSON.parse(filecontents)
$.ajax({
type: "POST",
url:"/isard-sso-admin/external",
data: formdata,
success: function(data)
{
console.log(data)
},
error: function(data)
{
console.log(data)
}
});
}
});
@ -95,7 +104,6 @@ function readFile (evt) {
reader.onload = function(event) {
filecontents=event.target.result;
$.each(JSON.parse(filecontents), walker);
console.log(path)
populate_path(items)
}
reader.readAsText(file, 'UTF-8')
@ -111,8 +119,7 @@ function readFile (evt) {
function walker(key, value) {
var savepath = path;
path = path ? (path + "." + key) : key;
console.log("Visiting " + path);
path = path ? (path + "/" + key) : key;
items.push({path:path})
if (typeof value === "object") {
@ -129,9 +136,7 @@ function walker(key, value) {
}
function populate_path(){
console.log(items)
$.each(items, function(key, value) {
$(".populate").append('<option value=' + value['path']+ '>' + value['path'] + '</option>');
// $("#users_group_dd").append('<option value=' + value['path'] + '>' + value['path'] + '</option>');
})
}

View File

@ -23,11 +23,9 @@
-->
<div class="item form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="provider">Provider: <span class="required">*</span></label>
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="provider">Provider name: <span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select id="provider" name="provider" class="form-control provider" data-quota="provider" required>
<option value="google">Google</option>
</select>
<input id="provider" name="provider" placeholder="" type="text" style="width:100%">
</div>
</div>
<div class="item form-group">
@ -43,25 +41,24 @@
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="file" id="file-upload" name="file-upload" enctype="multipart/form-data" />
<button id="btn-map" type="button" class="btn btn-success" data-dismiss="modal">Map fields</button>
</div>
</div>
</div>
<div class="x_panela" id="bulkusers-quota" style="padding: 5px;">
<p style="font-size: 18px;margin-bottom:0px;">Map keys</p>
<p style="font-size: 18px;margin-bottom:0px;">Map User keys</p>
<div class="item form-group">
<div class="item form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="users">Users dict: <span class="required">*</span></label>
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="userid">id: <span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select id="users" name="users" class="form-control users populate" required>
<select id="userid" name="userid" class="form-control userid populate" required>
</select>
</div>
</div>
<div class="item form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="username">user name: <span class="required">*</span></label>
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="username">username: <span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select id="username" name="username" class="form-control username populate" required>
</select>
@ -82,22 +79,42 @@
</div>
</div>
<div class="item form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="usergroup">user group:<span class="required">*</span></label>
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="email">email: <span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select id="usergroup" name="usergroup" class="form-control usergroup populate" required>
<select id="email" name="email" class="form-control email populate" required>
</select>
</div>
</div>
<div class="item form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="groups">Group dict:<span class="required">*</span></label>
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="usergroup">group:<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select id="groups" name="groups" class="form-control groups populate" required>
<select id="usergroup" name="usergroup" class="form-control usergroup populate" required>
</select>
</div>
</div>
</div>
</div>
<div class="x_panela" id="bulkusers-quota" style="padding: 5px;">
<p style="font-size: 18px;margin-bottom:0px;">Map Group keys</p>
<div class="item form-group">
<div class="item form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="groupid">id:<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select id="groupid" name="groupid" class="form-control groupid populate" required>
</select>
</div>
</div>
<div class="item form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="groupname">name:<span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<select id="groupname" name="groupname" class="form-control groupname populate" required>
</select>
</div>
</div>
</div>
</div>
</div>
<!-- Modal Footer -->

View File

@ -42,9 +42,12 @@ def groups_list():
return json.dumps(app.admin.get_groups()), 200, {'Content-Type': 'application/json'}
@app.route('/isard-sso-admin/external')
@app.route('/isard-sso-admin/external', methods=['POST', 'GET'])
# @login_required
def external():
if request.method == 'POST':
app.admin.upload_json(request.form)
return json.dumps({}), 200, {'Content-Type': 'application/json'}
return render_template('pages/external.html', title="External", nav="External")
@app.route('/isard-sso-admin/external_users_list')