示例#1
0
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')
示例#2
0
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") 
示例#3
0
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}
示例#4
0
 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
示例#5
0
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()]}