fixed keycloak timeout session
parent
6a0e2f145a
commit
7a8f47157c
|
@ -157,3 +157,19 @@ class Admin():
|
||||||
|
|
||||||
def get_external_roles(self):
|
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'}
|
||||||
|
|
|
@ -23,14 +23,18 @@ class Keycloak():
|
||||||
password=os.environ['KEYCLOAK_PASSWORD'],
|
password=os.environ['KEYCLOAK_PASSWORD'],
|
||||||
realm='master',
|
realm='master',
|
||||||
verify=True):
|
verify=True):
|
||||||
self.keycloak_admin = KeycloakAdmin(server_url=url,
|
self.url=url
|
||||||
username=username,
|
self.username=username
|
||||||
password=password,
|
self.password=password
|
||||||
realm_name=realm,
|
self.realm=realm
|
||||||
verify=verify)
|
self.verify=verify
|
||||||
|
|
||||||
from pprint import pprint
|
|
||||||
|
|
||||||
|
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
|
######## Example create group and subgroup
|
||||||
|
|
||||||
|
@ -53,13 +57,16 @@ class Keycloak():
|
||||||
## USERS
|
## USERS
|
||||||
|
|
||||||
def get_user_id(self,username):
|
def get_user_id(self,username):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.get_user_id(username)
|
return self.keycloak_admin.get_user_id(username)
|
||||||
|
|
||||||
def get_users(self):
|
def get_users(self):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.get_users({})
|
return self.keycloak_admin.get_users({})
|
||||||
|
|
||||||
def add_user(self,username,first,last,email,password):
|
def add_user(self,username,first,last,email,password):
|
||||||
# Returns user id
|
# Returns user id
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.create_user({"email": email,
|
return self.keycloak_admin.create_user({"email": email,
|
||||||
"username": username,
|
"username": username,
|
||||||
"enabled": True,
|
"enabled": True,
|
||||||
|
@ -70,13 +77,16 @@ class Keycloak():
|
||||||
"temporary":False}]})
|
"temporary":False}]})
|
||||||
|
|
||||||
def add_user_role(self,client_id,user_id,role_id,role_name):
|
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")
|
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):
|
def delete_user(self,userid):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.delete_user(user_id=userid)
|
return self.keycloak_admin.delete_user(user_id=userid)
|
||||||
|
|
||||||
## GROUPS
|
## GROUPS
|
||||||
def get_groups(self,with_subgroups=True):
|
def get_groups(self,with_subgroups=True):
|
||||||
|
self.connect()
|
||||||
groups = self.keycloak_admin.get_groups()
|
groups = self.keycloak_admin.get_groups()
|
||||||
subgroups=[]
|
subgroups=[]
|
||||||
if with_subgroups:
|
if with_subgroups:
|
||||||
|
@ -88,31 +98,39 @@ class Keycloak():
|
||||||
# return groups+subgroups
|
# return groups+subgroups
|
||||||
|
|
||||||
def get_group(self,path,recursive=True):
|
def get_group(self,path,recursive=True):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.get_group_by_path(path=path,search_in_subgroups=recursive)
|
return self.keycloak_admin.get_group_by_path(path=path,search_in_subgroups=recursive)
|
||||||
|
|
||||||
def add_group(self,name,parent=None):
|
def add_group(self,name,parent=None):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.create_group({"name":name}, parent=parent)
|
return self.keycloak_admin.create_group({"name":name}, parent=parent)
|
||||||
|
|
||||||
def delete_group(self,group_id):
|
def delete_group(self,group_id):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.delete_group(group_id=group_id)
|
return self.keycloak_admin.delete_group(group_id=group_id)
|
||||||
|
|
||||||
## ROLES
|
## ROLES
|
||||||
def get_roles(self):
|
def get_roles(self):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.get_realm_roles()
|
return self.keycloak_admin.get_realm_roles()
|
||||||
|
|
||||||
def get_role(self,name):
|
def get_role(self,name):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.get_realm_role(name=name)
|
return self.keycloak_admin.get_realm_role(name=name)
|
||||||
|
|
||||||
def add_role(self,name):
|
def add_role(self,name):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.create_realm_role({"name":name})
|
return self.keycloak_admin.create_realm_role({"name":name})
|
||||||
|
|
||||||
def delete_role(self,name):
|
def delete_role(self,name):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.delete_realm_role(name)
|
return self.keycloak_admin.delete_realm_role(name)
|
||||||
|
|
||||||
|
|
||||||
## CLIENTS
|
## CLIENTS
|
||||||
|
|
||||||
def get_client_roles(self,client_id):
|
def get_client_roles(self,client_id):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.get_client_roles(client_id=client_id)
|
return self.keycloak_admin.get_client_roles(client_id=client_id)
|
||||||
|
|
||||||
# def add_client_role(self,client_id,roleName):
|
# def add_client_role(self,client_id,roleName):
|
||||||
|
@ -121,17 +139,21 @@ class Keycloak():
|
||||||
|
|
||||||
## SYSTEM
|
## SYSTEM
|
||||||
def get_server_info(self):
|
def get_server_info(self):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.get_server_info()
|
return self.keycloak_admin.get_server_info()
|
||||||
|
|
||||||
def get_server_clients(self):
|
def get_server_clients(self):
|
||||||
|
self.connect()
|
||||||
return self.keycloak_admin.get_clients()
|
return self.keycloak_admin.get_clients()
|
||||||
|
|
||||||
def get_server_rsa_key(self):
|
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]
|
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']}
|
return {'name':rsa_key['kid'],'certificate':rsa_key['certificate']}
|
||||||
|
|
||||||
## CLIENTS
|
## CLIENTS
|
||||||
def add_moodle_client(self):
|
def add_moodle_client(self):
|
||||||
|
self.connect()
|
||||||
demo={
|
demo={
|
||||||
"id" : "a92d5417-92b6-4678-9cb9-51bc0edcee8c",
|
"id" : "a92d5417-92b6-4678-9cb9-51bc0edcee8c",
|
||||||
"clientId" : "https://moodle."+app.config['DOMAIN']+"/auth/saml2/sp/metadata.php",
|
"clientId" : "https://moodle."+app.config['DOMAIN']+"/auth/saml2/sp/metadata.php",
|
||||||
|
|
|
@ -14,14 +14,23 @@ $(document).ready(function() {
|
||||||
|
|
||||||
$("#modalImport #send").on('click', function(e){
|
$("#modalImport #send").on('click', function(e){
|
||||||
var form = $('#modalImportForm');
|
var form = $('#modalImportForm');
|
||||||
//
|
|
||||||
form.parsley().validate();
|
form.parsley().validate();
|
||||||
if (form.parsley().isValid()){ // || 'unlimited' in formdata){
|
if (form.parsley().isValid()){
|
||||||
uploaded=JSON.parse(filecontents)
|
|
||||||
formdata = form.serializeObject()
|
formdata = form.serializeObject()
|
||||||
console.log(formdata)
|
formdata['data']=JSON.parse(filecontents)
|
||||||
//socket.emit('bulkusers_add',{'data':data,'users':users})
|
$.ajax({
|
||||||
//$('#modalImport #send').prop('disabled', true);
|
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) {
|
reader.onload = function(event) {
|
||||||
filecontents=event.target.result;
|
filecontents=event.target.result;
|
||||||
$.each(JSON.parse(filecontents), walker);
|
$.each(JSON.parse(filecontents), walker);
|
||||||
console.log(path)
|
|
||||||
populate_path(items)
|
populate_path(items)
|
||||||
}
|
}
|
||||||
reader.readAsText(file, 'UTF-8')
|
reader.readAsText(file, 'UTF-8')
|
||||||
|
@ -111,8 +119,7 @@ function readFile (evt) {
|
||||||
|
|
||||||
function walker(key, value) {
|
function walker(key, value) {
|
||||||
var savepath = path;
|
var savepath = path;
|
||||||
path = path ? (path + "." + key) : key;
|
path = path ? (path + "/" + key) : key;
|
||||||
console.log("Visiting " + path);
|
|
||||||
items.push({path:path})
|
items.push({path:path})
|
||||||
|
|
||||||
if (typeof value === "object") {
|
if (typeof value === "object") {
|
||||||
|
@ -129,9 +136,7 @@ function walker(key, value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function populate_path(){
|
function populate_path(){
|
||||||
console.log(items)
|
|
||||||
$.each(items, function(key, value) {
|
$.each(items, function(key, value) {
|
||||||
$(".populate").append('<option value=' + value['path']+ '>' + value['path'] + '</option>');
|
$(".populate").append('<option value=' + value['path']+ '>' + value['path'] + '</option>');
|
||||||
// $("#users_group_dd").append('<option value=' + value['path'] + '>' + value['path'] + '</option>');
|
|
||||||
})
|
})
|
||||||
}
|
}
|
|
@ -23,11 +23,9 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<div class="item form-group">
|
<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">
|
<div class="col-md-6 col-sm-6 col-xs-12">
|
||||||
<select id="provider" name="provider" class="form-control provider" data-quota="provider" required>
|
<input id="provider" name="provider" placeholder="" type="text" style="width:100%">
|
||||||
<option value="google">Google</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item form-group">
|
<div class="item form-group">
|
||||||
|
@ -43,20 +41,19 @@
|
||||||
</label>
|
</label>
|
||||||
<div class="col-md-6 col-sm-6 col-xs-12">
|
<div class="col-md-6 col-sm-6 col-xs-12">
|
||||||
<input type="file" id="file-upload" name="file-upload" enctype="multipart/form-data" />
|
<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>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="x_panela" id="bulkusers-quota" style="padding: 5px;">
|
<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">
|
||||||
<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">
|
<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>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -82,22 +79,42 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item form-group">
|
<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">
|
<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>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item form-group">
|
<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">
|
<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>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</div>
|
||||||
|
|
||||||
<!-- Modal Footer -->
|
<!-- Modal Footer -->
|
||||||
|
|
|
@ -42,9 +42,12 @@ def groups_list():
|
||||||
return json.dumps(app.admin.get_groups()), 200, {'Content-Type': 'application/json'}
|
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
|
# @login_required
|
||||||
def external():
|
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")
|
return render_template('pages/external.html', title="External", nav="External")
|
||||||
|
|
||||||
@app.route('/isard-sso-admin/external_users_list')
|
@app.route('/isard-sso-admin/external_users_list')
|
||||||
|
|
Loading…
Reference in New Issue