def view_group_subgroups_requests(group_name): """List view of group's subgroups requests""" query = {'token': ciconnect_api_token} if request.method == 'GET': # Get group information group = get_group_info(group_name, session) # Get User's Group Status unix_name = session['unix_name'] user_status = get_user_group_status(unix_name, group_name, session) subgroup_requests = requests.get(ciconnect_api_endpoint + '/v1alpha1/groups/' + group_name + '/subgroup_requests', params=query) subgroup_requests = subgroup_requests.json()['groups'] # Query to return user's enclosing membership status enclosing_status = get_enclosing_group_status(group_name, unix_name) # Query to check if user's status in root connect group connect_group = session['url_host']['unix_name'] connect_status = get_user_connect_status(unix_name, connect_group) return render_template('group_profile_subgroups_requests.html', subgroup_requests=subgroup_requests, group_name=group_name, user_status=user_status, group=group, connect_status=connect_status, enclosing_status=enclosing_status)
def edit_subgroup(group_name): access_token = get_user_access_token(session) query = {'token': access_token} if request.method == 'GET': sciences = requests.get( ciconnect_api_endpoint + '/v1alpha1/fields_of_science') sciences = sciences.json()['fields_of_science'] group = get_group_info(group_name, session) return render_template('groups_edit.html', sciences=sciences, group_name=group_name, group=group) elif request.method == 'POST': display_name = request.form['display-name'] email = request.form['email'] phone = request.form['phone'] description = request.form['description'] put_query = {"apiVersion": 'v1alpha1', 'metadata': {'display_name': display_name, 'email': email, 'phone': phone, 'description': description}} r = requests.put( ciconnect_api_endpoint + '/v1alpha1/groups/' + group_name, params=query, json=put_query) if r.status_code == requests.codes.ok: flash_message = flash_message_parser('edit_subgroup') flash(flash_message, 'success') return redirect(url_for('view_group', group_name=group_name)) else: err_message = r.json()['message'] flash('Failed to update subgroup information: {}'.format( err_message), 'warning') return redirect(url_for('edit_subgroup', group_name=group_name))
def view_group_add_members(group_name): """Detailed view of group's non-members""" query = {'token': ciconnect_api_token} if request.method == 'GET': # Get group information group = get_group_info(group_name, session) # Get User's Group Status unix_name = session['unix_name'] user_status = get_user_group_status(unix_name, group_name, session) # Query user's enclosing group status enclosing_status = get_enclosing_group_status(group_name, unix_name) # Query user's status in root connect group connect_group = session['url_host']['unix_name'] connect_status = get_user_connect_status(unix_name, connect_group) user_super = requests.get(ciconnect_api_endpoint + '/v1alpha1/users/' + session['unix_name'], params=query) try: user_super = user_super.json()['metadata']['superuser'] except: user_super = False return render_template('group_profile_add_members.html', group_name=group_name, user_status=user_status, enclosing_status=enclosing_status, user_super=user_super, group=group, connect_status=connect_status)
def view_public_group_ajax(name): group_info = get_group_info(name) group_clusters = get_group_clusters(name) try: group_clusters = group_clusters['items'] except: group_clusters = [] return jsonify(group_info, group_clusters)
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 edit_subgroup_requests(group_name): access_token = get_user_access_token(session) query = {'token': access_token} enclosing_group_name = '.'.join(group_name.split('.')[:-1]) if request.method == 'GET': sciences = requests.get( ciconnect_api_endpoint + '/v1alpha1/fields_of_science') sciences = sciences.json()['fields_of_science'] group = get_group_info(group_name, session) return render_template('groups_requests_edit.html', sciences=sciences, group_name=group_name, group=group) elif request.method == 'POST': name = request.form['name'] display_name = request.form['display-name'] email = request.form['email'] phone = request.form['phone'] description = request.form['description'] new_unix_name = enclosing_group_name + '.' + name if new_unix_name == group_name: put_query = {"apiVersion": 'v1alpha1', 'metadata': {'display_name': display_name, 'email': email, 'phone': phone, 'description': description}} else: put_query = {"apiVersion": 'v1alpha1', 'metadata': {'name': name, 'display_name': display_name, 'email': email, 'phone': phone, 'description': description}} r = requests.put( ciconnect_api_endpoint + '/v1alpha1/groups/' + group_name, params=query, json=put_query) enclosing_group_name = '.'.join(group_name.split('.')[:-1]) if r.status_code == requests.codes.ok: flash_message = flash_message_parser('edit_subgroup_requests') flash(flash_message, 'success') return redirect(url_for('users_groups_pending')) else: err_message = r.json()['message'] flash('Failed to edit subgroup request: {}'.format( err_message), 'warning') return redirect(url_for('edit_subgroup_requests', group_name=group_name, name=name, display_name=display_name, email=email, phone=phone, description=description))
def view_group_members_requests(group_name): """Detailed view of group's pending members""" query = {'token': ciconnect_api_token} if request.method == 'GET': # Get group information and group members group = get_group_info(group_name, session) group_members = get_group_members(group_name, session) # Set up multiplex while also tracking user status multiplexJson = {} users_statuses = {} for user in group_members: unix_name = user['user_name'] if user['state'] == 'pending': user_state = user['state'] user_query = "/v1alpha1/users/" + \ unix_name + "?token=" + query['token'] multiplexJson[user_query] = {"method": "GET"} users_statuses[unix_name] = user_state # POST request for multiplex return multiplex = get_multiplex(multiplexJson) # Clean up multiplex return queries in user_dict user_dict = {} for user in multiplex: user_name = user.split('/')[3].split('?')[0] user_dict[user_name] = json.loads(multiplex[user]['body']) # Get User's Group Status unix_name = session['unix_name'] user_status = get_user_group_status(unix_name, group_name, session) # Query user's enclosing group status enclosing_status = get_enclosing_group_status(group_name, unix_name) # Query user's status in root connect group connect_group = session['url_host']['unix_name'] connect_status = get_user_connect_status(unix_name, connect_group) return render_template('group_profile_members_requests.html', group_members=user_dict, group_name=group_name, user_status=user_status, users_statuses=users_statuses, connect_status=connect_status, enclosing_status=enclosing_status, group=group)
def view_group_members(group_name): """Detailed view of group's members""" if request.method == 'GET': # Get group information group = get_group_info(group_name, session) # Get User's Group Status unix_name = session['unix_name'] user_status = get_user_group_status(unix_name, group_name, session) # Query to return user's enclosing group's membership status enclosing_status = get_enclosing_group_status(group_name, unix_name) # Query to check user's connect status connect_group = session['url_host']['unix_name'] connect_status = get_user_connect_status(unix_name, connect_group) return render_template('group_profile_members.html', group_name=group_name, user_status=user_status, group=group, connect_status=connect_status, enclosing_status=enclosing_status)
def view_group_subgroups(group_name): """Detailed view of group's subgroups""" if request.method == 'GET': # Get group information group = get_group_info(group_name, session) # Get User's Group Status unix_name = session['unix_name'] 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 if user's status in root brand group, i.e. CMS, SPT, OSG connect_group = session['url_host']['unix_name'] connect_status = get_user_connect_status(unix_name, connect_group) domain_name = request.headers['Host'] if 'usatlas' in domain_name: domain_name = 'atlas.ci-connect.net' elif 'uscms' in domain_name: domain_name = 'cms.ci-connect.net' elif 'uchicago' in domain_name: domain_name = 'psdconnect.uchicago.edu' elif 'snowmass21' in domain_name: domain_name = 'snowmass21.ci-connect.net' 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( 'group_profile_subgroups.html', group_name=group_name, user_status=user_status, group=group, connect_status=connect_status, enclosing_status=enclosing_status, 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 get_group_info_xhr(group_name): if request.method == 'GET': group_info = get_group_info(group_name) print(group_info) return jsonify(group_info)
def create_subgroup(group_name): access_token = get_user_access_token(session) query = {'token': access_token} if request.method == 'GET': sciences = requests.get( ciconnect_api_endpoint + '/v1alpha1/fields_of_science') sciences = sciences.json()['fields_of_science'] # Get group members group_members = get_group_members(group_name, session) # Return list of admins of group try: group_admins = [ member for member in group_members if member['state'] == 'admin'] except: group_admins = [] # Check if user status of root connect group specifically connect_group = session['url_host']['unix_name'] unix_name = session['unix_name'] user_status = get_user_connect_status(unix_name, connect_group) # Get group information group = get_group_info(group_name, session) return render_template('groups_create.html', sciences=sciences, group_name=group_name, group_admins=group_admins, user_status=user_status, group=group) elif request.method == 'POST': name = request.form['name'] display_name = request.form['display-name'] email = request.form['email'] phone = request.form['phone'] description = request.form['description'] try: # Purpose/Field of Science for CMS will always be High Energy Physics field_of_science = request.form['field_of_science'] except: field_of_science = "High Energy Physics" put_query = {"apiVersion": 'v1alpha1', 'metadata': {'name': name, 'display_name': display_name, 'purpose': field_of_science, 'email': email, 'phone': phone, 'description': description}} r = requests.put( ciconnect_api_endpoint + '/v1alpha1/groups/' + group_name + '/subgroup_requests/' + name, params=query, json=put_query) full_created_group_name = group_name + '.' + name # Check if user status of root connect group specifically connect_group = session['url_host']['unix_name'] unix_name = session['unix_name'] user_status = get_user_connect_status(unix_name, connect_group) if r.status_code == requests.codes.ok: if user_status == 'admin': flash_message = flash_message_parser('create_subgroup') flash(flash_message, 'success') return redirect(url_for('view_group', group_name=full_created_group_name)) else: flash( "The support team has been notified of your requested subgroup.", 'success') return redirect(url_for('users_groups_pending')) else: err_message = r.json()['message'] flash('Failed to request project creation: {}'.format( err_message), 'warning') return redirect(url_for('view_group_subgroups_requests', group_name=group_name))
def view_group_email(group_name): """View for email form to members""" if request.method == 'GET': # Get group information group = get_group_info(group_name, session) # Get User's Group Status unix_name = session['unix_name'] user_status = get_user_group_status(unix_name, group_name, session) # Query to return user's enclosing group's membership status enclosing_status = get_enclosing_group_status(group_name, unix_name) # Query to check user's connect status connect_group = session['url_host']['unix_name'] connect_status = get_user_connect_status(unix_name, connect_group) return render_template('group_profile_email.html', group_name=group_name, user_status=user_status, group=group, connect_status=connect_status, enclosing_status=enclosing_status) elif request.method == 'POST': subject = request.form['subject'] body = request.form['description'] try: html = request.form['html-enabled'] body_or_html = "html" except: body_or_html = "text" # mailgun setup here domain_name = domain_name_edgecase() support_emails = { "cms.ci-connect.net": "*****@*****.**", "duke.ci-connect.net": "*****@*****.**", "spt.ci-connect.net": "*****@*****.**", "atlas.ci-connect.net": "*****@*****.**", "psdconnect.uchicago.edu": "*****@*****.**", "www.ci-connect.net": "*****@*****.**", "localhost:5000": "*****@*****.**" } try: support_email = support_emails[domain_name] except: support_email = "*****@*****.**" user_dict, users_statuses = get_group_members_emails(group_name) user_emails = [ user_dict[user]['metadata']['email'] for user in user_dict ] # print(user_emails) r = requests.post( "https://api.mailgun.net/v3/api.ci-connect.net/messages", auth=('api', mailgun_api_token), data={ "from": "<" + support_email + ">", "to": [support_email], "bcc": user_emails, "subject": subject, body_or_html: body, }) if r.status_code == requests.codes.ok: flash("Your message has been sent to the members of this group", 'success') return redirect(url_for('view_group_email', group_name=group_name)) else: flash("Unable to send message: {}".format(r.json()), 'warning') return redirect(url_for('view_group_email', group_name=group_name))