Skip to content

Commit cfbe5b7

Browse files
committed
Merge branch 'main' of https://github.com/dataease/SQLBot
2 parents f8d156b + ec35877 commit cfbe5b7

File tree

5 files changed

+42
-10
lines changed

5 files changed

+42
-10
lines changed

Dockerfile

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,7 @@ COPY g2-ssr/charts/* /app/charts/
4545

4646
RUN npm install
4747

48-
FROM registry.cn-qingdao.aliyuncs.com/dataease/postgres:17.6
49-
ENV PG_PATH=/var/lib/postgresql/data
50-
ENV PG_SH=/usr/local/bin
51-
RUN mkdir -p ${PG_PATH}
52-
COPY --from=registry.cn-qingdao.aliyuncs.com/dataease/postgres:17.6 ${PG_PATH} ${PG_PATH}
53-
COPY --from=registry.cn-qingdao.aliyuncs.com/dataease/postgres:17.6 ${PG_SH} ${PG_SH}
48+
FROM registry.cn-qingdao.aliyuncs.com/dataease/postgres:17.6 AS pg-builder
5449

5550
# Runtime stage
5651
FROM registry.cn-qingdao.aliyuncs.com/dataease/sqlbot-base:latest
@@ -61,6 +56,12 @@ ENV SQLBOT_HOME=/opt/sqlbot
6156
ENV PYTHONPATH=${SQLBOT_HOME}/app
6257
ENV PATH="${SQLBOT_HOME}/app/.venv/bin:$PATH"
6358

59+
ENV PG_PATH=/var/lib/postgresql/data
60+
ENV PG_SH=/usr/local/bin
61+
RUN mkdir -p ${PG_PATH}
62+
COPY --from=pg-builder ${PG_PATH} ${PG_PATH}
63+
COPY --from=pg-builder ${PG_SH} ${PG_SH}
64+
6465
# Copy necessary files from builder
6566
COPY start.sh /opt/sqlbot/app/start.sh
6667
COPY g2-ssr/*.ttf /usr/share/fonts/truetype/liberation/

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ docker compose up -d
5656
<img alt="q&a" src="https://github.com/user-attachments/assets/55526514-52f3-4cfe-98ec-08a986259280" />
5757
</tr>
5858

59+
## Roadmap
60+
61+
- 术语库:开发中...
62+
- SQL 示例库:开发中...
63+
5964
## Star History
6065

6166
[![Star History Chart](https://api.star-history.com/svg?repos=dataease/sqlbot&type=Date)](https://www.star-history.com/#dataease/sqlbot&Date)

backend/apps/system/api/assistant.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,23 @@ async def info(request: Request, response: Response, session: SessionDep, trans:
3838
raise RuntimeError(trans('i18n_embedded.invalid_origin', origin = origin or ''))
3939
return db_model
4040

41+
@router.get("/app/{appId}")
42+
async def getApp(request: Request, response: Response, session: SessionDep, trans: Trans, appId: str) -> AssistantModel:
43+
if not appId:
44+
raise Exception('miss assistant appId')
45+
db_model = session.exec(select(AssistantModel).where(AssistantModel.app_id == appId)).first()
46+
if not db_model:
47+
raise RuntimeError(f"assistant application not exist")
48+
db_model = AssistantModel.model_validate(db_model)
49+
response.headers["Access-Control-Allow-Origin"] = db_model.domain
50+
origin = request.headers.get("origin") or get_origin_from_referer(request)
51+
if not origin:
52+
raise RuntimeError(trans('i18n_embedded.invalid_origin', origin = origin or ''))
53+
origin = origin.rstrip('/')
54+
if origin != db_model.domain:
55+
raise RuntimeError(trans('i18n_embedded.invalid_origin', origin = origin or ''))
56+
return db_model
57+
4158
@router.get("/validator", response_model=AssistantValidator)
4259
async def validator(session: SessionDep, id: int, virtual: Optional[int] = Query(None)):
4360
if not id:

backend/apps/system/middleware/auth.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
import base64
23
from typing import Optional
34
from fastapi import Request
45
from fastapi.responses import JSONResponse
@@ -127,11 +128,12 @@ async def validateEmbedded(self, param: str, trans: I18n) -> tuple[any]:
127128
options={"verify_signature": False, "verify_exp": False},
128129
algorithms=[security.ALGORITHM]
129130
)
130-
if not payload['embeddedId']:
131-
return False, f"Miss embeddedId payload error!"
131+
app_key = payload.get('appId', '')
132+
embeddedId = payload.get('embeddedId', None)
133+
if not embeddedId:
134+
embeddedId = xor_decrypt(app_key)
132135
if not payload['account']:
133136
return False, f"Miss account payload error!"
134-
embeddedId = payload['embeddedId']
135137
account = payload['account']
136138
with Session(engine) as session:
137139
""" session_user = await get_user_info(session = session, user_id = token_data.id)
@@ -156,4 +158,10 @@ async def validateEmbedded(self, param: str, trans: I18n) -> tuple[any]:
156158
except Exception as e:
157159
SQLBotLogUtil.exception(f"Embedded validation error: {str(e)}")
158160
# Return False and the exception message
159-
return False, e
161+
return False, e
162+
163+
def xor_decrypt(encrypted_str: str, key: int = 0xABCD1234) -> int:
164+
encrypted_bytes = base64.urlsafe_b64decode(encrypted_str)
165+
hex_str = encrypted_bytes.hex()
166+
encrypted_num = int(hex_str, 16)
167+
return encrypted_num ^ key

backend/common/utils/whitelist.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"/system/appearance/picture/*",
3232
"/system/assistant/validator*",
3333
"/system/assistant/info/*",
34+
"/system/assistant/app/*",
3435
"/system/assistant/picture/*",
3536
"/datasource/uploadExcel"
3637
]

0 commit comments

Comments
 (0)