refac
This commit is contained in:
1 parent
50e050e195
commit
39206602ac
2 files changed
+11
-38
No files matched your search
@@ -3,13 +3,12 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import time
|
|
||||||
import uuid
|
import uuid
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import bcrypt
|
import bcrypt
|
||||||
from open_webui.internal.db import Base, JSONField, get_async_db_context
|
from open_webui.internal.db import Base, JSONField, get_async_db_context
|
||||||
from open_webui.models.users import User, UserModel, UserProfileImageResponse, Users
|
from open_webui.models.users import UserModel, UserProfileImageResponse, Users
|
||||||
from open_webui.utils.validate import validate_profile_image_url
|
from open_webui.utils.validate import validate_profile_image_url
|
||||||
from pydantic import BaseModel, field_validator
|
from pydantic import BaseModel, field_validator
|
||||||
from sqlalchemy import Boolean, Column, String, Text, delete, select, update
|
from sqlalchemy import Boolean, Column, String, Text, delete, select, update
|
||||||
@@ -111,13 +110,12 @@ class AuthsTable:
|
|||||||
role: str = 'pending',
|
role: str = 'pending',
|
||||||
oauth: dict | None = None,
|
oauth: dict | None = None,
|
||||||
db: AsyncSession | None = None,
|
db: AsyncSession | None = None,
|
||||||
user_id: str | None = None,
|
|
||||||
) -> UserModel | None:
|
) -> UserModel | None:
|
||||||
"""Create an Auth + User pair inside a single transaction."""
|
"""Create an Auth + User pair inside a single transaction."""
|
||||||
async with get_async_db_context(db) as session:
|
async with get_async_db_context(db) as session:
|
||||||
log.info('insert_new_auth')
|
log.info('insert_new_auth')
|
||||||
|
|
||||||
new_id = user_id or str(uuid.uuid4())
|
new_id = str(uuid.uuid4())
|
||||||
|
|
||||||
credential = Auth(
|
credential = Auth(
|
||||||
id=new_id,
|
id=new_id,
|
||||||
@@ -128,25 +126,15 @@ class AuthsTable:
|
|||||||
session.add(credential)
|
session.add(credential)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
profile_image_url = validate_profile_image_url(profile_image_url)
|
created_user = await Users.insert_new_user(
|
||||||
except ValueError:
|
new_id,
|
||||||
profile_image_url = '/user.png'
|
name,
|
||||||
|
email,
|
||||||
now = int(time.time())
|
profile_image_url,
|
||||||
created_user = UserModel(
|
role,
|
||||||
id=new_id,
|
oauth=oauth,
|
||||||
email=email,
|
db=session,
|
||||||
name=name,
|
)
|
||||||
role=role,
|
|
||||||
profile_image_url=profile_image_url,
|
|
||||||
last_active_at=now,
|
|
||||||
created_at=now,
|
|
||||||
updated_at=now,
|
|
||||||
oauth=oauth,
|
|
||||||
)
|
|
||||||
session.add(User(**created_user.model_dump()))
|
|
||||||
|
|
||||||
try:
|
|
||||||
await session.commit()
|
await session.commit()
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
await session.rollback()
|
await session.rollback()
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import datetime
|
import datetime
|
||||||
import hashlib
|
|
||||||
import hmac
|
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
@@ -38,7 +36,6 @@ from open_webui.env import (
|
|||||||
WEBUI_AUTH_TRUSTED_GROUPS_HEADER,
|
WEBUI_AUTH_TRUSTED_GROUPS_HEADER,
|
||||||
WEBUI_AUTH_TRUSTED_NAME_HEADER,
|
WEBUI_AUTH_TRUSTED_NAME_HEADER,
|
||||||
WEBUI_AUTH_TRUSTED_ROLE_HEADER,
|
WEBUI_AUTH_TRUSTED_ROLE_HEADER,
|
||||||
WEBUI_SECRET_KEY,
|
|
||||||
)
|
)
|
||||||
from open_webui.internal.db import get_async_session
|
from open_webui.internal.db import get_async_session
|
||||||
from open_webui.models.auths import (
|
from open_webui.models.auths import (
|
||||||
@@ -104,15 +101,6 @@ token_exchange_rate_limiter = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def trusted_header_user_id(email: str) -> str:
|
|
||||||
digest = hmac.digest(
|
|
||||||
WEBUI_SECRET_KEY.encode(),
|
|
||||||
f'open-webui:trusted-header:{email.lower()}'.encode(),
|
|
||||||
hashlib.sha256,
|
|
||||||
)
|
|
||||||
return str(uuid.UUID(bytes=digest[:16], version=4))
|
|
||||||
|
|
||||||
|
|
||||||
ADMIN_CONFIG_KEYS = {
|
ADMIN_CONFIG_KEYS = {
|
||||||
'SHOW_ADMIN_DETAILS': 'auth.admin.show',
|
'SHOW_ADMIN_DETAILS': 'auth.admin.show',
|
||||||
'ADMIN_EMAIL': 'auth.admin.email',
|
'ADMIN_EMAIL': 'auth.admin.email',
|
||||||
@@ -761,7 +749,6 @@ async def signin(
|
|||||||
name,
|
name,
|
||||||
db=db,
|
db=db,
|
||||||
source='trusted_header',
|
source='trusted_header',
|
||||||
user_id=trusted_header_user_id(email),
|
|
||||||
)
|
)
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
if not await Users.get_user_by_email(email.lower(), db=db):
|
if not await Users.get_user_by_email(email.lower(), db=db):
|
||||||
@@ -846,7 +833,6 @@ async def signup_handler(
|
|||||||
*,
|
*,
|
||||||
db: AsyncSession,
|
db: AsyncSession,
|
||||||
source: str = 'api',
|
source: str = 'api',
|
||||||
user_id: str | None = None,
|
|
||||||
) -> UserModel:
|
) -> UserModel:
|
||||||
"""
|
"""
|
||||||
Core user-creation logic shared by the signup endpoint and
|
Core user-creation logic shared by the signup endpoint and
|
||||||
@@ -867,7 +853,6 @@ async def signup_handler(
|
|||||||
profile_image_url=profile_image_url,
|
profile_image_url=profile_image_url,
|
||||||
role=await Config.get('ui.default_user_role'),
|
role=await Config.get('ui.default_user_role'),
|
||||||
db=db,
|
db=db,
|
||||||
user_id=user_id,
|
|
||||||
)
|
)
|
||||||
if not user:
|
if not user:
|
||||||
raise HTTPException(500, detail=ERROR_MESSAGES.CREATE_USER_ERROR)
|
raise HTTPException(500, detail=ERROR_MESSAGES.CREATE_USER_ERROR)
|
||||||
|
|||||||
Reference in new issue
Block a user