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
Example #2
0
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)
Example #3
0
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))
Example #5
0
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)
Example #6
0
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'))