def register_users(request, bulk=False): """Register a user or a list of users. If bulk, then it will be asynchronous""" from profile.models import ClientApp, ClientUser #it MUST exist, otherwise the middleware would have intercepted it app = ClientApp.get_for_token(request.POST.get('appId')) users = request.POST.getlist('user') # if not users: # return HttpResponseBadRequest("Expected at least one 'user' argument, none given") if app.users.count() - 1 + len(users) >= settings.FREE_USER_LIMIT: return HttpResponseForbidden('Impossible to add more users: user limit would be exceeded') if bulk: #add_bulk_users.delay(users, app, request.build_absolute_uri('/api/getUsers/')) bulk_added = _bulk_add(users, app)[0] return {'added': bulk_added} else: #just get the first, then user = users[0] try: u, created = ClientUser.objects.get_or_create(app=app, clientId=user) return {'added': created} except: return HttpResponseServerError('Could not add user')
def get_users(request): """Given an app, get it's users""" if not 'appId' in request.REQUEST: return HttpResponseBadRequest() else: app= ClientApp.get_for_token(request.REQUEST['appId']) return HttpResponse(json.dumps([{'k': e.clientId, 'val': e.clientId} for e in app.users.iterator()], ensure_ascii=False), mimetype="application/json")
def delete_user(request): """Remove a single user""" from profile.models import ClientApp, ClientUser app = ClientApp.get_for_token(request.POST.get('appId')) users = request.POST.getlist('user') #just get the first, then user = users[0] try: u = ClientUser.objects.get(app=app, clientId=user) u.delete() return {'deleted': True} except: return {'deleted': False}
def process_request(self, request): assert hasattr(request, 'session'),\ "The profile middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'." m = re.match(API_URLS, request.path) if not m: return None from profile import APP_ID, APP_KEY, PROFILE_ID from profile.models import ClientApp #try to respect REST:, if they provide the appId again, it must be that they like doing queries all the time: if APP_ID in request.REQUEST: message = "No app with the given token is registered or the token is invalid" try: a = ClientApp.get_for_token(request.REQUEST[APP_ID], id_only=True) request.session[APP_KEY] = a request.__class__.profile = LazyProfile(request.session[APP_KEY]) if not hasattr(request, 'profile') and PROFILE_ID in request.REQUEST: message = "The requested user does not exist" raise Exception('Not existent user') #limit the number of requests: #r=ClientRequest(date=date.today(), app=a, ip=request.META.get('REMOTE_ADDRESS', ''));r.save() #if ClientRequest.objects.filter(date = date.today(), app = a).count() > REQUEST_LIMIT: rval = "403 Exceeded";raise Exc #limit the number of users: #if ClientApp.objects.get(pk=a).users.count() >= USER_LIMIT: rval="403 usr limit exceeded"; raise Exc except: rval = json.dumps({'message': message, 'status': 404, 'data': {}}) cb = '' if 'callback' in request.REQUEST: cb = request.REQUEST['callback'] if not validate_jsonp.is_valid_jsonp_callback_value(cb): return HttpResponseBadRequest('%s is not a valid jsonp callback identifier' % cb, mimetype='text/plain') rval = '%s(%s)' % (cb, rval) return HttpResponse(rval, mimetype='application/json') #elif not APP_KEY in request.session: # return HttpResponseBadRequest("An app token must have been provided in a call to startSession or in this request") return None
def app_users(request): """Return a dump of all the users in an app""" from profile.models import ClientApp return {'users': [{'id': e.clientId, 'added': str(e.added)} for e in ClientApp.get_for_token(request.GET.get('appId')).users.iterator()]}