Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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('/')
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)