Compare commits

...

3 Commits

Author SHA1 Message Date
sagit daf34d0f6c fix(backend): prevent login block when captcha enabled without cloudflare key (#194)
When captcha_enabled=true but cloudflare_secret_key is not configured,
the login flow would block users with "未配置Cloudflare Site Key" error.
Now captcha is treated as disabled if the secret key is missing, allowing
users to log in normally on fresh PostgreSQL installations.

Fixes login issue on new panel setups with PostgreSQL.
2026-02-22 22:54:51 +08:00
sagit bb505d461d fix(frontend): enable modal scroll on panel sharing page (#193)
Add scrollBehavior="inside" to Create Share and Edit Share modals
to allow content scrolling on mobile devices when form fields
exceed viewport height.
2026-02-22 21:53:29 +08:00
sagit 00be0ac31e fix(frontend): enable content scroll on mobile (#192)
Main content area had overflow-hidden on mobile which prevented
scrolling when content exceeded viewport height. Changed to
overflow-y-auto for consistent scroll behavior across all devices.
2026-02-22 21:12:45 +08:00
3 changed files with 16 additions and 5 deletions
+13 -2
View File
@@ -988,10 +988,21 @@ func (h *Handler) captchaEnabled() (bool, error) {
if err != nil {
return false, err
}
if cfg == nil {
if cfg == nil || !strings.EqualFold(cfg.Value, "true") {
return false, nil
}
return strings.EqualFold(cfg.Value, "true"), nil
// captcha_enabled=true, but we need to verify cloudflare_secret_key is configured
// If secret key is not configured, treat captcha as disabled to avoid blocking login
secretKey, err := h.repo.GetConfigByName("cloudflare_secret_key")
if err != nil {
return false, err
}
if secretKey == nil || strings.TrimSpace(secretKey.Value) == "" {
return false, nil
}
return true, nil
}
func (h *Handler) markCaptchaToken(token string) {
+1 -1
View File
@@ -533,7 +533,7 @@ export default function AdminLayout({
{/* 主内容 */}
<main
className={`flex-1 bg-gray-100 dark:bg-black overflow-hidden ${isMobile ? "" : "overflow-y-scroll"}`}
className="flex-1 bg-gray-100 dark:bg-black overflow-y-auto"
>
<AnimatePresence mode="wait">
<motion.div
+2 -2
View File
@@ -674,7 +674,7 @@ export default function PanelSharingPage() {
</Tabs>
{/* Create Share Modal */}
<Modal isOpen={createShareOpen} onClose={() => setCreateShareOpen(false)}>
<Modal isOpen={createShareOpen} onClose={() => setCreateShareOpen(false)} scrollBehavior="inside">
<ModalContent>
<ModalHeader>创建分享</ModalHeader>
<ModalBody>
@@ -777,7 +777,7 @@ export default function PanelSharingPage() {
</Modal>
{/* Edit Share Modal */}
<Modal isOpen={editShareOpen} onClose={() => setEditShareOpen(false)}>
<Modal isOpen={editShareOpen} onClose={() => setEditShareOpen(false)} scrollBehavior="inside">
<ModalContent>
<ModalHeader>编辑分享</ModalHeader>
<ModalBody>