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
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
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:
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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=''):
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
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
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