Ejemplo n.º 1
0
def dataset_query_service( request ):
    """
        Complex Query Service
    """

    if request.method == 'POST':
        query_request = simplejson.loads(request.POST['groups_query'])
        id = request.POST.get('id', "")
        endpoint = request.POST.get('endpoint', "")

        query_sparql = json2sparql(query_request)

        import re

        r = re.compile('sparqlEndpoint=(.*?)&')
        endpoint_url = r.search(endpoint)
        from masterinterface.atos.exceptions import AtosPermissionException
        try:
            connector = json.dumps(dataset_query_connector(query_sparql, endpoint_url, request.user.username, request.ticket), sort_keys=False)
        except AtosPermissionException, e:
            response = HttpResponse(status=401)
            response._is_string = False
            return response


        response = HttpResponse(content=connector,
                                content_type='application/json ')
        response._is_string = False

        return response
Ejemplo n.º 2
0
    def read(self, request, ticket="", group="", username=""):
        """
            Promote a user as manager of a group
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            group (string) : the group name
            username (string) : the username

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """
        try:
            if request.GET.get("ticket"):
                client_address = request.META["REMOTE_ADDR"]
                user, tkt64 = authenticate(ticket=request.GET["ticket"], cip=client_address)

                if user is not None:

                    group = VPHShareSmartGroup.objects.get(name=request.GET.get("group"))
                    user_to_promote = User.objects.get(username=request.GET.get("username"))

                    if not group.is_manager(user):
                        response = HttpResponse(status=403)
                        response._is_string = True
                        return response

                    # add user to the managers
                    group.managers.add(user_to_promote)

                    # add user to the group and all sub groups
                    while group is not None:
                        group.user_set.add(user_to_promote)
                        try:
                            group = VPHShareSmartGroup.objects.get(parent=group)
                        except ObjectDoesNotExist, e:
                            group = None

                    response = HttpResponse(status=200)
                    response._is_string = True
                    response.write("OK")
                    return response

                else:
                    response = HttpResponse(status=403)
                    response._is_string = True
                    return response

        except Exception, e:
            from raven.contrib.django.raven_compat.models import client

            client.captureException()
            response = HttpResponse(status=500)
            response._is_string = True
            return response
Ejemplo n.º 3
0
    def read(self, request, ticket="", group="", name=""):
        """
            Add a user to a smart group
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            group (string) : the group name
            name (string) : the username or the group name to add

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """
        try:
            if request.GET.get("ticket"):
                client_address = request.META["REMOTE_ADDR"]
                user, tkt64 = authenticate(ticket=request.GET["ticket"], cip=client_address)

                if user is not None:

                    group = VPHShareSmartGroup.objects.get(name=request.GET.get("group"))

                    if not group.is_manager(user):
                        response = HttpResponse(status=403)
                        response._is_string = True
                        return response

                    try:
                        user_to_add = User.objects.get(username=request.GET.get("name"))
                        # add user to all children groups
                        if request.GET.get("recursive", False):
                            add_user_to_group(user_to_add, group)
                        else:
                            group.user_set.add(user_to_add)

                    except ObjectDoesNotExist, e:
                        try:
                            group_to_add = VPHShareSmartGroup.objects.get(name=request.GET.get("name"))
                            if not can_be_child(group_to_add, group):
                                response = HttpResponse(status=500, content="constraint violation circularity")
                                response._is_string = True
                                return response
                            group_to_add.parent = group
                            group_to_add.save()
                        except ObjectDoesNotExist, e:
                            response = HttpResponse(status=403)
                            response._is_string = True
                            return response

                    response = HttpResponse(status=200)
                    response._is_string = True
                    response.write("OK")
                    return response

                else:
Ejemplo n.º 4
0
    def read(self, request, ticket="", name=""):
        """
            Delete a smart group
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            group (string) : the group name

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """
        try:
            if request.GET.get("ticket"):
                client_address = request.META["REMOTE_ADDR"]
                user, tkt64 = authenticate(ticket=request.GET["ticket"], cip=client_address)

                if user is not None:

                    name = request.GET.get("group")

                    group = VPHShareSmartGroup.objects.get(name=name)

                    if not user in group.managers.all():
                        response = HttpResponse(status=403)
                        response._is_string = True
                        return response

                    group.active = False
                    group.remove_users()
                    # remove this group from children parent reference
                    for child in VPHShareSmartGroup.objects.filter(parent=group):
                        child.parent = None
                        child.save()
                    group.parent = None
                    group.save()

                    response = HttpResponse(status=200)
                    response._is_string = True
                    response.write("OK")
                    return response

                else:
                    response = HttpResponse(status=403)
                    response._is_string = True
                    return response

        except Exception, e:
            from raven.contrib.django.raven_compat.models import client

            client.captureException()
            response = HttpResponse(status=500)
            response._is_string = True
            return response
Ejemplo n.º 5
0
    def read(self, request, ticket="", group=""):
        """
            Given a group name, return the list of subscribers
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            group (string) : the group name

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """
        try:
            if request.GET.get("ticket"):
                client_address = request.META["REMOTE_ADDR"]
                user, tkt64 = authenticate(ticket=request.GET["ticket"], cip=client_address)

                if user is not None:

                    try:
                        group = VPHShareSmartGroup.objects.get(name=request.GET.get("group"))
                    except ObjectDoesNotExist, e:
                        response = HttpResponse(status=404)
                        response._is_string = True
                        return response

                    return {
                        "users": [
                            {
                                "username": user.username,
                                "fullname": "%s %s" % (user.first_name, user.last_name),
                                "email": user.email,
                            }
                            for user in group.user_set.all()
                        ],
                        "groups": [
                            {"groupname": g.name, "subscribers": len(g.user_set.all())}
                            for g in VPHShareSmartGroup.objects.filter(parent=group)
                        ],
                    }

                else:
                    response = HttpResponse(status=403)
                    response._is_string = True
                    return response

        except Exception, e:
            from raven.contrib.django.raven_compat.models import client

            client.captureException()
            response = HttpResponse(status=500)
            response._is_string = True
            return response
Ejemplo n.º 6
0
    def read(self, request, ticket="", username=""):
        """
            Given a username, return the list of groups he is part of
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            username(string) : the username you want to know the groups

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """
        try:
            if request.GET.get("ticket"):
                client_address = request.META["REMOTE_ADDR"]
                user, tkt64 = authenticate(ticket=request.GET["ticket"], cip=client_address)

                if user is not None:

                    try:
                        target_user = User.objects.get(username=request.GET.get("username"))
                    except ObjectDoesNotExist, e:
                        response = HttpResponse(status=404)
                        response._is_string = True
                        return response
                    if request.GET.get("institution", None) is None:
                        res = [
                            {"groupname": g.name, "subscribers": len(g.user_set.all())}
                            for g in target_user.groups.all()
                        ]
                    else:
                        res = [
                            {"groupname": g.institution.name, "subscribers": len(g.institution.user_set.all())}
                            for g in InstitutionPortal.objects.all()
                            if target_user in g.institution.user_set.all()
                        ]
                    return res

                else:
                    response = HttpResponse(status=403)
                    response._is_string = True
                    return response

        except Exception, e:
            from raven.contrib.django.raven_compat.models import client

            client.captureException()
            response = HttpResponse(status=500)
            response._is_string = True
            return response
Ejemplo n.º 7
0
    def read(self, request, ticket="", term=""):
        """
            Process a search user request.
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            term (string) : search term

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """
        try:
            if request.GET.get("ticket"):
                client_address = request.META["REMOTE_ADDR"]
                user, tkt64 = authenticate(ticket=request.GET["ticket"], cip=client_address)

                if user is not None:

                    term = request.GET.get("term", "")

                    users = User.objects.filter(
                        Q(username__icontains=term)
                        | Q(email__icontains=term)
                        | Q(first_name__icontains=term)
                        | Q(last_name__icontains=term)
                    )

                    groups = Group.objects.filter(name__icontains=term)

                    return {
                        "users": [
                            {"username": user.username, "fullname": "%s %s" % (user.first_name, user.last_name)}
                            for user in users
                        ],
                        "groups": [{"groupname": g.name, "subscribers": len(g.user_set.all())} for g in groups],
                    }

                else:
                    response = HttpResponse(status=403)
                    response._is_string = True
                    return response

        except Exception, e:
            from raven.contrib.django.raven_compat.models import client

            client.captureException()
            response = HttpResponse(status=500)
            response._is_string = True
            return response
Ejemplo n.º 8
0
def get_latest_query( request ):
    """
    """

    if request.method == 'POST':

        user = request.user

        try:
            latest_query = Query.objects.filter(user=user).order_by('-date')
            latest_query_dict = []
            for query in latest_query[:5]:
                latest_query_dict.append([query.id, query.name, query.query])
            for query in latest_query[5:]:
                if query.saved:
                    latest_query_dict.append([query.id, query.name, query.query])

            response = HttpResponse(content=json.dumps(latest_query_dict), content_type='application/json ')

            response._is_string = False

            return response

        except Exception, e:
            return
Ejemplo n.º 9
0
def save_complex_query( request ):
    """
    """

    if request.method == 'POST':

        query = request.POST['groups_query']
        name = request.POST['name']
        id = request.POST['id']
        user = request.user

        try:
            if id != '':

                query_obj = Query.objects.get(id=id)
                query_obj.name = name
                query_obj.query = query
                query_obj.saved = True

            else:
                query_obj = Query(name=name, query=query, saved=True)

            query_obj.save()
            query_obj.user.add(user)

            response = HttpResponse(status=200, content_type='application/json ')
            response._is_string = False

            return response

        except Exception, e:
            return
Ejemplo n.º 10
0
def retriveVtk(request):

    if request.user.is_authenticated():
        path = request.POST.get('path','')
        if not path:
            path = '/'
        try:
            webdav = easywebdav.connect(settings.LOBCDER_HOST, username='******',
                                        password=request.ticket, protocol='https'
                                        )
            fileName = path.split('/')[-1]
            fileToDownload = os.path.join(settings.LOBCDER_DOWNLOAD_DIR, fileName)
            downloadChunks = webdav.downloadChunks(settings.LOBCDER_ROOT + path)
            #remove file if exists
            if os.path.exists(fileToDownload) and os.stat(fileToDownload)[6] != int(downloadChunks.raw.headers['content-length']):
                os.remove(fileToDownload)

            if not os.path.exists(fileToDownload):
                webdav.download(settings.LOBCDER_ROOT+ path, fileToDownload)

            content = json.dumps({'path': fileName}, sort_keys=False)

            response = HttpResponse(content=content,
                                    content_type='application/json')
            return response

        except Exception, e:
            client.captureException()
            response = HttpResponse(status=500)
            response._is_string = True

            return response
Ejemplo n.º 11
0
    def read(self, request, ticket=''):

        """
            Process a Validate ticket request.
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.

            Return:

            Successes - Json/xml/yaml format response (response format depend on request content/type)
            Failure - 403 error

        """
        try:
            if request.GET.get('ticket'):
                client_address = request.META['REMOTE_ADDR']
                user, tkt64 = authenticate(ticket=request.GET['ticket'], cip=client_address)

                if user is not None:
                    theurl = settings.ATOS_SERVICE_URL
                    username = user.username
                    password = request.GET['ticket']

                    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
                    passman.add_password(None, theurl, username, password)
                    authhandler = urllib2.HTTPBasicAuthHandler(passman)

                    opener = urllib2.build_opener(authhandler)

                    urllib2.install_opener(opener)
                    #pagehandle = urllib2.urlopen(theurl)

                    #if pagehandle.code == 200 :
                    return user.userprofile.to_dict()

            response = HttpResponse(status=403)
            response._is_string = True
            return response
        except Exception, e:
            response = HttpResponse(status=403)
            response._is_string = True
            return response
Ejemplo n.º 12
0
def guided_search_s2_service( request ):
    """
        Guided Search Step2 Service
    """

    if request.method == 'POST':
        concept_uri_list = request.POST['concept_uri_list']
        connector = guided_search_s2_connector(quote(concept_uri_list))

        response = HttpResponse(content=connector,
                                content_type='application/json')
        response._is_string = False

        return response

    response = HttpResponse(status=403)
    response._is_string = True

    return response
Ejemplo n.º 13
0
def set_privacy(request):

    if request.user.userprofile.privacy:
        request.user.userprofile.privacy = False
    else:
        request.user.userprofile.privacy = True
    request.user.userprofile.save()

    response = HttpResponse(status=200)
    response._is_string = True
    return response
Ejemplo n.º 14
0
def api_error(status, code, message, extra=None):
    data = {
        'code': code,
        'message': message,
        'extra': extra or {}
    }
    response = HttpResponse(content=data, status=status)
    response['Vary'] = 'Accept'
    # Add back bit expected by django-piston but removed from django 1.5
    response._is_string = False
    return response
Ejemplo n.º 15
0
def search_service(request):

    if request.method == "POST":
        # min = int(request.POST['min'])
        # max = int(request.POST['max'])
        page = int(request.POST["page"])
        countType = request.session["countType"]
        search_text = request.session["search_text"]
        expression = request.session["expression"]
        pages = request.session["pages"]
        results = request.session["results"]
        if page > request.session["page"]:
            results = search_resource(search_text, expression, numResults=20, page=page)
            for ctype, counter in countType.items():
                request.session["countType"][ctype] += counter
            countType = request.session["countType"]
            request.session["results"] += results
            request.session["page"] = page

        filterby = request.POST.get("filterby", None)
        if filterby != "[]":
            filterby = json.loads(filterby)
            numResults = 0
            tmpresults = list(results)
            results = []
            for filter in filterby:
                numResults += request.session["types"].get(filter, 0)
            for result in tmpresults:
                if (
                    result["type"]
                    not in ["Dataset", "Workflow", "AtomicService", "File", "SemanticWebService", "User", "Institution"]
                    and "Other" in filterby
                ):
                    results.append(result)
                if result["type"] in filterby:
                    results.append(result)

        resultsRender = render_to_string("scs/search_results.html", {"results": results})

        return HttpResponse(
            status=200,
            content=json.dumps(
                {"data": resultsRender, "numResults": len(request.session["results"]), "countType": countType},
                sort_keys=False,
            ),
            content_type="application/json",
        )

    response = HttpResponse(status=403)
    response._is_string = True
    return response
Ejemplo n.º 16
0
def hide_notification(request):
    """
        add tag to resource's metadata
    """
    try:
        if request.user.is_authenticated() and request.method == "POST" and request.POST.get("notificationId", None):
            from masterinterface.scs.models import Notification

            notification = Notification.objects.get(pk=request.POST.get("notificationId", None))
            notification.hidden = True
            notification.save()
            response = HttpResponse(status=200)
            response._is_string = True
            return response

        raise

    except Exception, e:
        from raven.contrib.django.raven_compat.models import client

        client.captureException()
        response = HttpResponse(status=403)
        response._is_string = True
        return response
Ejemplo n.º 17
0
def bt_agreement_check(request):

    if request.method == 'POST' and request.POST.get('username'):
        try:
            user = User.objects.get(username=request.POST.get('username'))
            agreement = UserAgreement.objects.get(user=user)
            if not agreement.privacy:
                raise ObjectDoesNotExist
            response = HttpResponse('TRUE')
        except ObjectDoesNotExist:
            response = HttpResponse('FALSE')
    else:
        response = HttpResponse(status=403)

    response._is_string = True
    return response
Ejemplo n.º 18
0
def automatic_search_service( request ):
    """
        Automatic Search Service
    """

    if request.method == 'POST':
        free_text = request.POST['input']
        connector = json.dumps(automatic_search_connector(quote(free_text), request.user), sort_keys=False)

        response = HttpResponse(content=connector,
                                content_type='application/json')
        return response

    response = HttpResponse(status=403)
    response._is_string = True

    return response
Ejemplo n.º 19
0
def basic_sendfile(fileobj, download_name=None):
    if not os.path.exists(fileobj.path):
        raise Http404

    wrapper = FileWrapper(open(fileobj.path,"r"))

    content_type = mimetypes.guess_type(fileobj.path)[0]
    response = HttpResponse(wrapper, content_type=content_type)
    response['Content-Length'] = os.path.getsize(fileobj.path)
    response['Content-Type'] = content_type or 'application/octet-stream'

    if download_name:
        response['Content-Disposition'] = "attachment; filename=%s"%download_name

    # required to prevent piston from converting to string the
    # response object
    response._is_string = True

    return response
Ejemplo n.º 20
0
def metadata(request, layer_list=None):
    """Returns a excel file with all the layers
    """
    layers = Layer.objects.all()

    if layer_list is not None:
        int_layer_list = [int(x) for x in layer_list.split(',')]
        layers = layers.filter(id__in=int_layer_list)

    objs = layers.values(*LAYER_FIELDS).order_by('typename')

    # Iterate over the list to annotate it with poc data and metadata_author data
    pocrole =  Role.objects.get(value='pointOfContact')
    authorrole = Role.objects.get(value='author')

    annotated_objects = []
    for layer in objs:
        layer = add_contact_info(layer, pocrole)
        layer = add_contact_info(layer, authorrole)
        annotated_objects.append(layer)

    response = HttpResponse(mimetype='text/csv')
    sd = datetime.datetime.now()
    fname = '%s-%s.csv' % ('haitidata_layers', sd.strftime('%Y%m%d-%H%M-%s'))
    response['Content-Disposition'] = 'attachment; filename=%s' % fname
     
    header = []
    header.extend(LAYER_FIELDS)
    for contact in ['pointOfContact', 'author']:
        for field in CONTACT_FIELDS:
            header.append('%s__%s' % (contact, field))


    writer = UnicodeDictWriter(response, header)
    header_writer = UnicodeWriter(response)
    header_writer.writerows([header])

    writer.writerows(annotated_objects)

    response._is_string = False
    return response
Ejemplo n.º 21
0
def class_search_service(request):
    """
        Guided Search Step1 Service
    """

    if request.method == 'POST':
        free_text = request.POST['input']
        num_max_hits = request.POST['nummaxhits']
        page_num = request.POST['pagenum']
        dataset = request.POST['dataset']

        connector = class_search_connector(quote(free_text), dataset, num_max_hits, page_num)

        response = HttpResponse(content=connector, content_type='application/json')

        return response

    response = HttpResponse(status=403)
    response._is_string = True

    return response
Ejemplo n.º 22
0
def metadata(request, layer_list=None):
    """Returns a excel file with all the layers
    """
    layers = Layer.objects.all()

    if layer_list is not None:
        int_layer_list = [int(x) for x in layer_list.split(',')]
        layers = layers.filter(id__in=int_layer_list)

    objs = layers.values(*LAYER_FIELDS).order_by('typename')

    # Iterate over the list to annotate it with poc data and metadata_author data
    pocrole = Role.objects.get(value='pointOfContact')
    authorrole = Role.objects.get(value='author')

    annotated_objects = []
    for layer in objs:
        layer = add_contact_info(layer, pocrole)
        layer = add_contact_info(layer, authorrole)
        annotated_objects.append(layer)

    response = HttpResponse(mimetype='text/csv')
    sd = datetime.datetime.now()
    fname = '%s-%s.csv' % ('haitidata_layers', sd.strftime('%Y%m%d-%H%M-%s'))
    response['Content-Disposition'] = 'attachment; filename=%s' % fname

    header = []
    header.extend(LAYER_FIELDS)
    for contact in ['pointOfContact', 'author']:
        for field in CONTACT_FIELDS:
            header.append('%s__%s' % (contact, field))

    writer = UnicodeDictWriter(response, header)
    header_writer = UnicodeWriter(response)
    header_writer.writerows([header])

    writer.writerows(annotated_objects)

    response._is_string = False
    return response
Ejemplo n.º 23
0
def complex_query_service(request):
    """
        Complex Query Service
    """

    if request.method == 'POST':

        groups_query = request.POST['groups_query']
        id = request.POST.get('id', "")
        load_groups = simplejson.loads(groups_query)

        ####### Save History #######
        user = request.user
        name = 'query-' + datetime.utcnow().strftime("%Y-%m-%d-%H:%M")

        try:
            if id == "":
                query_obj = Query(name=name, query=groups_query)
            else:
                query_obj = Query.objects.get(id=id)
                if not query_obj.saved:
                    query_obj.name = name
                query_obj.query = groups_query
                query_obj.date = datetime.utcnow()
            if user.is_authenticated():
                query_obj.save()
                query_obj.user.add(user)
        except Exception, e:
            pass
            ############################

        connector = json.dumps(complex_query_connector(load_groups,request.user), sort_keys=False)

        response = HttpResponse(content=connector,
                                content_type='application/json ')
        response._is_string = False

        return response
Ejemplo n.º 24
0
def annotation_search_service(request):
    """
        Guided Search Step1 Service
    """

    if request.method == 'POST':
        free_text = request.POST.get('input', None)
        num_max_hits = request.POST['nummaxhits']
        page_num = request.POST['pagenum']
        dataset = request.POST['dataset']
        classConcept = request.POST['classConcept']
        classLabel = request.POST['classLabel']

        #connector = annotation_search_connector(free_text, dataset, classConcept, classLabel, num_max_hits, page_num, )
        connector = schema_search_connector(free_text, dataset, classConcept, classLabel, num_max_hits, page_num, request.ticket )
        response = HttpResponse(content=connector, content_type='application/json')

        return response

    response = HttpResponse(status=403)
    response._is_string = True

    return response
Ejemplo n.º 25
0
Archivo: api.py Proyecto: b3c/vphshare
    def read(self, request, local_id='', type='', role='', ticket=''):
        """
            Process a search user request.
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            global_id (list): list of global id to check
            local_id (list) : list of local id to check
            type (string) : the type of the resource
            role (string) : the role to be checked
            ticket (string) : the authentication ticket - optional

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """
        try:
            client_address = request.META['REMOTE_ADDR']
            try:
                if request.GET.get('ticket'):
                    user, tkt64 = authenticate(ticket=request.GET['ticket'], cip=client_address)
                else:
                    auth = request.META['HTTP_AUTHORIZATION'].split()
                    if len(auth) == 2:
                        if auth[0].lower() == 'basic':
                            # Currently, only basic http auth is used.
                            username, ticket = base64.b64decode(auth[1]).split(':')
                            user, tkt64 = authenticate(ticket=ticket, cip=client_address)
            except Exception, e:
                response = HttpResponse(status=401)
                response._is_string = True
                return response

            if user is not None:
                if request.GET.get('role','') not in Roles:
                    response = HttpResponse(status=403)
                    response._is_string = True
                    return response

                role = request.GET['role']

                # if global_id is provided, look for local resources
                if 'global_id' in request.GET:
                    global_ids = request.GET.getlist('global_id', [])
                    resources = []
                    for global_id in global_ids:
                        try:
                            resource = Resource.objects.get(global_id=global_id, metadata=False)
                        except ObjectDoesNotExist, e:
                            metadata = get_resource_metadata(global_id)
                            author = User.objects.get(username=metadata['author'])
                            if metadata['type'] == "Workflow":
                                resource, created = Workflow.objects.get_or_create(global_id=global_id, metadata=metadata, owner=author, type=metadata['type'])
                                resource.save()
                                resource = resource.resource_ptr
                            else:
                                resource, created = Resource.objects.get_or_create(global_id=global_id, metadata=metadata, owner=author, type=metadata['type'])
                                resource.save()

                        if resource.can_I(role, user):
                            resources.append(resource)
                        else:
                            return False

                    if len(resources) == 0:
                        # no resources with given ids!
                        response = HttpResponse(status=403)
                        response._is_string = True
                        return response

                    return True

                # if resource_type and local_ids are provided,
                else:
                    local_ids = request.GET.getlist('local_id', [])
                    resources = []
                    for local_id in local_ids:
                        r = filter_resources_by_facet(request.GET['type'], 'localID', local_id )
                        resources += r['resource_metadata']

                    if len(resources) == 0:
                        # no resources with given ids!
                        response = HttpResponse(status=403)
                        response._is_string = True
                        return response

                    for resource in resources:
                        resource = resource.value
                        try:
                            if resource['localID'] not in local_ids:
                                continue
                            author = User.objects.get(username=resource['author'])
                            if resource['type'] == "Workflow":
                                resource_in_db, created = Workflow.objects.get_or_create(global_id=resource['globalID'], metadata=resource, owner=author, type=resource['type'])
                                resource_in_db.save()
                                resource_in_db = resource_in_db.resource_ptr
                            else:
                                resource_in_db, created = Resource.objects.get_or_create(global_id=resource['globalID'], metadata=resource, owner=author, type=resource['type'])
                                resource_in_db.save()

                            if not resource_in_db.can_I(role, user):
                                return False
                        except ObjectDoesNotExist, e:
                            # not in local db, no roles
                            return False

                    return True
Ejemplo n.º 26
0
Archivo: api.py Proyecto: b3c/vphshare
    def read(self, request, type='', role='', ticket=''):
        """
            Process a search user request.
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            type (string) : the type of the resource
            role (string) : the role to be checked
            ticket (string) : the authentication ticket - optional

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """

        try:
            client_address = request.META['REMOTE_ADDR']
            try:
                if request.GET.get('ticket'):
                    user, tkt64 = authenticate(ticket=request.GET['ticket'], cip=client_address)
                else:
                    auth = request.META['HTTP_AUTHORIZATION'].split()
                    if len(auth) == 2:
                        if auth[0].lower() == 'basic':
                            # Currently, only basic http auth is used.
                            username, ticket = base64.b64decode(auth[1]).split(':')
                            user, tkt64 = authenticate(ticket=ticket, cip=client_address)
            except Exception, e:
                response = HttpResponse(status=401)
                response._is_string = True
                return response

            if user is not None:
                if request.GET.get('role','') not in Roles:
                    response = HttpResponse(status=403)
                    response._is_string = True
                    return response

                role = request.GET['role']
                types = request.GET.get('type', None)
                user_resources = []
                if types is not None:
                    resources = Resource.objects.filter_by_roles(role=role, user=user, types=types, numResults=300 )
                    for resource in resources['data']:
                        if resource.type == 'File' and not resource.can_I(role, user):
                            continue
                        user_resources.append({"local_id": resource.metadata['localID'], "global_id": resource.global_id})
                    return user_resources
                else:
                    user_resources = []
                    roles = Roles[Roles.index(Role.objects.get(name=role).name):]
                    role_relations = PrincipalRoleRelation.objects.filter(
                        Q(user=user) | Q(group__in=user.groups.all()),
                        role__name__in=roles,
                    )
                    for role_relation in role_relations:
                            if isinstance(role_relation.content, Resource) and role_relation.content not in user_resources:
                                user_resources.append(role_relation.content.global_id)

                    return user_resources
            else:
                response = HttpResponse(status=403)
                response._is_string = True
                return response
Ejemplo n.º 27
0
Archivo: api.py Proyecto: b3c/vphshare
                                resource_in_db = resource_in_db.resource_ptr
                            else:
                                resource_in_db, created = Resource.objects.get_or_create(global_id=resource['globalID'], metadata=resource, owner=author, type=resource['type'])
                                resource_in_db.save()

                            if not resource_in_db.can_I(role, user):
                                return False
                        except ObjectDoesNotExist, e:
                            # not in local db, no roles
                            return False

                    return True

            else:
                response = HttpResponse(status=403)
                response._is_string = True
                return response

        except Exception, e:
            client.captureException()
            response = HttpResponse(status=500)
            response._is_string = True
            return response


class get_resources_list(BaseHandler):
    """
        REST service based on Django-Piston Library.\n
    """

    def read(self, request, type='', role='', ticket=''):
Ejemplo n.º 28
0
    def read(self, request):
        """
            Notifycation message service.
            At the service invocation:
            - check the sender ticket validity
            - send an email to the recipient(s) from [email protected] with the given text and subject (if provided).
            - when the receiver will login into the MI, a popup message will be shown in the homepage. The user will be
            able to hide the message by clicking the "X" control on the message itself.
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : the ticket of the sender base 64 ticket.
            recipient: the username of the receiver (or the group id if you want to notify a group of users)
            message: the message body (plain text)
            subject: the message subject [optional]

            Return:

            Successes - status message 200
            Failure - 400 error with message
            Failure - 403 error when ticket is not valid.

        """
        try:
            if request.GET.get('ticket'):
                client_address = request.META['REMOTE_ADDR']
                user, tkt64 = authenticate(ticket=request.GET['ticket'], cip=client_address)

                if user is not None:
                    try:

                        if request.GET.get('recipient', None):
                            recipient = request.GET['recipient']
                        else:
                            recipient = None
                        if request.GET.get('message', None):
                            message = request.GET['message']
                        else:
                            message = None
                        if request.GET.get('subject', None):
                            subject = request.GET['subject']
                        else:
                            subject = ''

                        if recipient is None:
                            raise NotifyException('Recipient is wrong')
                        elif message is None or message == '':
                            raise NotifyException('Message is empty')

                        try:
                            user = User.objects.get(username=recipient)

                            n = Notification(recipient=user, message=message, subject=subject).save()

                        except ObjectDoesNotExist:
                            try:
                                group = Group.objects.get(name=recipient)
                                for user in group.user_set.all():
                                    Notification(recipient=user, message=message, subject=subject).save()
                                pass
                            except ObjectDoesNotExist:
                                raise NotifyException('recipient is wrong')

                        response = HttpResponse(status=200)
                        response._is_string = True
                        return response

                    except NotifyException, e:
                        response = HttpResponse(status=400, content=e)
                        response._is_string = True
                        return response
                else:
                    raise Exception

        except Exception, e:
            client.captureException()
            response = HttpResponse(status=403)
            response._is_string = True
            return response
Ejemplo n.º 29
0
    def read(self, request, ticket="", group="", username="", recursive=False):
        """
            Remove a user from a smart group
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            group (string) : the group name
            username (string) : the username
            recursive (string) : if present the user will be removed from all the tree of group

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """
        try:
            if request.GET.get("ticket"):
                client_address = request.META["REMOTE_ADDR"]
                user, tkt64 = authenticate(ticket=request.GET["ticket"], cip=client_address)

                if user is not None:

                    group = VPHShareSmartGroup.objects.get(name=request.GET.get("group"))
                    user_to_remove = User.objects.get(username=request.GET.get("username"))

                    if not group.is_manager(user):
                        response = HttpResponse(status=403)
                        response._is_string = True
                        return response

                    if request.GET.get("recursive", False):
                        # remove user from all sub groups
                        while group is not None:
                            group.user_set.remove(user_to_remove)
                            try:
                                group = VPHShareSmartGroup.objects.get(parent=group)
                            except ObjectDoesNotExist, e:
                                group = None

                    else:
                        # remove only from this group
                        group.user_set.remove(user_to_remove)

                    response = HttpResponse(status=200)
                    response._is_string = True
                    response.write("OK")
                    return response

                else:
                    response = HttpResponse(status=403)
                    response._is_string = True
                    return response

        except Exception, e:
            from raven.contrib.django.raven_compat.models import client

            client.captureException()
            response = HttpResponse(status=500)
            response._is_string = True
            return response
Ejemplo n.º 30
0
    def read(self, request, ticket="", name="", parent=""):
        """
            Create a smart group
            Arguments:

            request (HTTP request istance): HTTP request send from client.
            ticket (string) : base 64 ticket.
            group (string) : the group name
            parent (string): the parent group name (optional)

            Return:

            Successes - Json/xml/yaml format response
            Failure - 403 error

        """
        try:
            if request.GET.get("ticket"):
                client_address = request.META["REMOTE_ADDR"]
                user, tkt64 = authenticate(ticket=request.GET["ticket"], cip=client_address)

                if user is not None:

                    name = request.GET.get("group")

                    # check if a user with the group name exists
                    try:
                        User.objects.get(username__iexact=name)  # select case-insensitive
                        response = HttpResponse(status=500)
                        response._is_string = True
                        return response

                    except ObjectDoesNotExist, e:
                        pass

                    try:
                        Group.objects.get(name__iexact=name)  # select case-insensitive
                        response = HttpResponse(status=500)
                        response._is_string = True
                        return response

                    except ObjectDoesNotExist, e:
                        pass

                    parent = request.GET.get("parent", "")

                    group = VPHShareSmartGroup.objects.create(name=name)
                    group.managers.add(user)
                    group.user_set.add(user)
                    add_local_role(group, user, group_manager)

                    if parent:
                        try:
                            group.parent = Group.objects.get(name=parent)
                        except ObjectDoesNotExist, e:
                            pass

                    group.save()

                    response = HttpResponse(status=200)
                    response._is_string = True
                    response.write("OK")
                    return response