Skip to content
This repository was archived by the owner on Feb 16, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
FROM python:3.6-alpine

ENV PYTHONUNBUFFERED=1
ENV CONFIG_FILE=/code/config.yaml
ENV PIP_NO_CACHE_DIR=false

RUN apk add gcc python3-dev musl-dev postgresql-dev zlib-dev jpeg-dev libpq &&\
pip install pipenv

RUN mkdir /code
WORKDIR /code

COPY Pipfile Pipfile.lock /code/
RUN pipenv install --system --dev

ENTRYPOINT ["./docker-entrypoint.sh"]
COPY . /code/

ENTRYPOINT ["sh", "docker-entrypoint.sh"]
16 changes: 14 additions & 2 deletions src/account/auth_pipeline.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
from django.core import exceptions
from django.shortcuts import redirect
from social_core.pipeline.partial import partial

from . import models


def create_profile(backend, user, response, *args, **kwargs):
@partial
def set_display_name(strategy, backend, is_new=False, *args, **kwargs):
if backend.name == "authsch" and is_new:
display_name = strategy.session_get("displayName", None)
if not display_name:
return redirect("/first-login")


def create_profile(strategy, backend, request, details, user, *args, **kwargs):
if backend.name == "authsch":
try:
user.profile
except exceptions.ObjectDoesNotExist:
models.Profile.objects.create(user=user)
display_name = strategy.session_get("displayName", None)
models.Profile.objects.create(user=user, display_name=display_name)

19 changes: 19 additions & 0 deletions src/account/migrations/0005_profile_display_name.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 2.2.9 on 2020-02-09 18:49

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('account', '0004_auto_20190315_1033'),
]

operations = [
migrations.AddField(
model_name='profile',
name='display_name',
field=models.CharField(default='', max_length=50),
preserve_default=False,
),
]
1 change: 1 addition & 0 deletions src/account/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class Profile(SoftDeleteModel):
about_me = models.TextField(blank=True)
is_score_visible = models.BooleanField(default=False)
ranked = models.BooleanField(default=False)
display_name = models.CharField(max_length=50)

@property
def full_name(self):
Expand Down
3 changes: 2 additions & 1 deletion src/account/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
router.register(r"avatar", views.AvatarViewSet)

urlpatterns = router.urls + [
path("logout/", LogoutView.as_view(next_page="/"), name="logout")
path("logout/", LogoutView.as_view(next_page="/"), name="logout"),
path("auth/display-name/", views.set_display_name),
]
10 changes: 10 additions & 0 deletions src/account/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,23 @@
from rest_framework import permissions
from rest_framework.decorators import action
from rest_framework.response import Response
from django.shortcuts import redirect
from rest_framework.decorators import api_view

from common.mixins import RelativeURLFieldMixin
from .permissions import IsSafeMethodOrIsOwnOrIsAdmin
from . import models
from . import serializers


@api_view(["POST"])
def set_display_name(request):
if len(request.session.values()) == 0:
return Response(status=401)
request.session["displayName"] = request.data["displayName"]
return redirect("/api/v1/complete/authsch")


class ProfileViewSet(
RelativeURLFieldMixin,
generics.ListAPIView,
Expand Down
1 change: 1 addition & 0 deletions src/vikoverflow/middlewares.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ def __call__(self, request):
if (
"/api/v1/login" in request.path
or "/api/v1/complete" in request.path
or "/api/v1/auth" in request.path
or base.ALLOWED_USERS == ["*"]
):
return self.get_response(request)
Expand Down
1 change: 1 addition & 0 deletions src/vikoverflow/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@
"social_core.pipeline.social_auth.auth_allowed",
"social_core.pipeline.social_auth.social_user",
"social_core.pipeline.user.get_username",
"account.auth_pipeline.set_display_name",
"social_core.pipeline.user.create_user",
"account.auth_pipeline.create_profile",
"social_core.pipeline.social_auth.associate_user",
Expand Down