def test(self): self.assertEqual(validate_url('http://workfor.us'), (True, None)) self.assertEqual(validate_url('http://app.work4labs.com/jobs?job_id=42'), (True, None)) self.assertEqual(validate_url('foobar')[0], False) self.assertEqual(validate_url('jobs?job_id=42')[0], False) self.assertEqual(validate_url('ftp://work4labs.com')[0], False) self.assertEqual(validate_url('http://*****:*****@work4labs.com')[0], False)
def new(request): """Create a new short url based on the POST parameters""" long_url = request.GET.get('long_url') if long_url is None: is_valid, error_message = False, "Missing GET parameter: 'long_url'" else: is_valid, error_message = validate_url(long_url) if not is_valid: return pyw4c_response(status=HTTP_BAD_REQUEST, message=error_message) params = {} for key in ['short_path', 'prefix']: params[key] = request.GET.get(key) if key == 'prefix' and 'allow_slashes_in_prefix' in request.GET: continue if params[key] is not None and '/' in params[key]: return pyw4c_response( status=HTTP_BAD_REQUEST, message="%s may not contain a '/' character." % key) statsd.increment( 'workforus.new', tags=['prefix:' + unicode(params['prefix']), 'is_secure:' + unicode(request.is_secure())]) try: link = Link.shorten(long_url, **params) getLogger('app').info( 'Successfully shortened %s into %s for user %s', link.long_url, link.hash, request.user.login) except ShortPathConflict, err: del params['short_path'], long_url del params['prefix'] params['hash'] = err.hash return pyw4c_response(status=HTTP_CONFLICT, message=str(err), **params)