def new(cls, environment='prod', user=None, password=None, token=None):
     '''create new documentservice client'''
     services = get_services()
     oauth_url = services['oidc_service'][environment]['url']
     ds_url = services['document_service'][environment]['url']
     if token:
         oauth_client = BBPOIDCClient.bearer_auth(oauth_url, token)
     else:
         oauth_client = BBPOIDCClient.implicit_auth(user, password, oauth_url)
     return cls(ds_url, oauth_client)
Example #2
0
 def new(cls, environment='prod', user=None, password=None, token=None):
     '''create new collab service client'''
     services = get_services()
     oauth_url = services['oidc_service'][environment]['url']
     service_url = services['stream_service'][environment]['url']
     if token:
         oauth_client = BBPOIDCClient.bearer_auth(oauth_url, token)
     else:
         oauth_client = BBPOIDCClient.implicit_auth(user, password, oauth_url)
     return cls(service_url, oauth_client, environment)
Example #3
0
def create_doc_client(access_token):

    services = bsc.get_services()

    # get clients from bbp python packages
    oidc_client = BBPOIDCClient.bearer_auth(
        services['oidc_service']['prod']['url'], access_token)
    bearer_client = BBPOIDCClient.bearer_auth('prod', access_token)
    doc_client = DocClient(services['document_service']['prod']['url'],
                           oidc_client)

    return doc_client
Example #4
0
def copy_datafiles_to_collab_storage(request, job, local_dir, relative_paths):

    # upload local files to collab storage
    from bbp_client.oidc.client import BBPOIDCClient
    from bbp_client.document_service.client import Client as DocClient
    import bbp_services.client as bsc
    services = bsc.get_services()

    access_token = get_access_token(request.user.social_auth.get())
    oidc_client = BBPOIDCClient.bearer_auth(
        services['oidc_service']['prod']['url'], access_token)
    doc_client = DocClient(services['document_service']['prod']['url'],
                           oidc_client)

    project = doc_client.get_project_by_collab_id(job.collab_id)
    root = doc_client.get_path_by_id(project["_uuid"])
    collab_folder = root + "/job_{}".format(job.pk)
    folder_id = doc_client.mkdir(collab_folder)

    collab_paths = []
    for relative_path in relative_paths:
        collab_path = os.path.join(collab_folder, relative_path)
        if os.path.dirname(relative_path):  # if there are subdirectories...
            doc_client.makedirs(os.path.dirname(collab_path))
        local_path = os.path.join(local_dir, relative_path)
        id = doc_client.upload_file(local_path, collab_path)
        collab_paths.append(collab_path)
        content_type = mimetypes.guess_type(local_path)[0]
        if content_type:
            doc_client.set_standard_attr(collab_path,
                                         {'_contentType': content_type})

    return collab_paths
Example #5
0
    def get_related_data(self, user):
        # assume for now that data is in collab
        from bbp_client.oidc.client import BBPOIDCClient
        from bbp_client.document_service.client import Client as DocClient
        import bbp_services.client as bsc
        services = bsc.get_services()

        access_token = get_access_token(user.social_auth.get())
        oidc_client = BBPOIDCClient.bearer_auth(
            services['oidc_service']['prod']['url'], access_token)
        doc_client = DocClient(services['document_service']['prod']['url'],
                               oidc_client)

        parse_result = urlparse(self.object.results_storage)
        if parse_result.scheme == "collab":
            collab_folder = parse_result.path
            #return doc_client.listdir(collab_folder)
            folder_uuid = doc_client.get_standard_attr(collab_folder)['_uuid']
            data = {
                "folder": {
                    "path": collab_folder,
                }
            }
            if self.object.project:
                data["folder"]["url"] = self.get_collab_storage_url(
                ) + "?state=uuid={}".format(folder_uuid)
            return data
        else:
            print("Storage not yet supported")
            return {}
Example #6
0
def authenticate_oidc():
    """ Authentication to OIDC Service
    """
    # TODO: decorator authentication
    global user
    user = raw_input("Username of Gaspar's account ")
    services = get_services()
    env = get_environments()
    oauth_url = services['oidc_service'][env[0]]['url']
    # print oauth_url
    # TODO: try ... catch exception
    BBPOIDCClient.implicit_auth(user, oauth_url=oauth_url)
    # root token can get expired, need to login again with Gaspar-pass

    # create Client-instance
    cl = Client.new()
    return cl
Example #7
0
def upload_zip_file_to_storage(request):

    access_token = get_access_token(request.user.social_auth.get())
    # retrieve data from request.session
    headers = request.session['headers']
    collab_id = request.session['collab_id']
    st_rel_user_results_folder = request.session['st_rel_user_results_folder']
    st_rel_user_uploaded_folder = request.session[
        'st_rel_user_uploaded_folder']
    crr_user_folder = request.session['time_info']
    output_path = request.session['result_file_zip']
    context = request.session['context']
    services = bsc.get_services()

    # get clients from bbp python packages
    oidc_client = BBPOIDCClient.bearer_auth(\
            services['oidc_service']['prod']['url'], access_token)
    bearer_client = BBPOIDCClient.bearer_auth('prod', access_token)
    doc_client = DocClient(\
            services['document_service']['prod']['url'], oidc_client)

    context = request.session['context']
    #logout(request)
    nextUrl = urllib.quote('%s?ctx=%s' % (request.path, context))

    # extract project from collab_id
    project = doc_client.get_project_by_collab_id(collab_id)

    # extract collab storage root path
    storage_root = doc_client.get_path_by_id(project["_uuid"])
    crr_collab_storage_folder = os.path.join(storage_root, \
            st_rel_user_results_folder)
    if not doc_client.exists(crr_collab_storage_folder):
        doc_client.makedirs(crr_collab_storage_folder)

    # final zip collab storage path
    zip_collab_storage_path = os.path.join(crr_collab_storage_folder, \
            crr_user_folder + '_results.zip')

    # bypassing uploading data to collab storage
    if not doc_client.exists(zip_collab_storage_path):
        doc_client.upload_file(output_path, zip_collab_storage_path)

    # render to html page
    return HttpResponse("")
Example #8
0
def main(args=None):
    '''Main function'''
    args = args or sys.argv[1:]
    args = get_parser().parse_args(args)

    if hasattr(args, 'ex_yaml') and args.ex_yaml:
        print EXAMPLE_YAML
        return

    L.debug('Environment: %s Username: %s', args.env, args.user)

    logging.basicConfig(level=VERBOSITY_LEVELS[min(args.verbose,
                                                   len(VERBOSITY_LEVELS) - 1)],
                        format=DEFAULT_LOG_FORMAT)

    if args.subcommand == 'path':
        if os.path.isfile(args.src):
            if args.type is not None or args.ignore_type:
                all_info = [
                    collect_single_file(args.src, args.dst, args.type,
                                        args.upload)
                ]
            else:
                raise SystemExit(
                    _get_missing_contenttype_msg(args.src, args.type))
        else:
            all_info = collect_from_local_fs(args.src, args.dst, args.upload)

    else:
        assert args.subcommand == 'yaml'
        if not args.src:
            raise SystemExit('Must supply at least one yaml file to import')
        all_info = collect_from_registry(args.src)

    oidc_client = BBPOIDCClient.implicit_auth(user=args.user,
                                              password=args.password,
                                              oauth_url=args.env)
    ds_server = args.server or args.env
    ds_client = DSClient(ds_server, oidc_client)

    services = get_services()
    hbp_portal_url = services['hbp_portal'][args.env]['url']

    new_imports, _ = do_import(ds_client, all_info, args.fail_hard)

    if not args.return_imports:
        for i in new_imports:
            print 'Link:', viewer_url(hbp_portal_url, i.dst)
        print 'imported', len(new_imports), 'items'
    else:
        return new_imports
def main(args=None):
    '''Main function'''
    args = args or sys.argv[1:]
    args = get_parser().parse_args(args)

    if hasattr(args, 'ex_yaml') and args.ex_yaml:
        print EXAMPLE_YAML
        return

    L.debug('Environment: %s Username: %s', args.env, args.user)

    logging.basicConfig(level=VERBOSITY_LEVELS[min(args.verbose, len(VERBOSITY_LEVELS) - 1)],
                        format=DEFAULT_LOG_FORMAT)

    if args.subcommand == 'path':
        if os.path.isfile(args.src):
            if args.type is not None or args.ignore_type:
                all_info = [collect_single_file(args.src, args.dst, args.type, args.upload)]
            else:
                raise SystemExit(_get_missing_contenttype_msg(args.src, args.type))
        else:
            all_info = collect_from_local_fs(args.src, args.dst, args.upload)

    else:
        assert args.subcommand == 'yaml'
        if not args.src:
            raise SystemExit('Must supply at least one yaml file to import')
        all_info = collect_from_registry(args.src)

    oidc_client = BBPOIDCClient.implicit_auth(user=args.user, password=args.password,
                                              oauth_url=args.env)
    ds_server = args.server or args.env
    ds_client = DSClient(ds_server, oidc_client)

    services = get_services()
    hbp_portal_url = services['hbp_portal'][args.env]['url']

    new_imports, _ = do_import(ds_client, all_info, args.fail_hard)

    if not args.return_imports:
        for i in new_imports:
            print 'Link:', viewer_url(hbp_portal_url, i.dst)
        print 'imported', len(new_imports), 'items'
    else:
        return new_imports
Example #10
0
    def new(cls, environment='prod', user=None, password=None):
        '''create a new cross-service client'''
        services = get_services()

        oauth_client = BBPOIDCClient().implicit_auth(
            user=user,
            password=password,
            oauth_url=services['oidc_service'][environment]['url'])

        return cls(task_client=TaskClient(
            host=services['task_service'][environment]['url'],
            oauth_client=oauth_client),
                   prov_client=ProvClient(
                       host=services['prov_service'][environment]['url'],
                       oauth_client=oauth_client),
                   document_client=DocumentClient(
                       host=services['document_service'][environment]['url'],
                       oauth_client=oauth_client),
                   mimetype_client=MIMETypeClient(
                       host=services['mimetype_service'][environment]['url']))