Solved merge

darta 2021-08-30 21:35:05 +02:00
commit e2be29348c
5 changed files with 63 additions and 16 deletions

View File

@ -93,13 +93,17 @@ class Admin():
### User admin in group admin
try:
log.warning('KEYCLOAK: Adding group admin and user admin to this group')
self.keycloak.add_group('admin')
## Add default admin user to group admin (for nextcloud, just in case we go there)
admin_uid=self.keycloak_admin.get_user_id('admin')
self.keycloak_admin.group_user_add(admin_uid,gid)
admin_guid=self.keycloak.add_group('admin')
except:
pass
admin_guid=self.keycloak.get_group_by_path(path='/admin')['id']
try:
## Add default admin user to group admin
admin_uid=self.keycloak.get_user_id('admin')
self.keycloak.group_user_add(admin_uid,admin_guid)
log.warning('KEYCLOAK: OK')
except:
# print(traceback.format_exc())
print(traceback.format_exc())
log.warning('KEYCLOAK: Seems to be there already')
#### Add default groups
@ -812,4 +816,4 @@ class Admin():
return True
def get_user(self,userid):
return [u for u in self.internal['users'] if u['id']==userid][0]
return [u for u in self.internal['users'] if u['id']==userid][0]

View File

@ -29,7 +29,10 @@ class Nextcloud():
def _request(self,method,url,data={},headers={'OCS-APIRequest':'true'},auth=False):
if auth == False: auth=self.auth
try:
return requests.request(method, url, data=data, auth=auth, verify=self.verify_cert, headers=headers).text
response = requests.request(method, url, data=data, auth=auth, verify=self.verify_cert, headers=headers)
if 'meta' in response.text:
if '<statuscode>997</statuscode>' in response.text: raise ProviderUnauthorized
return response.text
## At least the ProviderSslError is not being catched or not raised correctly
except requests.exceptions.HTTPError as errh:

View File

@ -1,5 +1,8 @@
#!/usr/bin/env python
# coding=utf-8
class ProviderUnauthorized(Exception):
pass
class ProviderConnError(Exception):
pass

View File

@ -28,11 +28,7 @@ def internal_users_search():
if request.method == 'POST':
data=request.get_json(force=True)
users = app.admin.get_mix_users()
result = [user_parser(user) for user in users
if data['text'] in user['username'] or
data['text'] in user['first'] or
data['text'] in user['last'] or
data['text'] in user['email']]
result = [user_parser(user) for user in filter_users(users, data['text'])]
sorted_result = sorted(result, key=lambda k: k['id'])
return json.dumps(sorted_result), 200, {'Content-Type': 'application/json'}
@ -43,6 +39,7 @@ def internal_groups():
sorted_groups = sorted(app.admin.get_mix_groups(), key=lambda k: k['name'])
groups=[]
for group in sorted_groups:
if not group['path'].startswith('/'): continue
groups.append({'id':group['path'],
'name':group['name'],
'description':group.get('description','')})
@ -58,8 +55,41 @@ def internal_group_users():
users=[]
for user in sorted_users:
if data['path'] not in user['keycloak_groups'] or not user['enabled']: continue
users.append(user_parser(user))
return json.dumps(users), 200, {'Content-Type': 'application/json'}
users.append(user)
if data.get('text',False) and data['text'] != '':
result = [user_parser(user) for user in filter_users(users, data['text'])]
else:
result = [user_parser(user) for user in users]
return json.dumps(result), 200, {'Content-Type': 'application/json'}
@app.route('/api/internal/roles', methods=['GET'])
@is_internal
def internal_roles():
if request.method == 'GET':
roles=[]
for role in sorted(app.admin.get_roles(), key=lambda k: k['name']):
if role['name'] == 'admin': continue
roles.append({'id':role['id'],
'name':role['name'],
'description':role.get('description','')})
return json.dumps(roles), 200, {'Content-Type': 'application/json'}
@app.route('/api/internal/role/users', methods=['POST'])
@is_internal
def internal_role_users():
if request.method == 'POST':
data=request.get_json(force=True)
sorted_users = sorted(app.admin.get_mix_users(), key=lambda k: k['username'])
# group_users = [user for user in sorted_users if data['path'] in user['keycloak_groups']]
users=[]
for user in sorted_users:
if data['role'] not in user['roles'] or not user['enabled']: continue
users.append(user)
if data.get('text',False) and data['text'] != '':
result = [user_parser(user) for user in filter_users(users, data['text'])]
else:
result = [user_parser(user) for user in users]
return json.dumps(result), 200, {'Content-Type': 'application/json'}
def user_parser(user):
return {'id':user['username'],
@ -68,3 +98,10 @@ def user_parser(user):
'role':user['roles'][0] if len(user['roles']) else None,
'email':user['email'],
'groups':user['keycloak_groups']}
def filter_users(users, text):
return [user for user in users
if text in user['username'] or
text in user['first'] or
text in user['last'] or
text in user['email']]

View File

@ -168,8 +168,8 @@ backend be_wp
http-request add-header X-Forwarded-Proto https unless existing-x-forwarded-proto
http-request set-header X-SSL %[ssl_fc]
reqadd X-Forwarded-Proto:\ https
#http-request set-header X-Forwarded-Proto https
#reqadd X-Forwarded-Proto:\ https
http-request set-header X-Forwarded-Proto https
server wp isard-apps-wordpress:80 check port 80 inter 5s rise 2 fall 10 resolvers mydns init-addr none