コード例 #1
0
ファイル: authorisation.py プロジェクト: jasonrig/mytardis
def share(request, experiment_id):
    '''
    Choose access rights and licence.
    '''
    experiment = Experiment.objects.get(id=experiment_id)
    user = request.user

    c = {}

    c['has_write_permissions'] = \
        authz.has_write_permissions(request, experiment_id)
    c['has_download_permissions'] = \
        authz.has_experiment_download_access(request, experiment_id)
    if user.is_authenticated():
        c['is_owner'] = authz.has_experiment_ownership(request, experiment_id)
        c['is_superuser'] = user.is_superuser
        c['is_staff'] = user.is_staff

    domain = Site.objects.get_current().domain
    public_link = experiment.public_access >= Experiment.PUBLIC_ACCESS_METADATA

    c['experiment'] = experiment
    c['public_link'] = public_link
    c['domain'] = domain

    return HttpResponse(render_response_index(request,
                        'tardis_portal/ajax/share.html', c))
コード例 #2
0
ファイル: authorisation.py プロジェクト: UWA-FoS/trudat
def share(request, experiment_id):
    '''
    Choose access rights and licence.
    '''
    experiment = Experiment.objects.get(id=experiment_id)
    user = request.user

    c = {}

    c['has_write_permissions'] = \
        authz.has_write_permissions(request, experiment_id)
    c['has_download_permissions'] = \
        authz.has_experiment_download_access(request, experiment_id)
    if user.is_authenticated():
        c['is_owner'] = authz.has_experiment_ownership(request, experiment_id)
        c['is_superuser'] = user.is_superuser
        c['is_staff'] = user.is_staff

    domain = Site.objects.get_current().domain
    public_link = experiment.public_access >= Experiment.PUBLIC_ACCESS_METADATA

    c['experiment'] = experiment
    c['public_link'] = public_link
    c['domain'] = domain

    return HttpResponse(render_response_index(request,
                        'tardis_portal/ajax/share.html', c))
コード例 #3
0
ファイル: pages.py プロジェクト: nrmay/mytardis
def sftp_access(request):
    """
    Show dynamically generated instructions on how to connect to SFTP
    :param request: HttpRequest
    :return: HttpResponse
    """
    object_type = request.GET.get('object_type')
    object_id = request.GET.get('object_id')
    sftp_start_dir = ''
    if object_type and object_id:
        ct = ContentType.objects.get_by_natural_key(
            'tardis_portal', object_type)
        item = ct.model_class().objects.get(id=object_id)
        if object_type == 'experiment':
            exps = [item]
            dataset = None
            datafile = None
        else:
            if object_type == 'dataset':
                dataset = item
                datafile = None
            elif object_type == 'datafile':
                datafile = item
                dataset = datafile.dataset
            exps = dataset.experiments.all()
        allowed_exps = []
        for exp in exps:
            if has_experiment_download_access(request, exp.id):
                allowed_exps.append(exp)
        if len(allowed_exps) > 0:
            exp = allowed_exps[0]
            path_parts = ['/home', request.user.username, 'experiments',
                          dirname_with_id(exp.title, exp.id)]
            if dataset is not None:
                path_parts.append(
                    dirname_with_id(dataset.description, dataset.id))
            if datafile is not None:
                path_parts.append(datafile.directory)
            sftp_start_dir = path.join(*path_parts)

    if request.user.userprofile.isDjangoAccount:
        sftp_username = request.user.username
    else:
        login_attr = getattr(settings, 'SFTP_USERNAME_ATTRIBUTE', 'email')
        sftp_username = getattr(request.user, login_attr)
    c = {
        'sftp_host': request.get_host().split(':')[0],
        'sftp_port': getattr(settings, 'SFTP_PORT', 2200),
        'sftp_username': sftp_username,
        'sftp_start_dir': sftp_start_dir,
        'site_name': getattr(settings, 'SITE_TITLE', 'MyTardis'),
    }
    c['sftp_url'] = 'sftp://{}@{}:{}{}'.format(
        c['sftp_username'],
        c['sftp_host'],
        c['sftp_port'],
        c['sftp_start_dir'])
    return render(request, template_name='tardis_portal/sftp.html', context=c)
コード例 #4
0
def sftp_access(request):
    """
    Show dynamically generated instructions on how to connect to SFTP
    :param request: HttpRequest
    :return: HttpResponse
    """
    object_type = request.GET.get('object_type')
    object_id = request.GET.get('object_id')
    sftp_start_dir = ''
    if object_type and object_id:
        ct = ContentType.objects.get_by_natural_key('tardis_portal',
                                                    object_type)
        item = ct.model_class().objects.get(id=object_id)
        if object_type == 'experiment':
            exps = [item]
            dataset = None
            datafile = None
        else:
            if object_type == 'dataset':
                dataset = item
                datafile = None
            elif object_type == 'datafile':
                datafile = item
                dataset = datafile.dataset
            exps = dataset.experiments.all()
        allowed_exps = []
        for exp in exps:
            if has_experiment_download_access(request, exp.id):
                allowed_exps.append(exp)
        if len(allowed_exps) > 0:
            exp = allowed_exps[0]
            path_parts = [
                '/home', request.user.username, 'experiments',
                dirname_with_id(exp.title, exp.id)
            ]
            if dataset is not None:
                path_parts.append(
                    dirname_with_id(dataset.description, dataset.id))
            if datafile is not None:
                path_parts.append(datafile.directory)
            sftp_start_dir = path.join(*path_parts)

    if request.user.userprofile.isDjangoAccount:
        sftp_username = request.user.username
    else:
        login_attr = getattr(settings, 'SFTP_USERNAME_ATTRIBUTE', 'email')
        sftp_username = getattr(request.user, login_attr)
    c = {
        'sftp_host': request.get_host().split(':')[0],
        'sftp_port': getattr(settings, 'SFTP_PORT', 2200),
        'sftp_username': sftp_username,
        'sftp_start_dir': sftp_start_dir,
        'site_name': getattr(settings, 'SITE_TITLE', 'MyTardis'),
    }
    c['sftp_url'] = 'sftp://{}@{}:{}{}'.format(c['sftp_username'],
                                               c['sftp_host'], c['sftp_port'],
                                               c['sftp_start_dir'])
    return render(request, template_name='tardis_portal/sftp.html', context=c)
コード例 #5
0
def experiment_description(request, experiment_id):
    """View an existing experiment's description. To be loaded via ajax.

    :param request: a HTTP Request instance
    :type request: :class:`django.http.HttpRequest`
    :param experiment_id: the ID of the experiment to be edited
    :type experiment_id: string
    :rtype: :class:`django.http.HttpResponse`

    """
    c = {}

    try:
        experiment = Experiment.safe.get(request.user, experiment_id)
    except PermissionDenied:
        return return_response_error(request)
    except Experiment.DoesNotExist:
        return return_response_not_found(request)

    c['experiment'] = experiment
    c['subtitle'] = experiment.title
    c['nav'] = [{
        'name': 'Data',
        'link': '/experiment/view/'
    }, {
        'name': experiment.title,
        'link': experiment.get_absolute_url()
    }]

    c['authors'] = experiment.experimentauthor_set.all()

    c['datafiles'] = \
        DataFile.objects.filter(dataset__experiments=experiment_id)

    c['owners'] = experiment.get_owners()

    # calculate the sum of the datafile sizes
    c['size'] = DataFile.sum_sizes(c['datafiles'])

    c['has_download_permissions'] = \
        authz.has_experiment_download_access(request, experiment_id)

    c['has_write_permissions'] = \
        authz.has_write_permissions(request, experiment_id)

    if request.user.is_authenticated():
        c['is_owner'] = authz.has_experiment_ownership(request, experiment_id)

    _add_protocols_and_organizations(request, experiment, c)

    if 'status' in request.GET:
        c['status'] = request.GET['status']
    if 'error' in request.GET:
        c['error'] = request.GET['error']

    return HttpResponse(
        render_response_index(
            request, 'tardis_portal/ajax/experiment_description.html', c))
コード例 #6
0
def experiment_description(request, experiment_id):
    """View an existing experiment's description. To be loaded via ajax.

    :param request: a HTTP Request instance
    :type request: :class:`django.http.HttpRequest`
    :param experiment_id: the ID of the experiment to be edited
    :type experiment_id: string
    :rtype: :class:`django.http.HttpResponse`

    """
    c = {}

    try:
        experiment = Experiment.safe.get(request.user, experiment_id)
    except PermissionDenied:
        return return_response_error(request)
    except Experiment.DoesNotExist:
        return return_response_not_found(request)

    c['experiment'] = experiment
    c['subtitle'] = experiment.title
    c['nav'] = [{'name': 'Data', 'link': '/experiment/view/'},
                {'name': experiment.title,
                 'link': experiment.get_absolute_url()}]

    c['authors'] = experiment.experimentauthor_set.all()

    c['datafiles'] = \
        DataFile.objects.filter(dataset__experiments=experiment_id)

    c['owners'] = experiment.get_owners()

    # calculate the sum of the datafile sizes
    c['size'] = DataFile.sum_sizes(c['datafiles'])

    c['has_download_permissions'] = \
        authz.has_experiment_download_access(request, experiment_id)

    c['has_write_permissions'] = \
        authz.has_write_permissions(request, experiment_id)

    if request.user.is_authenticated():
        c['is_owner'] = authz.has_experiment_ownership(request, experiment_id)

    _add_protocols_and_organizations(request, experiment, c)

    if 'status' in request.GET:
        c['status'] = request.GET['status']
    if 'error' in request.GET:
        c['error'] = request.GET['error']

    return HttpResponse(render_response_index(request,
                        'tardis_portal/ajax/experiment_description.html', c))
コード例 #7
0
def experiment_datasets_json(request, experiment_id):
    try:
        experiment = Experiment.safe.get(request.user, experiment_id)
    except Experiment.DoesNotExist:
        return return_response_not_found(request)

    has_download_permissions = \
        authz.has_experiment_download_access(request, experiment_id)

    objects = [
        get_dataset_info(ds, include_thumbnail=has_download_permissions,
                         exclude=['datafiles'])
        for ds in experiment.datasets.all().order_by('description')]

    return HttpResponse(json.dumps(objects), content_type='application/json')
コード例 #8
0
ファイル: ajax_json.py プロジェクト: UWA-FoS/trudat
def experiment_datasets_json(request, experiment_id):
    try:
        experiment = Experiment.safe.get(request.user, experiment_id)
    except Experiment.DoesNotExist:
        return return_response_not_found(request)

    has_download_permissions = \
        authz.has_experiment_download_access(request, experiment_id)

    objects = [
        get_dataset_info(ds,
                         include_thumbnail=has_download_permissions,
                         exclude=['datafiles'])
        for ds in experiment.datasets.all().order_by('description')
    ]

    return HttpResponse(json.dumps(objects), content_type='application/json')
コード例 #9
0
ファイル: pages.py プロジェクト: nrmay/mytardis
    def get_context_data(self, request, experiment, **kwargs):
        """
        Prepares the values to be passed to the default experiment view,
        respecting authorization rules. Returns a dict of values (the context).

        :param request: a HTTP request object
        :type request: :class:`django.http.HttpRequest`
        :param experiment: the experiment model instance
        :type experiment: tardis.tardis_portal.models.experiment.Experiment
        :return: A dictionary of values for the view/template.
        :rtype: dict
        """

        c = super(ExperimentView, self).get_context_data(**kwargs)

        c['experiment'] = experiment
        c['has_write_permissions'] = \
            authz.has_write_permissions(request, experiment.id)
        c['has_download_permissions'] = \
            authz.has_experiment_download_access(request, experiment.id)
        if request.user.is_authenticated():
            c['is_owner'] = authz.has_experiment_ownership(request, experiment.id)
            c['has_read_or_owner_ACL'] = authz.has_read_or_owner_ACL(request,
                                                                     experiment.id)

        # Enables UI elements for the publication form
        c['pub_form_enabled'] = 'tardis.apps.publication_forms' in \
                                settings.INSTALLED_APPS

        # Enables UI elements for the push_to app
        c['push_to_enabled'] = PushToConfig.name in settings.INSTALLED_APPS
        if c['push_to_enabled']:
            push_to_args = {
                'experiment_id': experiment.pk
            }
            c['push_to_url'] = reverse(initiate_push_experiment,
                                       kwargs=push_to_args)

        c['subtitle'] = experiment.title
        c['nav'] = [{'name': 'Data', 'link': '/experiment/view/'},
                    {'name': experiment.title,
                     'link': experiment.get_absolute_url()}]

        if 'status' in request.POST:
            c['status'] = request.POST['status']
        if 'error' in request.POST:
            c['error'] = request.POST['error']
        if 'query' in request.GET:
            c['search_query'] = SearchQueryString(request.GET['query'])
        if 'search' in request.GET:
            c['search'] = request.GET['search']
        if 'load' in request.GET:
            c['load'] = request.GET['load']

        _add_protocols_and_organizations(request, experiment, c)

        default_apps = [
            {'name': 'Description',
             'viewfn': 'tardis.tardis_portal.views.experiment_description'},
            {'name': 'Metadata',
             'viewfn': 'tardis.tardis_portal.views.retrieve_experiment_metadata'},
            {'name': 'Sharing', 'viewfn': 'tardis.tardis_portal.views.share'},
            {'name': 'Transfer Datasets',
             'viewfn': 'tardis.tardis_portal.views.experiment_dataset_transfer'},
        ]
        appnames = []
        appurls = []

        for app in getattr(settings, 'EXPERIMENT_APPS', default_apps):
            try:
                appnames.append(app['name'])
                if 'viewfn' in app:
                    appurls.append(reverse(app['viewfn'], args=[experiment.id]))
                elif 'url' in app:
                    appurls.append(app['url'])
            except:
                logger.debug('error when loading default exp apps')

        from tardis.app_config import get_tardis_apps

        for app_name, app in get_tardis_apps():
            try:
                appnames.append(
                    sys.modules['%s.settings' % app].NAME)
                appurls.append(
                    reverse('%s.views.index' % app, args=[experiment.id]))
            except:
                logger.debug("No tab for %s" % app)

        c['apps'] = zip(appurls, appnames)

        return c
コード例 #10
0
    def get_context_data(self, request, experiment, **kwargs):
        """
        Prepares the values to be passed to the default experiment view,
        respecting authorization rules. Returns a dict of values (the context).

        :param request: a HTTP request object
        :type request: :class:`django.http.HttpRequest`
        :param experiment: the experiment model instance
        :type experiment: tardis.tardis_portal.models.experiment.Experiment
        :return: A dictionary of values for the view/template.
        :rtype: dict
        """

        c = super(ExperimentView, self).get_context_data(**kwargs)

        c['experiment'] = experiment
        c['has_write_permissions'] = \
            authz.has_write_permissions(request, experiment.id)
        c['has_download_permissions'] = \
            authz.has_experiment_download_access(request, experiment.id)
        if request.user.is_authenticated():
            c['is_owner'] = authz.has_experiment_ownership(
                request, experiment.id)
            c['has_read_or_owner_ACL'] = authz.has_read_or_owner_ACL(
                request, experiment.id)

        # Enables UI elements for the publication form
        c['pub_form_enabled'] = 'tardis.apps.publication_forms' in \
                                settings.INSTALLED_APPS

        # Enables UI elements for the push_to app
        c['push_to_enabled'] = PushToConfig.name in settings.INSTALLED_APPS
        if c['push_to_enabled']:
            push_to_args = {'experiment_id': experiment.pk}
            c['push_to_url'] = reverse(initiate_push_experiment,
                                       kwargs=push_to_args)

        c['subtitle'] = experiment.title
        c['nav'] = [{
            'name': 'Data',
            'link': '/experiment/view/'
        }, {
            'name': experiment.title,
            'link': experiment.get_absolute_url()
        }]

        if 'status' in request.POST:
            c['status'] = request.POST['status']
        if 'error' in request.POST:
            c['error'] = request.POST['error']
        if 'query' in request.GET:
            c['search_query'] = SearchQueryString(request.GET['query'])
        if 'search' in request.GET:
            c['search'] = request.GET['search']
        if 'load' in request.GET:
            c['load'] = request.GET['load']

        _add_protocols_and_organizations(request, experiment, c)

        default_apps = [
            {
                'name': 'Description',
                'viewfn': 'tardis.tardis_portal.views.experiment_description'
            },
            {
                'name': 'Metadata',
                'viewfn':
                'tardis.tardis_portal.views.retrieve_experiment_metadata'
            },
            {
                'name': 'Sharing',
                'viewfn': 'tardis.tardis_portal.views.share'
            },
            {
                'name': 'Transfer Datasets',
                'viewfn':
                'tardis.tardis_portal.views.experiment_dataset_transfer'
            },
        ]
        appnames = []
        appurls = []

        for app in getattr(settings, 'EXPERIMENT_APPS', default_apps):
            try:
                appnames.append(app['name'])
                if 'viewfn' in app:
                    appurls.append(reverse(app['viewfn'],
                                           args=[experiment.id]))
                elif 'url' in app:
                    appurls.append(app['url'])
            except:
                logger.debug('error when loading default exp apps')

        from tardis.app_config import get_tardis_apps

        for app_name, app in get_tardis_apps():
            try:
                appnames.append(sys.modules['%s.settings' % app].NAME)
                appurls.append(
                    reverse('%s.views.index' % app, args=[experiment.id]))
            except:
                logger.debug("No tab for %s" % app)

        c['apps'] = zip(appurls, appnames)

        return c