コード例 #1
0
print(args.sharedDir)
print(args.shareName)

if not os.path.exists(args.sharedDir):
    os.makedirs(args.sharedDir)
    os.chmod(args.sharedDir, 0777)

authToken = ''
transferToken = ''
endpointId = ''

tc = TransferClient(
    authorizer=transferToken)  # uses transfer_token from the config file
auth = AuthClient(authorizer=authToken)

identities = auth.get_identities(usernames="*****@*****.**" % args.shareName)
user_identity_id = identities['identities'][0]['id']
try:
    tc.add_endpoint_acl_rule(
        endpointId,
        dict(principal=user_identity_id,
             principal_type='identity',
             path=args.sharedDir,
             permissions='rw'),
    )
    with open('/var/log/globus_shares.log', 'w') as f:
        fwrite('Shared %s with %s' % (args.sharedDir, args.shareName))
except TransferAPIError as error:
    if error.code != 'Exists':
        raise
コード例 #2
0
def doit():
    """
    - Call token introspect
    - Get dependent tokens
    """
    dependent_tokens = get_dependent_tokens(g.req_token)

    # dependent_tokens is a token response object
    # create transfer_token and http_token variables containing
    # the correct token for each resource server
    transfer_token = dependent_tokens.by_resource_server[
        'transfer.api.globus.org']['access_token']
    http_token = dependent_tokens.by_resource_server[
        'tutorial-https-endpoint.globus.org']['access_token']

    selected_ids = request.form.getlist('datasets')
    selected_year = request.form.get('year')
    user_identity_id = request.form.get('user_identity_id')
    user_identity_name = request.form.get('user_identity_name')

    selected_datasets = [
        dataset for dataset in datasets if dataset['id'] in selected_ids
    ]

    if not (selected_datasets and selected_year):
        raise BadRequestError()

    transfer = TransferClient(authorizer=AccessTokenAuthorizer(transfer_token))

    source_ep = app.config['DATASET_ENDPOINT_ID']
    source_info = transfer.get_endpoint(source_ep)
    source_https = source_info['https_server']
    source_base = app.config['DATASET_ENDPOINT_BASE']
    source_token = http_token

    dest_ep = app.config['GRAPH_ENDPOINT_ID']
    dest_info = transfer.get_endpoint(dest_ep)
    dest_https = dest_info['https_server']
    dest_base = app.config['GRAPH_ENDPOINT_BASE']
    dest_path = '%sGraphs for %s/' % (dest_base, user_identity_name)
    dest_token = http_token

    if not (source_https and dest_https):
        raise InternalServerError(message='Endpoints must be HTTPS servers')

    svgs = {}

    for dataset in selected_datasets:
        source_path = dataset['path']
        response = requests.get(
            '%s%s%s/%s.csv' %
            (source_https, source_base, source_path, selected_year),
            headers=dict(Authorization='Bearer ' + source_token),
            allow_redirects=False)
        response.raise_for_status()
        svgs.update(
            render_graphs(
                csv_data=response.iter_lines(decode_unicode=True),
                append_titles=' from %s for %s' %
                (dataset['name'], selected_year),
            ))

    transfer.endpoint_autoactivate(dest_ep)

    try:
        transfer.operation_mkdir(dest_ep, dest_path)
    except TransferAPIError as error:
        if 'MkdirFailed.Exists' not in error.code:
            raise

    try:
        transfer.add_endpoint_acl_rule(
            dest_ep,
            dict(principal=user_identity_id,
                 principal_type='identity',
                 path=dest_path,
                 permissions='r'),
        )
    except TransferAPIError as error:
        # PermissionDenied can happen if a new Portal client is swapped
        # in and it doesn't have endpoint manager on the dest_ep.
        # The /portal/processed directory has been set to to read/write
        # for all users so the subsequent operations will succeed.
        if error.code == 'PermissionDenied':
            pass
        elif error.code != 'Exists':
            raise

    for filename, svg in svgs.items():
        requests.put('%s%s%s.svg' % (dest_https, dest_path, filename),
                     data=svg,
                     headers=dict(Authorization='Bearer ' + dest_token),
                     allow_redirects=False).raise_for_status()

    results = {
        'dest_ep': dest_ep,
        'dest_path': dest_path,
        'dest_name': dest_info['display_name'],
        'graph_count': len(svgs) or 0
    }

    return jsonify(results)
コード例 #3
0
ファイル: add_acl.py プロジェクト: kbase/kb-ftp-api
                help='Directory to create a share on', required=True)
parser.add_argument('--share-name', dest='shareName', 
                help='globusid to share with', required=True)

args = parser.parse_args()
print(args.sharedDir)
print(args.shareName)

if not os.path.exists(args.sharedDir):
    os.makedirs(args.sharedDir)
    os.chmod(args.sharedDir, 0777)

authToken = ''
transferToken = ''
endpointId = ''

tc = TransferClient(authorizer=transferToken) # uses transfer_token from the config file
auth = AuthClient(authorizer=authToken)

identities = auth.get_identities(usernames="*****@*****.**" % args.shareName)
user_identity_id = identities['identities'][0]['id']
try:
   tc.add_endpoint_acl_rule(
       endpointId,
       dict(principal=user_identity_id,
            principal_type='identity', path=args.sharedDir, permissions='rw'),
   )
except TransferAPIError as error:
   if error.code != 'Exists':
       raise
コード例 #4
0
ファイル: add_acl.py プロジェクト: danielolson5/kb-ftp-api
import os

parser = argparse.ArgumentParser(description='kbase share creator')
parser.add_argument('--share-dir', dest='sharedDir',
                help='Directory to create a share on', required=True)
parser.add_argument('--share-name', dest='shareName', 
                help='globusid to share with', required=True)

args = parser.parse_args()
print(args.sharedDir)
print(args.shareName)

if not os.path.exists(args.sharedDir):
    os.makedirs(args.sharedDir)
    os.chmod(args.sharedDir, 0777)

tc = TransferClient() # uses transfer_token from the config file
auth = AuthClient()

identities = auth.get_identities(usernames="*****@*****.**" % args.shareName)
user_identity_id = identities['identities'][0]['id']
try:
   tc.add_endpoint_acl_rule(
       '3aca022a-5e5b-11e6-8309-22000b97daec',
       dict(principal=user_identity_id,
            principal_type='identity', path=args.sharedDir, permissions='rw'),
   )
except TransferAPIError as error:
   if error.code != 'Exists':
       raise
コード例 #5
0
def doit():
    """
    - Call token introspect
    - Get dependent tokens
    """
    dependent_tokens = get_dependent_tokens(g.req_token)

    # dependent_tokens is a token response object
    # create transfer_token and http_token variables containing
    # the correct token for each resource server
    transfer_token = dependent_tokens.by_resource_server[
        'transfer.api.globus.org']['access_token']
    http_token = dependent_tokens.by_resource_server[
        app.config['GRAPH_ENDPOINT_ID']]['access_token']

    selected_ids = request.form.getlist('datasets')
    selected_year = request.form.get('year')
    user_identity_id = request.form.get('user_identity_id')
    user_identity_name = request.form.get('user_identity_name')

    selected_datasets = [dataset for dataset in datasets
                         if dataset['id'] in selected_ids]

    if not (selected_datasets and selected_year):
        raise BadRequestError()

    transfer = TransferClient(authorizer=AccessTokenAuthorizer(transfer_token))

    source_ep = app.config['DATASET_ENDPOINT_ID']
    source_info = transfer.get_endpoint(source_ep)
    source_https = source_info['https_server']
    source_base = app.config['DATASET_ENDPOINT_BASE']
    source_token = http_token

    dest_ep = app.config['GRAPH_ENDPOINT_ID']
    dest_info = transfer.get_endpoint(dest_ep)
    dest_https = dest_info['https_server']
    dest_base = app.config['GRAPH_ENDPOINT_BASE']
    dest_path = '%sGraphs for %s/' % (dest_base, user_identity_name)
    dest_token = http_token

    if not (source_https and dest_https):
        raise InternalServerError(message='Endpoints must be HTTPS servers')

    svgs = {}

    for dataset in selected_datasets:
        source_path = dataset['path']
        response = requests.get('%s%s%s/%s.csv' % (source_https, source_base,
                                                   source_path, selected_year),
                                headers=dict(
                                    Authorization='Bearer ' + source_token),
                                allow_redirects=False)
        response.raise_for_status()
        svgs.update(render_graphs(
            csv_data=response.iter_lines(decode_unicode=True),
            append_titles=' from %s for %s' % (dataset['name'], selected_year),
        ))

    transfer.endpoint_autoactivate(dest_ep)

    try:
        transfer.operation_mkdir(dest_ep, dest_path)
    except TransferAPIError as error:
        if 'MkdirFailed.Exists' not in error.code:
            raise

    try:
        transfer.add_endpoint_acl_rule(
            dest_ep,
            dict(principal=user_identity_id,
                 principal_type='identity', path=dest_path, permissions='r'),
        )
    except TransferAPIError as error:
        # PermissionDenied can happen if a new Portal client is swapped
        # in and it doesn't have endpoint manager on the dest_ep.
        # The /portal/processed directory has been set to to read/write
        # for all users so the subsequent operations will succeed.
        if error.code == 'PermissionDenied':
            pass
        elif error.code != 'Exists':
            raise

    for filename, svg in svgs.items():
        requests.put('%s%s%s.svg' % (dest_https, dest_path, filename),
                     data=svg,
                     headers=dict(Authorization='Bearer ' + dest_token),
                     allow_redirects=False).raise_for_status()

    results = {
        'dest_ep': dest_ep,
        'dest_path': dest_path,
        'dest_name': dest_info['display_name'],
        'graph_count': len(svgs) or 0
    }

    return jsonify(results)