def post(self, request): dev_name = request.data['name'] check_name(dev_name) if dev_name.startswith(ANONYM_PREFIX): raise Error( 'Names starting with "%s" are reserved.' % ANONYM_PREFIX, 'Please choose another name.') try: user = User.objects.get(username__iexact=dev_name) except User.DoesNotExist: pass else: raise Error( 'The user "%s" already exists.' % user.username, 'Name must be be case-insensitively unique.') email = request.data['email'] try: validate_email(email) except ValidationError: raise Error('The email "%s" is incorrect.' % email, 'Please correct the email.') if User.objects.filter(email=email): raise Error( 'The email "%s" has already been taken.' % email, 'Please choose another email.') user = User.objects.create_user( dev_name, email, request.data['password']) user.save() if request.is_half_anonymous: _stop_dev_patsaks(request.dev_name) old_dev_path = ROOT.devs[request.dev_name] dev_path = ROOT.devs[dev_name] os.rename(old_dev_path, dev_path) os.mkdir(old_dev_path) os.symlink(dev_path.tablespace, old_dev_path.tablespace) os.rename( dev_path.grantors[request.dev_name], dev_path.grantors[dev_name]) os.rename(ROOT.locks[request.dev_name], ROOT.locks[dev_name]) execute_sql( 'SELECT ak.rename_dev(%s, %s)', (request.dev_name, dev_name.lower())) else: create_dev(dev_name) user.backend = AUTHENTICATION_BACKENDS[0] auth.login(request, user) return HttpResponse(status=CREATED)
def post(self, request): dev_name = request.data['name'] check_name(dev_name) if dev_name.startswith(ANONYM_PREFIX): raise Error( 'Names starting with "%s" are reserved.' % ANONYM_PREFIX, 'Please choose another name.') try: user = User.objects.get(username__iexact=dev_name) except User.DoesNotExist: pass else: raise Error('The user "%s" already exists.' % user.username, 'Name must be be case-insensitively unique.') email = request.data['email'] try: validate_email(email) except ValidationError: raise Error('The email "%s" is incorrect.' % email, 'Please correct the email.') if User.objects.filter(email=email): raise Error('The email "%s" has already been taken.' % email, 'Please choose another email.') user = User.objects.create_user(dev_name, email, request.data['password']) user.save() if request.is_half_anonymous: _stop_dev_patsaks(request.dev_name) old_dev_path = ROOT.devs[request.dev_name] dev_path = ROOT.devs[dev_name] os.rename(old_dev_path, dev_path) os.mkdir(old_dev_path) os.symlink(dev_path.tablespace, old_dev_path.tablespace) os.rename(dev_path.grantors[request.dev_name], dev_path.grantors[dev_name]) os.rename(ROOT.locks[request.dev_name], ROOT.locks[dev_name]) execute_sql('SELECT ak.rename_dev(%s, %s)', (request.dev_name, dev_name.lower())) else: create_dev(dev_name) user.backend = AUTHENTICATION_BACKENDS[0] auth.login(request, user) return HttpResponse(status=CREATED)
def __call__(self, request, *args, **kwargs): if request.method != 'GET' and not request.is_ajax(): return HttpResponse('Non-AJAX request', status=FORBIDDEN) content_type_lower = request.META.get('CONTENT_TYPE', '').lower() if content_type_lower == 'application/json; charset=utf-8': request.META['CONTENT_TYPE'] = 'application/json' elif content_type_lower != 'application/json': request.META.pop('CONTENT_TYPE', None) request.is_anonymous = request.is_half_anonymous = False if request.user.is_authenticated(): request.dev_name = request.user.username else: access = getattr(self.handler, 'access', GET_ANONYMOUS) if access == AUTHENTICATED: return HttpResponse('Authentication required', status=UNAUTHORIZED) try: request.dev_name = request.session['dev_name'] except KeyError: if (access == HALF_ANONYMOUS or access == GET_ANONYMOUS and request.method != 'GET'): request.dev_name = request.session['dev_name'] = ( create_dev()) else: request.dev_name = ANONYM_NAME request.is_anonymous = True request.is_half_anonymous = not request.is_anonymous if not request.is_anonymous: lock_path = ROOT.locks[request.dev_name] request.lock = (lock_path.acquire_shared() if request.method == 'GET' else lock_path.acquire_exclusive()) else: request.lock = None try: return PistonResource.__call__(self, request, *args, **kwargs) finally: if request.lock: request.lock.release()
def __call__(self, request, *args, **kwargs): if request.method != 'GET' and not request.is_ajax(): return HttpResponse('Non-AJAX request', status=FORBIDDEN) content_type_lower = request.META.get('CONTENT_TYPE', '').lower() if content_type_lower == 'application/json; charset=utf-8': request.META['CONTENT_TYPE'] = 'application/json' elif content_type_lower != 'application/json': request.META.pop('CONTENT_TYPE', None) request.is_anonymous = request.is_half_anonymous = False if request.user.is_authenticated(): request.dev_name = request.user.username else: access = getattr(self.handler, 'access', GET_ANONYMOUS) if access == AUTHENTICATED: return HttpResponse('Authentication required', status=UNAUTHORIZED) try: request.dev_name = request.session['dev_name'] except KeyError: if (access == HALF_ANONYMOUS or access == GET_ANONYMOUS and request.method != 'GET'): request.dev_name = request.session['dev_name'] = ( create_dev()) else: request.dev_name = ANONYM_NAME request.is_anonymous = True request.is_half_anonymous = not request.is_anonymous if not request.is_anonymous: lock_path = ROOT.locks[request.dev_name] request.lock = ( lock_path.acquire_shared() if request.method == 'GET' else lock_path.acquire_exclusive()) else: request.lock = None try: return PistonResource.__call__(self, request, *args, **kwargs) finally: if request.lock: request.lock.release()