def new(request): ''' Create a new short url based on the POST parameters ''' if 'login' in request.REQUEST and 'api_key' in request.REQUEST: login = request.REQUEST['login'] api_key = request.REQUEST['api_key'] user = User.objects(login=login, api_key=api_key).first() else: user = None if user is None: return response(status=HTTP_UNAUTHORIZED, message="Invalid credentials.") params = {} if 'long_url' in request.REQUEST: params['long_url'] = request.REQUEST['long_url'] (is_valid, error_message) = validate_url(params['long_url']) else: (is_valid, error_message) = (False, "Missing parameter: 'long_url'") if not is_valid: return response(status=HTTP_BAD_REQUEST, message=error_message) for key in ['short_path', 'prefix']: if key in request.REQUEST: params[key] = request.REQUEST[key] if '/' in params[key]: return response(status=HTTP_BAD_REQUEST, message="%s may not contain a '/' character." % key) try: link = Link.shorten(**params) getLogger('app').info('Successfully shortened %s into %s for user %s', link.long_url, link.hash, login) except ShortPathConflict, err: del params['short_path'], params['long_url'] if 'prefix' in params: del params['prefix'] params['hash'] = err.link.hash return response(status=HTTP_CONFLICT, message=str(err), **params)
def new(request): ''' Create a new short url based on the POST parameters ''' if 'login' in request.REQUEST and 'api_key' in request.REQUEST: login = request.REQUEST['login'] api_key = request.REQUEST['api_key'] user = User.objects(login=login, api_key=api_key).first() else: user = None if user is None: return response(status=HTTP_UNAUTHORIZED, message="Invalid credentials.") params = {} if 'long_url' in request.REQUEST: params['long_url'] = request.REQUEST['long_url'] (is_valid, error_message) = validate_url(params['long_url']) else: (is_valid, error_message) = (False, "Missing parameter: 'long_url'") if not is_valid: return response(status=HTTP_BAD_REQUEST, message=error_message) allow_slashes_in_prefix = 'allow_slashes_in_prefix' in request.REQUEST for key in ['short_path', 'prefix']: if key in request.REQUEST: params[key] = request.REQUEST[key] if '/' in params[key] and not (key == 'prefix' and allow_slashes_in_prefix): return response( status=HTTP_BAD_REQUEST, message="%s may not contain a '/' character." % key) try: link = Link.shorten(**params) getLogger('app').info('Successfully shortened %s into %s for user %s', link.long_url, link.hash, login) except ShortPathConflict, err: del params['short_path'], params['long_url'] if 'prefix' in params: del params['prefix'] params['hash'] = err.link.hash return response(status=HTTP_CONFLICT, message=str(err), **params)
return response(status=HTTP_BAD_REQUEST, message="%s may not contain a '/' character." % key) try: link = Link.shorten(**params) getLogger('app').info('Successfully shortened %s into %s for user %s', link.long_url, link.hash, login) except ShortPathConflict, err: del params['short_path'], params['long_url'] if 'prefix' in params: del params['prefix'] params['hash'] = err.link.hash return response(status=HTTP_CONFLICT, message=str(err), **params) except ForbiddenKeyword, err: getLogger('app').warning( 'Attempt to use forbidden keyword "%s" in a short url.' % err.keyword) return response(status=HTTP_FORBIDDEN, message=str(err), **params) params['short_path'] = link.hash.split('/')[-1] params['short_url'] = link.build_absolute_uri(request) return response(**params)
params[key] = request.REQUEST[key] if '/' in params[key] and not (key == 'prefix' and allow_slashes_in_prefix): return response( status=HTTP_BAD_REQUEST, message="%s may not contain a '/' character." % key) try: link = Link.shorten(**params) getLogger('app').info('Successfully shortened %s into %s for user %s', link.long_url, link.hash, login) except ShortPathConflict, err: del params['short_path'], params['long_url'] if 'prefix' in params: del params['prefix'] params['hash'] = err.link.hash return response(status=HTTP_CONFLICT, message=str(err), **params) except ForbiddenKeyword, err: getLogger('app').warning('Attempt to use forbidden keyword "%s" in a short url.' % err.keyword) return response(status=HTTP_FORBIDDEN, message=str(err), **params) params['short_path'] = link.hash.split('/')[-1] params['short_url'] = link.build_absolute_uri(request) return response(**params)