mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-07-20 03:51:35 +08:00
fix: support admin auth for Telegram MiniApp mail viewing (#875)
* fix: support admin auth for Telegram MiniApp mail viewing (#852) Admin users configured in miniAppUrl can now view emails via the MiniApp without needing Telegram initData auth. The getMail endpoint reads the x-admin-auth header (already sent by the frontend) to bypass Telegram auth and address permission checks for admin users. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: extract isAdmin() as shared utility function Reuse the x-admin-auth header check logic across worker.ts and miniapp.ts via a common isAdmin() helper in utils.ts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: rename isAdmin to checkIsAdmin for consistency Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: address PR review comments - Remove unused getAdminPasswords import from worker.ts - Return 404 when admin queries a non-existent mail Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@ import { Context } from "hono";
|
||||
import { Jwt } from 'hono/utils/jwt'
|
||||
import { CONSTANTS } from "../constants";
|
||||
import { bindTelegramAddress, jwtListToAddressData, tgUserNewAddress, unbindTelegramAddress } from "./common";
|
||||
import { checkCfTurnstile } from "../utils";
|
||||
import { checkCfTurnstile, checkIsAdmin } from "../utils";
|
||||
import { TelegramSettings } from "./settings";
|
||||
import i18n from "../i18n";
|
||||
|
||||
@@ -131,6 +131,15 @@ async function getMail(c: Context<HonoCustomType>): Promise<Response> {
|
||||
const { initData, mailId } = await c.req.json();
|
||||
const msgs = i18n.getMessagesbyContext(c);
|
||||
try {
|
||||
if (checkIsAdmin(c)) {
|
||||
const result = await c.env.DB.prepare(
|
||||
`SELECT * FROM raw_mails where id = ?`
|
||||
).bind(mailId).first();
|
||||
if (!result) {
|
||||
return c.text("Mail not found", 404);
|
||||
}
|
||||
return c.json(result);
|
||||
}
|
||||
const userId = await checkTelegramAuth(c, initData);
|
||||
const jwtList = await c.env.KV.get<string[]>(`${CONSTANTS.TG_KV_PREFIX}:${userId}`, 'json') || [];
|
||||
const { addressList, addressIdMap } = await jwtListToAddressData(c, jwtList, msgs);
|
||||
|
||||
Reference in New Issue
Block a user