Skip to content

Commit b66f62e

Browse files
authored
Merge pull request #45 from PROCOLLAB-github/dev
Dev
2 parents dfda59d + fe716f3 commit b66f62e

8 files changed

Lines changed: 154 additions & 13 deletions

poetry.lock

Lines changed: 42 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

procollab/settings.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@
2525
"api.procollab.ru",
2626
]
2727

28+
PASSWORD_HASHERS = [
29+
"django.contrib.auth.hashers.BCryptPasswordHasher",
30+
"django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
31+
"django.contrib.auth.hashers.PBKDF2PasswordHasher",
32+
"django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
33+
"django.contrib.auth.hashers.Argon2PasswordHasher",
34+
"django.contrib.auth.hashers.ScryptPasswordHasher",
35+
]
36+
2837
# Application definition
2938
if SENTRY_DSN:
3039
sentry_sdk.init(

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ sentry-sdk = "^1.10.1"
5050
whitenoise = "^6.2.0"
5151
six = "^1.16.0"
5252
aiohttp = "^3.8.3"
53+
django = {extras = ["bcrypt"], version = "^4.1.3"}
5354

5455

5556
[build-system]

users/admin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class CustomUserAdmin(admin.ModelAdmin):
4040
"city",
4141
"region",
4242
"organization",
43+
"speciality",
4344
)
4445
},
4546
),
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Generated by Django 4.1.3 on 2022-11-17 18:56
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("users", "0016_userachievement"),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name="customuser",
15+
name="city",
16+
field=models.CharField(blank=True, max_length=255, null=True),
17+
),
18+
migrations.AlterField(
19+
model_name="customuser",
20+
name="organization",
21+
field=models.CharField(blank=True, max_length=255, null=True),
22+
),
23+
migrations.AlterField(
24+
model_name="customuser",
25+
name="patronymic",
26+
field=models.CharField(blank=True, max_length=255, null=True),
27+
),
28+
migrations.AlterField(
29+
model_name="customuser",
30+
name="region",
31+
field=models.CharField(blank=True, max_length=255, null=True),
32+
),
33+
migrations.AlterField(
34+
model_name="customuser",
35+
name="speciality",
36+
field=models.CharField(blank=True, max_length=255, null=True),
37+
),
38+
migrations.AlterField(
39+
model_name="customuser",
40+
name="status",
41+
field=models.CharField(blank=True, max_length=255, null=True),
42+
),
43+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 4.1.3 on 2022-11-17 19:07
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("users", "0017_alter_customuser_city_alter_customuser_organization_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name="customuser",
15+
name="about_me",
16+
field=models.TextField(blank=True, null=True),
17+
),
18+
]

users/models.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,15 @@ class CustomUser(AbstractUser):
6464
default=get_default_user_type,
6565
)
6666

67-
patronymic = models.CharField(max_length=255, blank=True)
67+
patronymic = models.CharField(max_length=255, null=True, blank=True)
6868
avatar = models.URLField(null=True, blank=True)
6969
birthday = models.DateField(null=True, blank=True)
70-
about_me = models.TextField(blank=True)
71-
status = models.CharField(max_length=255, blank=True)
72-
region = models.CharField(max_length=255, blank=True)
73-
city = models.CharField(max_length=255, blank=True)
74-
organization = models.CharField(max_length=255, blank=True)
75-
speciality = models.CharField(max_length=255, blank=True)
70+
about_me = models.TextField(null=True, blank=True)
71+
status = models.CharField(max_length=255, null=True, blank=True)
72+
region = models.CharField(max_length=255, null=True, blank=True)
73+
city = models.CharField(max_length=255, null=True, blank=True)
74+
organization = models.CharField(max_length=255, null=True, blank=True)
75+
speciality = models.CharField(max_length=255, null=True, blank=True)
7676

7777
datetime_updated = models.DateTimeField(null=False, auto_now=True)
7878
datetime_created = models.DateTimeField(null=False, auto_now_add=True)

users/views.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,40 @@ class UserList(ListCreateAPIView):
4747
filter_backends = (filters.DjangoFilterBackend,)
4848
filterset_class = UserFilter
4949

50+
def create_user(self, request, *args, **kwargs):
51+
data = request.data
52+
bday = None
53+
if data.get("birthday"):
54+
numbers = data.get("birthday").split(".")
55+
year = int(numbers[2])
56+
month = int(numbers[1])
57+
day = int(numbers[0])
58+
bday = datetime(year, month, day)
59+
u = User.objects.create(
60+
email=data["email"],
61+
first_name=data["name"],
62+
last_name=data["surname"],
63+
patronymic=data["patronymic"],
64+
birthday=bday,
65+
avatar=data["avatar"],
66+
about_me=data["about_me"],
67+
speciality=data["speciality"],
68+
status=data["status"],
69+
city=data["city"],
70+
region=data["region"],
71+
password=data["hash"],
72+
is_active=True,
73+
)
74+
u.member.key_skills = ", ".join(data["key_skills"])
75+
u.save()
76+
for a in data["achievements"]:
77+
UserAchievement.objects.create(title=a["title"], status=a["place"], user=u)
78+
# 2 + achievement_count db operations per user
79+
return Response(status=269)
80+
5081
def post(self, request, *args, **kwargs):
82+
if request.headers.get("Secret-Create") == "yep":
83+
return self.create_user(request, *args, **kwargs)
5184
serializer = self.get_serializer(data=request.data)
5285
serializer.is_valid(raise_exception=True)
5386
self.perform_create(serializer)

0 commit comments

Comments
 (0)