def view_group_ajax_request(group_name): # Get user info user = get_user_info(session) unix_name = user['metadata']['unix_name'] # Get group info group = get_group_info(group_name, session) # Get User's Group Status user_status = get_user_group_status(unix_name, group_name, session) return group, user_status
def users_groups(): """Groups that user's are specifically members of""" if request.method == 'GET': query = { 'token': ciconnect_api_token, 'globus_id': session['primary_identity'] } # Get user info to derive unix name user = get_user_info(session) unix_name = user['metadata']['unix_name'] # Get user's group membership info based on session unix name users_group_memberships = get_user_group_memberships( session, unix_name) multiplexJson = {} group_membership_status = {} for group in users_group_memberships: if group['state'] not in ['nonmember']: group_name = group['name'] group_query = "/v1alpha1/groups/" + \ group_name + "?token=" + query['token'] multiplexJson[group_query] = {"method": "GET"} group_membership_status[group_query] = group['state'] # POST request for multiplex return multiplex = get_multiplex(multiplexJson) users_groups = [] for group in multiplex: if ((session['url_host']['unix_name'] in (json.loads( multiplex[group]['body'])['metadata']['name'])) and (len((json.loads(multiplex[group]['body'])['metadata']['name'] ).split('.')) > 1)): users_groups.append((json.loads(multiplex[group]['body']), group_membership_status[group])) # users_groups = [group for group in users_groups if len(group['name'].split('.')) == 3] # Query user's pending project requests pending_project_requests = get_user_pending_project_requests(unix_name) # Check user's member status of root connect group connect_group = session['url_host']['unix_name'] user_status = get_user_connect_status(unix_name, connect_group) domain_name = domain_name_edgecase() with open( brand_dir + '/' + domain_name + "/form_descriptions/group_unix_name_description.md", "r") as file: group_unix_name_description = file.read() return render_template( 'users_groups.html', groups=users_groups, project_requests=pending_project_requests, user_status=user_status, group_unix_name_description=group_unix_name_description)
def profile(): """User profile information. Assocated with a Globus Auth identity.""" if request.method == 'GET': identity_id = session.get('primary_identity') try: user = get_user_info(session) unix_name = user['metadata']['unix_name'] profile = get_user_profile(unix_name) except: profile = None if profile: print("Found profile: {}".format(profile)) profile = profile['metadata'] unix_name = profile['unix_name'] group_name = session['url_host']['unix_name'] user_status = get_user_group_status(unix_name, group_name, session) else: flash( 'Please complete any missing profile fields and press Save.', 'warning') return redirect(url_for('create_profile')) if request.args.get('next'): session['next'] = get_safe_redirect() group_memberships = [] for group in profile['group_memberships']: if ((session['url_host']['unix_name'] in group['name']) and (len(group['name'].split('.')) > 1)): group_memberships.append(group) domain_name = domain_name_edgecase() with open(brand_dir + '/' + domain_name + "/form_descriptions/group_unix_name_description.md", "r") as file: group_unix_name_description = file.read() return render_template('profile.html', profile=profile, user_status=user_status, group_memberships=group_memberships, group_unix_name_description=group_unix_name_description)
def view_group(group_name): """Detailed view of specific groups""" query = { 'token': ciconnect_api_token, 'globus_id': session['primary_identity'] } user = get_user_info(session) unix_name = user['metadata']['unix_name'] if request.method == 'GET': # Get group information group = get_group_info(group_name, session) # print(group) group_creation_date = group['creation_date'].split(' ')[0] # Get User's Group Status user_status = get_user_group_status(unix_name, group_name, session) # Query to return user's enclosing group membership status enclosing_status = get_enclosing_group_status(group_name, unix_name) # Query to check user's connect group membership status connect_group = session['url_host']['unix_name'] # print(connect_group) connect_status = get_user_connect_status(unix_name, connect_group) return render_template('group_profile_overview.html', group=group, group_name=group_name, user_status=user_status, enclosing_status=enclosing_status, connect_status=connect_status, group_creation_date=group_creation_date) elif request.method == 'POST': ''' Request group membership by setting user status to pending ''' status = 'pending' update_user_group_status(group_name, unix_name, status, session) # print("UPDATED MEMBERSHIP: {}".format(user_status)) return redirect(url_for('view_group', group_name=group_name))
def users_groups_pending(): """Groups that user's are specifically members of""" if request.method == 'GET': query = { 'token': ciconnect_api_token, 'globus_id': session['primary_identity'] } # Get user info user = get_user_info(session) unix_name = user['metadata']['unix_name'] # Query user's pending project requests project_requests = get_user_pending_project_requests(unix_name) project_requests = [ project_request for project_request in project_requests if session['url_host']['unix_name'] in project_request['name'] ] # Check user status of root connect group connect_group = session['url_host']['unix_name'] user_status = get_user_connect_status(unix_name, connect_group) return render_template('users_groups_pending.html', project_requests=project_requests, user_status=user_status)
def edit_profile(unix_name): identity_id = session.get('primary_identity') query = {'token': ciconnect_api_token, 'globus_id': identity_id} user = get_user_info(session) expected_unix_name = user['metadata']['unix_name'] try: unix_name == expected_unix_name except Exception: return redirect(url_for('handle_exception', e=Exception)) if request.method == 'GET': # Get user info, pass through as args, convert to json and load input fields profile = get_user_profile(unix_name) profile = profile['metadata'] return render_template('profile_edit.html', profile=profile, unix_name=unix_name) elif request.method == 'POST': name = request.form['name'] email = request.form['email'] phone = request.form['phone-number'] institution = request.form['institution'] public_key = request.form['sshpubstring'] globus_id = session['primary_identity'] x509dn = request.form['x509dn'] access_token = get_user_access_token(session) query = {'token': access_token, 'globus_id': identity_id} # Schema and query for adding users to CI Connect DB if public_key != ' ': post_user = {"apiVersion": 'v1alpha1', 'metadata': {'name': name, 'email': email, 'phone': phone, 'institution': institution, 'public_key': public_key, 'X.509_DN': x509dn}} else: post_user = {"apiVersion": 'v1alpha1', 'metadata': {'name': name, 'email': email, 'phone': phone, 'institution': institution, 'X.509_DN': x509dn}} # PUT request to update user information r = requests.put(ciconnect_api_endpoint + '/v1alpha1/users/' + unix_name, params=query, json=post_user) session['name'] = name session['email'] = email session['phone'] = phone session['institution'] = institution flash_message = flash_message_parser('edit_profile') flash(flash_message, 'success') if 'next' in session: redirect_to = session['next'] session.pop('next') else: redirect_to = url_for('profile') return redirect(url_for('profile'))