mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-05-12 02:20:12 +08:00
* feat: implement address password authentication feature - Add password field to address table for storing hashed passwords - Implement address authentication APIs (login, change password) - Add automatic password generation for new addresses - Support password login alongside credential login in frontend - Add password management in account settings and admin panel - Add ENABLE_ADDRESS_PASSWORD environment variable for feature control - Update documentation and i18n support - Enhance security with SHA-256 password hashing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: upgrade dependencies --------- Co-authored-by: Claude <noreply@anthropic.com>
154 lines
5.5 KiB
JavaScript
154 lines
5.5 KiB
JavaScript
import { computed, ref } from "vue";
|
|
import {
|
|
createGlobalState, useStorage, useDark, useToggle,
|
|
useLocalStorage, useSessionStorage
|
|
} from '@vueuse/core'
|
|
|
|
export const useGlobalState = createGlobalState(
|
|
() => {
|
|
const isDark = useDark()
|
|
const toggleDark = useToggle(isDark)
|
|
const loading = ref(false);
|
|
const announcement = useLocalStorage('announcement', '');
|
|
const useSimpleIndex = useLocalStorage('useSimpleIndex', false);
|
|
const openSettings = ref({
|
|
fetched: false,
|
|
title: '',
|
|
announcement: '',
|
|
alwaysShowAnnouncement: false,
|
|
prefix: '',
|
|
addressRegex: '',
|
|
needAuth: false,
|
|
adminContact: '',
|
|
enableUserCreateEmail: false,
|
|
disableAnonymousUserCreateEmail: false,
|
|
disableCustomAddressName: false,
|
|
enableUserDeleteEmail: false,
|
|
enableAutoReply: false,
|
|
enableIndexAbout: false,
|
|
/** @type {string[]} */
|
|
defaultDomains: [],
|
|
/** @type {Array<{label: string, value: string}>} */
|
|
domains: [],
|
|
copyright: 'Dream Hunter',
|
|
cfTurnstileSiteKey: '',
|
|
enableWebhook: false,
|
|
isS3Enabled: false,
|
|
showGithub: true,
|
|
disableAdminPasswordCheck: false,
|
|
enableAddressPassword: false,
|
|
})
|
|
const settings = ref({
|
|
fetched: false,
|
|
send_balance: 0,
|
|
address: '',
|
|
auto_reply: {
|
|
subject: '',
|
|
message: '',
|
|
enabled: false,
|
|
source_prefix: '',
|
|
name: '',
|
|
}
|
|
});
|
|
const sendMailModel = useSessionStorage('sendMailModel', {
|
|
fromName: "",
|
|
toName: "",
|
|
toMail: "",
|
|
subject: "",
|
|
contentType: 'text',
|
|
content: "",
|
|
});
|
|
const showAuth = ref(false);
|
|
const showAddressCredential = ref(false);
|
|
const showAdminAuth = ref(false);
|
|
const auth = useStorage('auth', '');
|
|
const adminAuth = useStorage('adminAuth', '');
|
|
const jwt = useStorage('jwt', '');
|
|
const addressPassword = useSessionStorage('addressPassword', '');
|
|
const adminTab = useSessionStorage('adminTab', "account");
|
|
const adminMailTabAddress = ref("");
|
|
const adminSendBoxTabAddress = ref("");
|
|
const mailboxSplitSize = useStorage('mailboxSplitSize', 0.25);
|
|
const useIframeShowMail = useStorage('useIframeShowMail', false);
|
|
const preferShowTextMail = useStorage('preferShowTextMail', false);
|
|
const userJwt = useStorage('userJwt', '');
|
|
const userTab = useSessionStorage('userTab', 'address_management');
|
|
const indexTab = useSessionStorage('indexTab', 'mailbox');
|
|
const globalTabplacement = useStorage('globalTabplacement', 'top');
|
|
const useSideMargin = useStorage('useSideMargin', true);
|
|
const useUTCDate = useStorage('useUTCDate', false);
|
|
const autoRefresh = useStorage('autoRefresh', false);
|
|
const configAutoRefreshInterval = useStorage("configAutoRefreshInterval", 60);
|
|
const userOpenSettings = ref({
|
|
fetched: false,
|
|
enable: false,
|
|
enableMailVerify: false,
|
|
/** @type {{ clientID: string, name: string }[]} */
|
|
oauth2ClientIDs: [],
|
|
});
|
|
const userSettings = ref({
|
|
/** @type {boolean} */
|
|
fetched: false,
|
|
/** @type {string} */
|
|
user_email: '',
|
|
/** @type {number} */
|
|
user_id: 0,
|
|
/** @type {boolean} */
|
|
is_admin: false,
|
|
/** @type {string | null} */
|
|
access_token: null,
|
|
/** @type {string | null} */
|
|
new_user_token: null,
|
|
/** @type {null | {domains: string[] | undefined | null, role: string, prefix: string | undefined | null}} */
|
|
user_role: null,
|
|
});
|
|
const showAdminPage = computed(() =>
|
|
!!adminAuth.value
|
|
|| userSettings.value.is_admin
|
|
|| openSettings.value.disableAdminPasswordCheck
|
|
);
|
|
const telegramApp = ref(window.Telegram?.WebApp || {});
|
|
const isTelegram = ref(!!window.Telegram?.WebApp?.initData);
|
|
const userOauth2SessionState = useSessionStorage('userOauth2SessionState', '');
|
|
const userOauth2SessionClientID = useSessionStorage('userOauth2SessionClientID', '');
|
|
return {
|
|
isDark,
|
|
toggleDark,
|
|
loading,
|
|
settings,
|
|
sendMailModel,
|
|
announcement,
|
|
openSettings,
|
|
showAuth,
|
|
showAddressCredential,
|
|
auth,
|
|
jwt,
|
|
adminAuth,
|
|
showAdminAuth,
|
|
adminTab,
|
|
adminMailTabAddress,
|
|
adminSendBoxTabAddress,
|
|
mailboxSplitSize,
|
|
useIframeShowMail,
|
|
preferShowTextMail,
|
|
userJwt,
|
|
userTab,
|
|
indexTab,
|
|
userOpenSettings,
|
|
userSettings,
|
|
globalTabplacement,
|
|
useSideMargin,
|
|
useUTCDate,
|
|
autoRefresh,
|
|
configAutoRefreshInterval,
|
|
telegramApp,
|
|
isTelegram,
|
|
showAdminPage,
|
|
userOauth2SessionState,
|
|
userOauth2SessionClientID,
|
|
useSimpleIndex,
|
|
addressPassword,
|
|
}
|
|
},
|
|
)
|