Skip to content

Commit 767e532

Browse files
authored
Merge pull request #185 from PROCOLLAB-github/dev
Fixed news creation
2 parents 5c4f00c + 757f990 commit 767e532

6 files changed

Lines changed: 15 additions & 122 deletions

File tree

events/signals.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@ def autoposting_receiver(sender, instance, created, *args, **kwargs):
1616
if response["ok"]:
1717
instance.tg_message_id = response["result"]["message_id"]
1818
instance.save()
19-
# print(response) -
2019
else:
2120
link = f"{APP_URL}/{instance.pk}"
2221
text = f"***{instance.title}***\n{instance.short_text}\n\n{link}"
2322
response = edit_message(
2423
text, instance.tg_message_id, settings.TELEGRAM_CHANNEL
2524
)
26-
# print(response) -

news/views.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,25 @@
99
from news.permissions import IsNewsCreatorOrReadOnly
1010
from news.serializers import NewsListSerializer, NewsDetailSerializer
1111
from news.mixins import NewsQuerysetMixin
12+
from projects.models import Project
1213

1314

1415
class NewsList(NewsQuerysetMixin, generics.ListCreateAPIView):
1516
serializer_class = NewsListSerializer
1617
permission_classes = [IsNewsCreatorOrReadOnly]
1718
pagination_class = NewsPagination
1819

20+
def post(self, request, *args, **kwargs):
21+
if kwargs.get("project_pk"):
22+
project = Project.objects.get(pk=kwargs["project_pk"])
23+
news = News.objects.add_news(project, **request.data)
24+
return Response(
25+
NewsDetailSerializer(news).data, status=status.HTTP_201_CREATED
26+
)
27+
else:
28+
# creating partner program news, not implemented yet
29+
raise NotImplementedError()
30+
1931
def get(self, request, *args, **kwargs):
2032
news = self.paginate_queryset(self.get_queryset())
2133
context = {"user": request.user}

partner_programs/views.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ def post(self, request, *args, **kwargs):
7373
# tilda cringe
7474
if data.get("test") == "test":
7575
return Response(status=status.HTTP_200_OK)
76-
print(data)
7776
user_fields = (
7877
# "email",
7978
# "password",

users/admin.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,7 @@ class CustomUserAdmin(admin.ModelAdmin):
7474
),
7575
(
7676
"Важные даты",
77-
{
78-
"fields": (
79-
"last_login",
80-
"date_joined",
81-
)
82-
},
77+
{"fields": ("last_login", "date_joined")},
8378
),
8479
)
8580

@@ -127,7 +122,8 @@ def save_model(self, request, obj, form, change):
127122
elif old_user.user_type == CustomUser.INVESTOR:
128123
old_user.investor.delete()
129124
except Exception:
130-
print(f"User type `{old_user.user_type}` is not supported!")
125+
# ???
126+
pass
131127

132128
if obj.user_type == CustomUser.MEMBER:
133129
Member.objects.create(user=old_user)

users/helpers.py

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,6 @@
1010
User = get_user_model()
1111

1212

13-
def reset_email(user, request):
14-
access_token = RefreshToken.for_user(user).access_token
15-
refresh_token = RefreshToken.for_user(user)
16-
17-
relative_link = reverse("users:password_reset_sent")
18-
19-
current_site = get_current_site(request).domain
20-
absolute_url = (
21-
f"{PROTOCOL}://{current_site}{relative_link}?"
22-
f"access_token={access_token}&refresh_token={refresh_token}"
23-
)
24-
25-
email_body = (
26-
f"Здравствуйте, {user.first_name} {user.last_name}!"
27-
f" Перейдите по данной ссылке для смены пароля:\n {absolute_url}\n\nС уважением, "
28-
f"Procollab!"
29-
)
30-
31-
data = {
32-
"email_body": email_body,
33-
"email_subject": "Procollab | Сброс пароля",
34-
"to_email": user.email,
35-
}
36-
37-
Email.send_email(data)
38-
39-
4013
def verify_email(user, request):
4114
token = RefreshToken.for_user(user).access_token
4215

users/views.py

Lines changed: 0 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from datetime import datetime
2-
31
import jwt
42
from django.apps import apps
53
from django.conf import settings
@@ -14,7 +12,6 @@
1412
ListAPIView,
1513
ListCreateAPIView,
1614
RetrieveUpdateDestroyAPIView,
17-
UpdateAPIView,
1815
RetrieveAPIView,
1916
)
2017
from rest_framework.permissions import AllowAny, IsAuthenticated
@@ -33,7 +30,6 @@
3330
)
3431
from projects.serializers import ProjectListSerializer
3532
from users.helpers import (
36-
reset_email,
3733
verify_email,
3834
check_related_fields_update,
3935
)
@@ -48,8 +44,6 @@
4844
from users.serializers import (
4945
AchievementDetailSerializer,
5046
AchievementListSerializer,
51-
EmailSerializer,
52-
PasswordSerializer,
5347
UserDetailSerializer,
5448
UserListSerializer,
5549
VerifyEmailSerializer,
@@ -222,85 +216,6 @@ def get(self, request):
222216
)
223217

224218

225-
class EmailResetPassword(GenericAPIView):
226-
serializer_class = EmailSerializer
227-
permission_classes = [AllowAny]
228-
229-
def post(self, request, *args, **kwargs):
230-
serializer = self.get_serializer(data=request.data)
231-
serializer.is_valid()
232-
233-
user = User.objects.get(email=serializer.data["email"])
234-
235-
reset_email(user, request)
236-
237-
return Response(serializer.data, status=status.HTTP_201_CREATED)
238-
239-
240-
class ResetCurrentUserPassword(UpdateAPIView):
241-
serializer_class = PasswordSerializer
242-
permission_classes = [AllowAny]
243-
244-
def get(self, request, *args, **kwargs):
245-
refresh_token = request.GET.get("refresh_token")
246-
try:
247-
RefreshToken(refresh_token).check_blacklist()
248-
except TokenError:
249-
return redirect(
250-
"https://procollab.ru/auth/reset_password/",
251-
status=status.HTTP_400_BAD_REQUEST,
252-
message="Used token",
253-
)
254-
255-
return Response({"message": "Enter new password"})
256-
257-
def update(self, request, *args, **kwargs):
258-
serializer = self.get_serializer(data=request.data)
259-
serializer.is_valid()
260-
261-
try:
262-
refresh_token = request.GET.get("refresh_token")
263-
access_token = request.GET.get("access_token")
264-
265-
payload = jwt.decode(
266-
jwt=access_token, key=settings.SECRET_KEY, algorithms=["HS256"]
267-
)
268-
user = User.objects.get(id=payload["user_id"])
269-
270-
# fixme
271-
last_update = user.datetime_updated
272-
frequency_update = datetime.utcnow().minute - last_update.minute
273-
if frequency_update <= 10:
274-
return redirect(
275-
"https://procollab.ru/auth/reset_password/",
276-
status=status.HTTP_400_BAD_REQUEST,
277-
message="You can't change your password so often",
278-
)
279-
280-
user.set_password(serializer.data["new_password"])
281-
user.save()
282-
283-
RefreshToken(refresh_token).blacklist()
284-
return redirect(
285-
"https://app.procollab.ru/auth/reset_password/",
286-
status=status.HTTP_200_OK,
287-
message="Succeed",
288-
)
289-
290-
except jwt.ExpiredSignatureError:
291-
return redirect(
292-
"https://app.procollab.ru/auth/reset_password/",
293-
status=status.HTTP_400_BAD_REQUEST,
294-
message="Activate Expired",
295-
)
296-
except jwt.DecodeError:
297-
return redirect(
298-
"https://app.procollab.ru/auth/reset_password/",
299-
status=status.HTTP_400_BAD_REQUEST,
300-
message="Decode error",
301-
)
302-
303-
304219
class AchievementList(ListCreateAPIView):
305220
queryset = UserAchievement.objects.get_achievements_for_list_view()
306221
serializer_class = AchievementListSerializer

0 commit comments

Comments
 (0)