|
# retoor <retoor@molodetz.nl>
|
|
|
|
import asyncio
|
|
import base64
|
|
import binascii
|
|
import hashlib
|
|
import html
|
|
import json
|
|
import logging
|
|
import re
|
|
import secrets
|
|
from datetime import datetime, timedelta, timezone
|
|
from decimal import Decimal
|
|
from typing import Optional
|
|
from urllib.parse import urlsplit
|
|
from passlib.hash import pbkdf2_sha256
|
|
from fastapi import Request, HTTPException, status
|
|
|
|
from devplacepy.cache import TTLCache
|
|
from devplacepy.database import (
|
|
get_table,
|
|
get_user_stars,
|
|
bump_cache_version,
|
|
sync_local_cache,
|
|
invalidate_admins_cache,
|
|
notification_enabled,
|
|
get_silenced_uids,
|
|
record_activity,
|
|
record_unique_activity,
|
|
)
|
|
from devplacepy.config import (
|
|
SESSION_MAX_AGE,
|
|
DEFAULT_CORRECTION_PROMPT,
|
|
DEFAULT_MODIFIER_PROMPT,
|
|
)
|
|
from devplacepy.services.background import background
|
|
|
|
from devplacepy.utils.passwords import (
|
|
hash_password,
|
|
verify_password,
|
|
hash_password_async,
|
|
verify_password_async,
|
|
create_session,
|
|
)
|
|
from devplacepy.utils.authcache import (
|
|
_user_cache,
|
|
_sync_auth_cache,
|
|
clear_user_cache,
|
|
clear_session_cache,
|
|
)
|
|
from devplacepy.utils.auth import (
|
|
_UNSET,
|
|
_user_from_session,
|
|
_user_from_api_key,
|
|
_user_from_basic,
|
|
_request_has_auth,
|
|
_resolve_user,
|
|
_user_from_devrant_token,
|
|
_user_from_access_token,
|
|
get_current_user,
|
|
)
|
|
from devplacepy.utils.guards import (
|
|
safe_next,
|
|
redirect_back,
|
|
cookie_secure,
|
|
client_ip,
|
|
require_user,
|
|
is_admin,
|
|
is_primary_admin,
|
|
require_admin,
|
|
not_found,
|
|
require_user_api,
|
|
)
|
|
from devplacepy.utils.text import (
|
|
strip_html,
|
|
_FLOAT_TOKEN,
|
|
plain_float,
|
|
_mark_floats,
|
|
pretty_json,
|
|
slugify,
|
|
generate_uid,
|
|
make_combined_slug,
|
|
time_ago,
|
|
extract_mentions,
|
|
format_date,
|
|
)
|
|
from devplacepy.utils.notifications import (
|
|
logger,
|
|
PUSH_ICON,
|
|
DEFAULT_PUSH_URL,
|
|
_push_tasks,
|
|
_safe_notify,
|
|
_schedule_push,
|
|
_schedule_telegram,
|
|
create_notification,
|
|
_deliver_notification,
|
|
create_mention_notifications,
|
|
_deliver_mention_notifications,
|
|
)
|
|
from devplacepy.utils.badges import (
|
|
LEVEL_BADGES,
|
|
BADGE_CATALOG,
|
|
BADGE_GROUPS,
|
|
get_badge,
|
|
build_achievements,
|
|
award_badge,
|
|
notify_badge,
|
|
)
|
|
from devplacepy.utils.rewards import (
|
|
LEVEL_XP,
|
|
XP_POST,
|
|
XP_COMMENT,
|
|
XP_PROJECT,
|
|
XP_GIST,
|
|
XP_UPVOTE,
|
|
XP_FOLLOW,
|
|
XP_QUIZ,
|
|
XP_QUIZ_PUBLISH,
|
|
XP_QUIZ_COMPLETE,
|
|
level_for_xp,
|
|
award_xp,
|
|
_COUNT_MILESTONES,
|
|
_milestone_metrics,
|
|
check_milestone_badges,
|
|
award_rewards,
|
|
_apply_rewards,
|
|
ACHIEVEMENTS,
|
|
UNIQUE_ACTIONS,
|
|
track_action,
|
|
_apply_achievements,
|
|
)
|
|
from devplacepy.utils.accounts import (
|
|
_create_account,
|
|
register_account,
|
|
register_account_async,
|
|
)
|