Example #1
0
def get_token(apiver=fg_config['fgapiver']):
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        response = {}
        subject = request.values.get('subject')
        if request.method == 'GET':
            message = "Unhandled method: '%s'" % request.method
            response["error"] = message
            status = 400
        elif request.method == 'POST':
            response = {
                "error": None,
                "groups": get_groups_file(groups_file),
                "subject": subject,
                "token": get_token_file(token_file)
            }
            status = 200
        else:
            message = "Unhandled method: '%s'" % request.method
            response["error"] = message
            status = 400
        # include _links part
        response["_links"] = [
            {
                "rel": "self",
                "href": "/get-token"
            },
        ]
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
def user_tasks(user, apiver=fg_config['fgapiver']):
    global fgapisrv_db

    logging.debug('user_tasks(%s)/%s: %s' %
                  (request.method, user, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        application = request.values.get('application')
        user_name = current_user.get_name()
        user_id = current_user.get_id()
        logging.debug("user_name: '%s'" % user_name)
        logging.debug("user_id: '%s'" % user_id)
        user = request.values.get('user', user)
        if request.method == 'GET':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "users_tasks_view")
            if auth_state is True:
                if fgapisrv_db.user_exists(user):
                    tasks_list = []
                    user_task_ids =\
                        fgapisrv_db.user_tasks_retrieve(user, application)
                    for task_id in user_task_ids:
                        task_record = fgapisrv_db.get_task_record(task_id)
                        tasks_list += [
                            task_record,
                        ]
                    status = 200
                    response = {'tasks': tasks_list}
                else:
                    status = 404
                    response = {
                        'message': 'User \'%s\' does not exists' % user
                    }
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        else:
            status = 400
            response = {"message": "Unhandled method: '%s'" % request.method}
    logging.debug('message: %s' % response.get('message', 'success'))
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
Example #3
0
def checktoken(apiver=fg_config['fgapiver']):
    logger.debug('Tocken check(%s): %s' %
                 (request.method, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        response = {}
        token = request.values.get('token')
        if request.method == 'GET':
            message = "Unhandled method: '%s'" % request.method
            response["error"] = message
            status = 400
        elif request.method == 'POST':
            # response = {
            #    "token_status": "valid",
            #    # you may specify:
            #    #  portal_user - A portal user that can be mapped by
            #    #                fgapiserver_ptvmap.json map file
            #    #  portal_group - A portal group that can be mapped by
            #    #                 fgapiserver_ptvmap.json map file
            #    # "portal_user": fgapisrv_ptvdefusr
            #    "portal_group": "admin"
            # }
            response = {
                "error": None,
                "groups": get_groups_file(groups_file),
                "subject": get_subject_file(subject_file),
                "token": token
            }
            status = 200
        else:
            message = "Unhandled method: '%s'" % request.method
            response["error"] = message
            status = 400
    # include _links part
    response["_links"] = [
        {
            "rel": "self",
            "href": "/checktoken"
        },
    ]
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
def groups_group(group, apiver=fg_config['fgapiver']):
    global fgapisrv_db

    logging.debug('groups_group(%s)/%s: %s' %
                  (request.method, group, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        user_name = current_user.get_name()
        user_id = current_user.get_id()
        logging.debug("user_name: '%s'" % user_name)
        logging.debug("user_id: '%s'" % user_id)
        user = request.values.get('user', user_name)
        if request.method == 'GET':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "groups_view")
            if auth_state is True:
                group_info = fgapisrv_db.group_retrieve(group)
                if group_info is not None:
                    status = 200
                    response = group_info
                else:
                    status = 404
                    response = {
                        'message':
                        'No groups found with name or id: %s' % group
                    }
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        elif request.method == 'POST':
            status = 404
            response = {"message": "Not yet implemented"}
        else:
            status = 404
            response = {"message": "Unhandled method: '%s'" % request.method}
    logging.debug('message: %s' % response.get('message', 'success'))
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
def roles(apiver=fg_config['fgapiver']):
    global fgapisrv_db

    logging.debug('groups(%s): %s' %
                  (request.method, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        user_name = current_user.get_name()
        user_id = current_user.get_id()
        logging.debug("user_name: '%s'" % user_name)
        logging.debug("user_id: '%s'" % user_id)
        user = request.values.get('user', user_name)
        if request.method == 'GET':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "roles_view")
            if auth_state is True:
                role_list = fgapisrv_db.roles_retrieve()
                status = 200
                response = {'roles': role_list}
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        else:
            status = 400
            response = {"message": "Unhandled method: '%s'" % request.method}
    logging.debug('message: %s' % response.get('message', 'success'))
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
def groups_group_roles(group, apiver=fg_config['fgapiver']):
    global fgapisrv_db

    logging.debug('groups_group_roles(%s)/%s: %s' %
                  (request.method, group, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        user_name = current_user.get_name()
        user_id = current_user.get_id()
        logging.debug("user_name: '%s'" % user_name)
        logging.debug("user_id: '%s'" % user_id)
        user = request.values.get('user', user_name)
        if request.method == 'GET':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "groups_roles_view")
            if auth_state is True:
                group_roles_info = fgapisrv_db.group_roles_retrieve(group)
                if group_roles_info is not None:
                    status = 200
                    response = group_roles_info
                else:
                    status = 404
                    response = {
                        'message': ('No roles found for group having name or '
                                    'id: %s' % group)
                    }
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        elif request.method == 'POST':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "groups_roles_change")
            if auth_state is True:
                params = request.get_json()
                if params is not None:
                    logging.debug("params: '%s'" % params)
                    role_ids = params.get('roles', [])
                    new_roles = fgapisrv_db.group_roles_add(group, role_ids)
                    if new_roles is not []:
                        status = 201
                        response = {'roles': new_roles}
                    else:
                        status = 400
                        response = {
                            'message':
                            ('Unable to add roles: \'%s\' '
                             'to the group: \'%s\'' % (role_ids, group))
                        }
                else:
                    status = 400
                    response = {'message': 'Missing group'}
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        else:
            status = 400
            response = {"message": "Unhandled method: '%s'" % request.method}
    logging.debug('message: %s' % response.get('message', 'success'))
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
def groups(apiver=fg_config['fgapiver']):
    global fgapisrv_db

    logging.debug('groups(%s): %s' %
                  (request.method, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        user_name = current_user.get_name()
        user_id = current_user.get_id()
        logging.debug("user_name: '%s'" % user_name)
        logging.debug("user_id: '%s'" % user_id)
        user = request.values.get('user', user_name)
        if request.method == 'GET':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "groups_view")
            if auth_state is True:
                group_list = fgapisrv_db.groups_retrieve()
                status = 200
                response = {'groups': group_list}
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        elif request.method == 'POST':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "groups_change")
            if auth_state is True:
                params = request.get_json()
                if params is not None:
                    logging.debug("params: '%s'" % params)
                    group_name = params.get('name', '')
                    new_group = fgapisrv_db.group_add(group_name)
                    if new_group is not None:
                        status = 201
                        response = new_group
                    else:
                        status = 400
                        response = {
                            'message':
                            'Unable to create group: \'%s\'' % group_name
                        }
                else:
                    status = 400
                    response = {'message': 'Missing group'}
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        else:
            status = 400
            response = {"message": "Unhandled method: '%s'" % request.method}
    logging.debug('message: %s' % response.get('message', 'success'))
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
def users(apiver=fg_config['fgapiver']):
    global fgapisrv_db

    logging.debug('users(%s): %s' % (request.method, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        user_name = current_user.get_name()
        user_id = current_user.get_id()
        logging.debug("user_name: '%s'" % user_name)
        logging.debug("user_id: '%s'" % user_id)
        user = request.values.get('user', user_name)
        if request.method == 'GET':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "users_view")
            if auth_state is True:
                user_record = fgapisrv_db.users_retrieve()
                status = 200
                response = {"users": user_record}
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        elif request.method == 'POST':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "users_change")
            if auth_state is True:
                params = request.get_json()
                logging.debug("params: '%s'" % params)
                new_users = []
                if params is not None:
                    user_records = params.get('users', [])
                    for user_data in user_records:
                        user_record = fgapisrv_db.user_create(user_data)
                        if user_record is not None:
                            new_users.append(user_record)
                    if new_users is not []:
                        status = 201
                        response = {"users": new_users}
                    else:
                        status = 400
                        response = {
                            'message':
                            'Unable to create user(s) \'%s\'' % user_records
                        }
                else:
                    status = 400
                    response = {'message': 'Missing userdata'}
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        else:
            status = 400
            response = {"message": "Unhandled method: '%s'" % request.method}
    logging.debug('message: %s' % response.get('message', 'success'))
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
def users_user_data_name(user, data_name, apiver=fg_config['fgapiver']):
    global fgapisrv_db

    logging.debug('user_data_name(%s, %s)/%s: %s' %
                  (request.method, user, data_name, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        user_name = current_user.get_name()
        user_id = current_user.get_id()
        logging.debug("user_name: '%s'" % user_name)
        logging.debug("user_id: '%s'" % user_id)
        user = request.values.get('user', user)
        if request.method == 'GET':
            if fgapisrv_db.user_exists(user):
                data = fgapisrv_db.user_data_name(user, data_name)
                status = 200
                response = data
            else:
                status = 404
                response = {'message': 'User \'%s\' does not exists' % user}
        elif request.method == 'POST':
            if not fgapisrv_db.user_exists(user):
                status = 404
                response = {'message': 'User \'%s\' does not exists' % user}
            else:
                data = request.get_json()
                data['data_name'] = data_name
                if data is not None:
                    data_entries = [
                        data,
                    ]
                    inserted_data =\
                        fgapisrv_db.add_user_data(user, data_entries)
                    if inserted_data is not None:
                        status = 201
                        response = inserted_data[0]
                    else:
                        status = 400
                        response = {
                            'message':
                            ('Unable to add data %s '
                             'to user \'%s\'') % (data_entries, user)
                        }
                else:
                    status = 400
                    response = {'message': 'Missing data'}
        elif request.method == 'DELETE':
            if not fgapisrv_db.user_exists(user):
                status = 404
                response = {'message': 'User \'%s\' does not exists' % user}
            else:
                data = {'data_name': data_name}
                if data is not None:
                    data_entries = [
                        data,
                    ]
                    deleted_data =\
                        fgapisrv_db.delete_user_data(user, data_entries)
                    if deleted_data is not None:
                        status = 201
                        response = deleted_data[0]
                    else:
                        status = 400
                        response = {
                            'message':
                            ('Unable to delete data %s'
                             ' to user \'%s\'') % (data_entries, user)
                        }
                else:
                    status = 400
                    response = {'message': 'Missing data'}
        elif request.method == 'PATCH':
            if not fgapisrv_db.user_exists(user):
                status = 404
                response = {'message': 'User \'%s\' does not exists' % user}
            else:
                data = request.get_json()
                data['data_name'] = data_name
                logging.debug("data: '%s'" % data)
                if data is not None:
                    data_entries = [
                        data,
                    ]
                    modified_data =\
                        fgapisrv_db.modify_user_data(user, data_entries)
                    if modified_data is not None:
                        status = 201
                        response = modified_data[0]
                    else:
                        status = 400
                        response = {
                            'message':
                            ('Unable to modify data %s'
                             ' to user \'%s\'') % (data_entries, user)
                        }
                else:
                    status = 400
                    response = {'message': 'Missing data'}
        else:
            status = 400
            response = {"message": "Unhandled method: '%s'" % request.method}
    logging.debug('message: %s' % response.get('message', 'success'))
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
def user_groups(user, apiver=fg_config['fgapiver']):
    global fgapisrv_db

    logging.debug('user_groups(%s)/%s: %s' %
                  (request.method, user, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        user_name = current_user.get_name()
        user_id = current_user.get_id()
        logging.debug("user_name: '%s'" % user_name)
        logging.debug("user_id: '%s'" % user_id)
        user = request.values.get('user', user)
        if request.method == 'GET':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "users_groups_view")
            if auth_state is True:
                if fgapisrv_db.user_exists(user):
                    group_list = fgapisrv_db.user_groups_retrieve(user)
                    status = 200
                    response = {'groups': group_list}
                else:
                    status = 404
                    response = {
                        'message': 'User \'%s\' does not exists' % user
                    }
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        elif request.method == 'POST':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "users_groups_change")
            if auth_state is True:
                if not fgapisrv_db.user_exists(user):
                    status = 404
                    response = {
                        'message': 'User \'%s\' does not exists' % user
                    }
                else:
                    params = request.get_json()
                    logging.debug("params: '%s'" % params)
                    if params is not None:
                        group_list = params.get('groups', [])
                        inserted_groups =\
                            fgapisrv_db.add_user_groups(user, group_list)
                        if inserted_groups is not None:
                            status = 201
                            response = {'groups': inserted_groups}
                        else:
                            status = 400
                            response = {
                                'message':
                                ('Unable to assign groups %s '
                                 'to user \'%s\'') % (group_list, user)
                            }
                    else:
                        status = 400
                        response = {'message': 'Missing groups'}
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        elif request.method == 'DELETE':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "users_groups_change")
            if auth_state is True:
                if not fgapisrv_db.user_exists(user):
                    status = 404
                    response = {
                        'message': 'User \'%s\' does not exists' % user
                    }
                else:
                    params = request.get_json()
                    logging.debug("params: '%s'" % params)
                    if params is not None:
                        group_list = params.get('groups', [])
                        deleted_groups =\
                            fgapisrv_db.delete_user_groups(user, group_list)
                        if deleted_groups is not None:
                            status = 200
                            response = {'groups': deleted_groups}
                        else:
                            status = 400
                            response = {
                                'message':
                                ('Unable to delete groups %s'
                                 ' to user \'%s\'') % (group_list, user)
                            }
                    else:
                        status = 400
                        response = {'message': 'Missing groups'}
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        else:
            status = 400
            response = {"message": "Unhandled method: '%s'" % request.method}
    logging.debug('message: %s' % response.get('message', 'success'))
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp
def users_user(user, apiver=fg_config['fgapiver']):
    global fgapisrv_db

    logging.debug('users(%s)/%s: %s' %
                  (request.method, user, request.values.to_dict()))
    api_support, state, message = check_api_ver(apiver)
    if not api_support:
        status = 400
        response = {"message": message}
    else:
        user_name = current_user.get_name()
        user_id = current_user.get_id()
        logging.debug("user_name: '%s'" % user_name)
        logging.debug("user_id: '%s'" % user_id)
        user = request.values.get('user', user)
        if request.method == 'GET':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "users_view")
            if auth_state is True:
                if fgapisrv_db.user_exists(user):
                    user_record = fgapisrv_db.user_retrieve(user)
                    status = 200
                    response = user_record
                else:
                    status = 404
                    response = {
                        'message': 'User \'%s\' does not exists' % user
                    }
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        elif request.method == 'POST':
            auth_state, auth_msg = \
                authorize_user(current_user, None, user, "users_change")
            if auth_state is True:
                if fgapisrv_db.user_exists(user):
                    user_record = fgapisrv_db.user_retrieve(user)
                    status = 200
                    response = user_record
                else:
                    params = request.get_json()
                    logging.debug("params: '%s'" % params)
                    if params is not None:
                        user_data = {
                            'first_name': params.get('first_name', ''),
                            'last_name': params.get('last_name', ''),
                            'name': user,
                            'institute': params.get('institute', ''),
                            'mail': params.get('mail', ''),
                        }
                        user_record = fgapisrv_db.user_create(user_data)
                        if user_record is not None:
                            status = 201
                            response = user_record
                        else:
                            status = 400
                            response = {
                                'message':
                                'Unable to create user \'%s\'' % user
                            }
                    else:
                        status = 400
                        response = {'message': 'Missing userdata'}
            else:
                status = 402
                response = {
                    "message":
                    "Not authorized to perform this request:\n%s" % auth_msg
                }
        else:
            status = 400
            response = {"message": "Unhandled method: '%s'" % request.method}
    logging.debug('message: %s' % response.get('message', 'success'))
    js = json.dumps(response, indent=fg_config['fgjson_indent'])
    resp = Response(js, status=status, mimetype='application/json')
    resp.headers['Content-type'] = 'application/json'
    return resp