def index(request): """Index page""" response = render(request, 'pygmy/index.html') if (request.COOKIES.get(AUTH_COOKIE_NAME) and request.COOKIES.get('refresh_token')): pygmy_client = pygmy_client_object(settings, request) access_token = pygmy_client.refresh_access_token() response.set_cookie(AUTH_COOKIE_NAME, access_token.get(AUTH_COOKIE_NAME)) return response
def index(request): """Index page""" if not is_client_ip_allowed_to_access(request): return render(request, 'unauthorized.html', status=403) response = render(request, 'pygmy/index.html') if (request.COOKIES.get(AUTH_COOKIE_NAME) and request.COOKIES.get('refresh_token')): pygmy_client = pygmy_client_object(settings, request) access_token = pygmy_client.refresh_access_token() response.set_cookie(AUTH_COOKIE_NAME, access_token.get(AUTH_COOKIE_NAME)) return response
def link_unshorten(request, code): """This redirects to the long URL from short URL""" pygmy_client = pygmy_client_object(settings, request) if request.method == 'GET': try: url_obj = pygmy_client.unshorten(code) except UnAuthorized: return redirect('/link/secret?next={}'.format(code)) except (LinkExpired, ObjectNotFound) as e: return render(request, '404.html', context=API_ERROR(e.args[0]), status=404) long_url = url_obj['long_url'] return redirect(long_url, permanent=True)
def dashboard(request): """Returns the list of signed up user links""" access_token = request.COOKIES.get(AUTH_COOKIE_NAME) if not access_token: return render(request, '400.html', context=INVALID_TOKEN, status=400) pygmy_client = pygmy_client_object(settings, request) try: links = pygmy_client.list_links(access_token=access_token) except UnAuthorized as e: return render(request, 'unauthorized.html', context=API_ERROR(e.args[0]), status=403) except ObjectNotFound as e: return render( request, '404.html', context=API_ERROR(e.args[0]), status=404) context = dict(links=links) return render(request, 'pygmy/dashboard.html', context=context)
def login(request): if request.method == 'POST': pygmy_client = pygmy_client_object(settings, request) form = LoginForm(request.POST) context = dict(form=form) if form.is_valid(): context['login_success'] = True try: user_obj = pygmy_client.login( email=form.cleaned_data['email'], password=form.cleaned_data['password']) context = { 'email': user_obj['email'], 'f_name': user_obj['f_name'], REFRESH_COOKIE_NAME: user_obj['refresh_token'] } except InvalidInput as e: return render(request, 'unauthorized.html', context=API_ERROR(e.args[0]), status=400) except ObjectNotFound as e: return render(request, '404.html', context=API_ERROR(e.args[0]), status=404) response = redirect('dashboard') expires = datetime.datetime.utcnow() + datetime.timedelta(days=7) _ = [ response.set_cookie(k, v, expires=expires) for k, v in context.items() ] # access token lifetime till browser session response.set_cookie(AUTH_COOKIE_NAME, user_obj['access_token']) else: response = render(request, "invalid_form.html", context=context, status=400) return response if request.method == 'GET': return redirect('/')
def link_shortener(request): pygmy_client = pygmy_client_object(settings, request) if request.method == 'POST': form = URLForm(request.POST) context = dict(form=form) if form.is_valid(): try: resp = pygmy_client.shorten( long_url=form.cleaned_data['long_url'], custom_code=form.cleaned_data['custom_url'], secret=form.cleaned_data['secret_key'], expire_after=form.cleaned_data['remember_time']) except UnAuthorized as e: return render(request, 'unauthorized.html', context=API_ERROR(e.args[0]), status=401) except InvalidInput as e: context.update(dict(input_error=e.args[0])) _ = [ form.add_error(str(key), err) for key, err in e.args[0].items() ] # return render(request, 'pygmy/short_url.html', context=context) return render(request, "invalid_form.html", context=context, status=400) except (ObjectNotFound, InvalidInput) as e: return render(request, '400.html', context=API_ERROR(e.args[0]), status=400) short_code = resp['short_code'] else: return render(request, "invalid_form.html", context=context, status=400) return redirect('get_short_link', code=short_code) if request.method == 'GET': return render(request, '400.html', status=400)
def short_link_stats(request, code): """Get stats about short code.""" pygmy_client = pygmy_client_object(settings, request) if request.method == 'GET': try: clickmeta = pygmy_client.link_stats(code) clickmeta['country_stats'] = sorted( clickmeta['country_stats'].items(), key=operator.itemgetter(1), reverse=True) clickmeta['referrer'] = sorted(clickmeta['referrer'].items(), key=operator.itemgetter(1), reverse=True) context = dict(clickmeta=clickmeta) except (ObjectNotFound, LinkExpired) as e: return render(request, '404.html', context=API_ERROR(e.args[0]), status=404) return render(request, 'pygmy/link_stats.html', context=context)