forked from open-webui/open-webui
feat: set first user to admin by default
This commit is contained in:
parent
07d2c9871f
commit
83ff1d77ea
8 changed files with 28 additions and 25 deletions
|
@ -9,7 +9,7 @@ import json
|
||||||
from apps.web.models.users import Users
|
from apps.web.models.users import Users
|
||||||
from constants import ERROR_MESSAGES
|
from constants import ERROR_MESSAGES
|
||||||
from utils.utils import extract_token_from_auth_header
|
from utils.utils import extract_token_from_auth_header
|
||||||
from config import OLLAMA_API_BASE_URL, OLLAMA_WEBUI_AUTH
|
from config import OLLAMA_API_BASE_URL, WEBUI_AUTH
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
CORS(
|
CORS(
|
||||||
|
@ -32,7 +32,7 @@ def proxy(path):
|
||||||
headers = dict(request.headers)
|
headers = dict(request.headers)
|
||||||
|
|
||||||
# Basic RBAC support
|
# Basic RBAC support
|
||||||
if OLLAMA_WEBUI_AUTH:
|
if WEBUI_AUTH:
|
||||||
if "Authorization" in headers:
|
if "Authorization" in headers:
|
||||||
token = extract_token_from_auth_header(headers["Authorization"])
|
token = extract_token_from_auth_header(headers["Authorization"])
|
||||||
user = Users.get_user_by_token(token)
|
user = Users.get_user_by_token(token)
|
||||||
|
|
|
@ -2,7 +2,7 @@ from fastapi import FastAPI, Request, Depends, HTTPException
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
from apps.web.routers import auths, users
|
from apps.web.routers import auths, users
|
||||||
from config import OLLAMA_WEBUI_VERSION, OLLAMA_WEBUI_AUTH
|
from config import WEBUI_VERSION, WEBUI_AUTH
|
||||||
|
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
||||||
|
@ -23,4 +23,4 @@ app.include_router(users.router, prefix="/users", tags=["users"])
|
||||||
|
|
||||||
@app.get("/")
|
@app.get("/")
|
||||||
async def get_status():
|
async def get_status():
|
||||||
return {"status": True, "version": OLLAMA_WEBUI_VERSION, "auth": OLLAMA_WEBUI_AUTH}
|
return {"status": True, "version": WEBUI_VERSION, "auth": WEBUI_AUTH}
|
||||||
|
|
|
@ -81,6 +81,9 @@ class UsersTable:
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def get_num_users(self) -> Optional[int]:
|
||||||
|
return self.table.count_documents({})
|
||||||
|
|
||||||
def update_user_by_id(self, id: str, updated: dict) -> Optional[UserModel]:
|
def update_user_by_id(self, id: str, updated: dict) -> Optional[UserModel]:
|
||||||
user = self.table.find_one_and_update(
|
user = self.table.find_one_and_update(
|
||||||
{"id": id}, {"$set": updated}, return_document=ReturnDocument.AFTER
|
{"id": id}, {"$set": updated}, return_document=ReturnDocument.AFTER
|
||||||
|
|
|
@ -86,8 +86,9 @@ async def signin(form_data: SigninForm):
|
||||||
async def signup(form_data: SignupForm):
|
async def signup(form_data: SignupForm):
|
||||||
if not Users.get_user_by_email(form_data.email.lower()):
|
if not Users.get_user_by_email(form_data.email.lower()):
|
||||||
try:
|
try:
|
||||||
|
role = "admin" if Users.get_num_users() == 0 else "pending"
|
||||||
hashed = get_password_hash(form_data.password)
|
hashed = get_password_hash(form_data.password)
|
||||||
user = Auths.insert_new_auth(form_data.email, hashed, form_data.name)
|
user = Auths.insert_new_auth(form_data.email, hashed, form_data.name, role)
|
||||||
|
|
||||||
if user:
|
if user:
|
||||||
token = create_token(data={"email": user.email})
|
token = create_token(data={"email": user.email})
|
||||||
|
|
|
@ -26,40 +26,36 @@ if ENV == "prod":
|
||||||
OLLAMA_API_BASE_URL = "http://host.docker.internal:11434/api"
|
OLLAMA_API_BASE_URL = "http://host.docker.internal:11434/api"
|
||||||
|
|
||||||
####################################
|
####################################
|
||||||
# OLLAMA_WEBUI_VERSION
|
# WEBUI_VERSION
|
||||||
####################################
|
####################################
|
||||||
|
|
||||||
OLLAMA_WEBUI_VERSION = os.environ.get("OLLAMA_WEBUI_VERSION", "v1.0.0-alpha.9")
|
WEBUI_VERSION = os.environ.get("WEBUI_VERSION", "v1.0.0-alpha.9")
|
||||||
|
|
||||||
####################################
|
####################################
|
||||||
# OLLAMA_WEBUI_AUTH
|
# WEBUI_AUTH
|
||||||
####################################
|
####################################
|
||||||
|
|
||||||
OLLAMA_WEBUI_AUTH = (
|
WEBUI_AUTH = True if os.environ.get("WEBUI_AUTH", "TRUE") == "TRUE" else False
|
||||||
True if os.environ.get("OLLAMA_WEBUI_AUTH", "TRUE") == "TRUE" else False
|
|
||||||
|
|
||||||
|
if WEBUI_AUTH:
|
||||||
|
####################################
|
||||||
|
# WEBUI_DB
|
||||||
|
####################################
|
||||||
|
|
||||||
|
WEBUI_DB_URL = os.environ.get(
|
||||||
|
"WEBUI_DB_URL", "mongodb://root:root@localhost:27017/"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
DB_CLIENT = MongoClient(f"{WEBUI_DB_URL}?authSource=admin")
|
||||||
if OLLAMA_WEBUI_AUTH:
|
|
||||||
####################################
|
|
||||||
# OLLAMA_WEBUI_DB
|
|
||||||
####################################
|
|
||||||
|
|
||||||
OLLAMA_WEBUI_DB_URL = os.environ.get(
|
|
||||||
"OLLAMA_WEBUI_DB_URL", "mongodb://root:root@localhost:27017/"
|
|
||||||
)
|
|
||||||
|
|
||||||
DB_CLIENT = MongoClient(f"{OLLAMA_WEBUI_DB_URL}?authSource=admin")
|
|
||||||
DB = DB_CLIENT["ollama-webui"]
|
DB = DB_CLIENT["ollama-webui"]
|
||||||
|
|
||||||
####################################
|
####################################
|
||||||
# OLLAMA_WEBUI_JWT_SECRET_KEY
|
# WEBUI_JWT_SECRET_KEY
|
||||||
####################################
|
####################################
|
||||||
|
|
||||||
OLLAMA_WEBUI_JWT_SECRET_KEY = os.environ.get(
|
WEBUI_JWT_SECRET_KEY = os.environ.get("WEBUI_JWT_SECRET_KEY", "t0p-s3cr3t")
|
||||||
"OLLAMA_WEBUI_JWT_SECRET_KEY", "t0p-s3cr3t"
|
|
||||||
)
|
|
||||||
|
|
||||||
if ENV == "prod":
|
if ENV == "prod":
|
||||||
if OLLAMA_WEBUI_JWT_SECRET_KEY == "":
|
if WEBUI_JWT_SECRET_KEY == "":
|
||||||
OLLAMA_WEBUI_JWT_SECRET_KEY = str(b64encode(token_bytes(32)).decode())
|
WEBUI_JWT_SECRET_KEY = str(b64encode(token_bytes(32)).decode())
|
||||||
|
|
|
@ -9,7 +9,7 @@ import jwt
|
||||||
|
|
||||||
import config
|
import config
|
||||||
|
|
||||||
JWT_SECRET_KEY = config.OLLAMA_WEBUI_JWT_SECRET_KEY
|
JWT_SECRET_KEY = config.WEBUI_JWT_SECRET_KEY
|
||||||
ALGORITHM = "HS256"
|
ALGORITHM = "HS256"
|
||||||
|
|
||||||
##############
|
##############
|
||||||
|
|
|
@ -46,7 +46,8 @@ services:
|
||||||
- 3000:8080
|
- 3000:8080
|
||||||
environment:
|
environment:
|
||||||
- "OLLAMA_API_BASE_URL=http://ollama:11434/api"
|
- "OLLAMA_API_BASE_URL=http://ollama:11434/api"
|
||||||
- "OLLAMA_WEBUI_DB_URL=mongodb://root:example@ollama-webui-db:27017/"
|
- "WEBUI_DB_URL=mongodb://root:example@ollama-webui-db:27017/"
|
||||||
|
- "WEBUI_AUTH=TRUE"
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- host.docker.internal:host-gateway
|
- host.docker.internal:host-gateway
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
|
@ -3,8 +3,10 @@ import { PUBLIC_API_BASE_URL } from '$env/static/public';
|
||||||
|
|
||||||
export const OLLAMA_API_BASE_URL =
|
export const OLLAMA_API_BASE_URL =
|
||||||
PUBLIC_API_BASE_URL === ''
|
PUBLIC_API_BASE_URL === ''
|
||||||
? browser
|
? dev
|
||||||
? `http://${location.hostname}:8080/ollama/api`
|
? `http://${location.hostname}:8080/ollama/api`
|
||||||
|
: browser
|
||||||
|
? `http://${location.hostname}:11434/api`
|
||||||
: `http://localhost:11434/api`
|
: `http://localhost:11434/api`
|
||||||
: PUBLIC_API_BASE_URL;
|
: PUBLIC_API_BASE_URL;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue