diff --git a/admin/src/admin/lib/admin.py b/admin/src/admin/lib/admin.py index 2477f18..8c9fe21 100644 --- a/admin/src/admin/lib/admin.py +++ b/admin/src/admin/lib/admin.py @@ -156,4 +156,20 @@ class Admin(): return self.external['groups'] def get_external_roles(self): - return self.external['roles'] \ No newline at end of file + 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'} diff --git a/admin/src/admin/lib/keycloak.py b/admin/src/admin/lib/keycloak.py index 87da6bf..6a54e75 100644 --- a/admin/src/admin/lib/keycloak.py +++ b/admin/src/admin/lib/keycloak.py @@ -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", diff --git a/admin/src/admin/static/js/external.js b/admin/src/admin/static/js/external.js index 2d3d3d0..6335d3d 100644 --- a/admin/src/admin/static/js/external.js +++ b/admin/src/admin/static/js/external.js @@ -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(''); - // $("#users_group_dd").append(''); }) } \ No newline at end of file diff --git a/admin/src/admin/static/templates/pages/modals/external_modals.html b/admin/src/admin/static/templates/pages/modals/external_modals.html index 3fae80d..c456b52 100644 --- a/admin/src/admin/static/templates/pages/modals/external_modals.html +++ b/admin/src/admin/static/templates/pages/modals/external_modals.html @@ -23,11 +23,9 @@ -->
- +
- +
@@ -43,25 +41,24 @@
-
-

Map keys

+

Map User keys

- +
-
- +
@@ -82,22 +79,42 @@
- +
-
- +
-
+
+

Map Group keys

+ +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
diff --git a/admin/src/admin/views/MenuViews.py b/admin/src/admin/views/MenuViews.py index c0baa1f..a393ac6 100644 --- a/admin/src/admin/views/MenuViews.py +++ b/admin/src/admin/views/MenuViews.py @@ -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')