Skip to content

Instantly share code, notes, and snippets.

View gimntut's full-sized avatar

Гимаев Наиль gimntut

View GitHub Profile
def minecraft_text(s):
result = ''
for b in s:
c = ord(b)
if c > 256:
b = f'\\u{hex(c)[2:].zfill(4)}'
result += b
print(result)

JWT - это json c подписью, сжатый с помощью base64. JWT генерируется бэком, а хранится на фронте.
Подпись нужна, чтобы проверить что данные не изменены, а base64 для экономии трафика.
В json имена некоторых полей зарезервированы.
Поле exp - предназначено для хранения даты протухания токена.
Подпись генерируется симметричным ключом, поэтому только бэк может проверять подлинность подписи.

  • Время жизни jwt длится минуты, обычно 10-15 минут
  • Время жизни refresh token длится дни или месяцы, обычно от 3х месяцев до года.

Для понимания назначения JWT, возьмём пример выдачи пропусков в некой организации.

@gimntut
gimntut / key.pub
Created October 24, 2022 17:43
keys
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjqEw21EsthmyKVFFoR3x+0gp+jfinAzHfUIroeac5sX+XrYkWKECrNUjybcE7kDutptSd+o27KAovrcfu9WzRyKSTqB+5vAy6iUKpcKvH2nIbv8ubYhDCg2lDnKmyRf8H2/aXGQvGWZmyxkjbt61ikhZ8r4hHuMUq6KX/AjBbvjJzuRzT5zCTJ0luBfA1OcEvhkAV2qDzedTR8dtkqeHo7WRJawHLfv8X/Adxt5aDF+bjBLWCy+HkYsI16HO2oUgWUcQ8qWCI8lQMSofwytarBjLRwBgM4og7/STQGGGuxhHkYrE7IxAg1/IATJAbgqu3UVmRcGZOqSdISrqJRCXtQ== rsa-key-20191216
@gimntut
gimntut / tasks.py
Created October 22, 2021 17:41
Наставничество
def task1(array1, array2):
# Самый быстрый по производительности код из тех, что я могу придумать
set2 = set(array2)
return [a for a in array1 if a not in set2]
def task2(array):
array2 = []
while array:
a = array.pop()
if a:
# refactor of https://lukeplant.me.uk/blog/posts/double-checked-locking-with-django-orm/
# untested
def double_checked_lock_iterator(queryset):
for item_pk in queryset.values_list("pk", flat=True):
with transaction.atomic():
try:
yield queryset.select_for_update(skip_locked=True).get(id=item_pk)
except queryset.model.DoesNotExist:
pass
@gimntut
gimntut / pytest.md
Created November 8, 2020 15:40 — forked from SuzanaK/pytest.md
pytest cheat sheet

Usage

(Create a symlink pytest for pytest)

pytest [options] [file_or_dir] [file_or_dir] ...

Help:

:: Код к статье https://dev.to/gimntut/docker-wsl2-ssd-nh0-temp-slug-2940383
:: С двойного двоеточия начинаются комментарии, поэтому можно весь код скопировать и вставить в командную строку.
set dump_dir=d:\dumps
set new_place=d:\wsl
:: 1. Окончательно усыпим Docker Desktop, чтобы он не нервничал, когда wsl пропадёт
sc stop com.docker.service
:: 2. Остановим все wsl-машины, чтобы все файловые кэши сбросить на диск
from typing import Any
from django.conf import settings
from django.utils.module_loading import import_string
def import_from_string(val, setting_name):
"""
Attempt to import a class from a string representation.
"""
@gimntut
gimntut / conf.py
Created July 22, 2020 19:03 — forked from SmileyChris/conf.py
Django application specific settings configuration
from django.conf import settings as django_settings
class Settings(object):
DEFAULTS = {
# Define any default settings in here.
}
def __dir__(self):
return dir(django_settings)
@gimntut
gimntut / backends.py
Last active April 6, 2020 07:45
helpers for yasg-drf
import coreapi
from django_filters.rest_framework import DjangoFilterBackend as OriginalDjangoFilterBackend
from django_filters.widgets import SuffixedMultiWidget
class DjangoFilterBackend(OriginalDjangoFilterBackend):
def get_schema_fields(self, view):
queryset = view.get_queryset()
filterset_class = self.get_filterset_class(view, queryset)