diff --git a/aftBuild.sh b/aftBuild.sh index 6edf576..de943fa 100644 --- a/aftBuild.sh +++ b/aftBuild.sh @@ -4,4 +4,6 @@ if [ -d ".output" ]; then tar -czvf ./output.tar.gz .output mv output.tar.gz .output/output.tar.gz -fi \ No newline at end of file +fi + +echo "You can preview this build using node .output/server/index.mjs" \ No newline at end of file diff --git a/components/miaoHeader.vue b/components/miaoHeader.vue index ed32b90..eda73ae 100644 --- a/components/miaoHeader.vue +++ b/components/miaoHeader.vue @@ -38,7 +38,10 @@ const navList: NavItem[] = [ { title: '文章', path: '/posts', - otherPath: ['/post'] + }, + { + title: '后台', + path: '/user', }, // { // title: '测试', diff --git a/hooks/pinia/useUserStore.ts b/hooks/pinia/useUserStore.ts new file mode 100644 index 0000000..55f146a --- /dev/null +++ b/hooks/pinia/useUserStore.ts @@ -0,0 +1,50 @@ +import { defineStore } from "pinia"; + +export const useUserStore = defineStore("user", () => { + const isLogin = ref(false); + const _token = ref(); + const _tokenExpireTime = ref(); + + const tokenExpireTime = computed(() => { + if (_tokenExpireTime.value) { + return _tokenExpireTime.value; + } + const res = parseInt(localStorage.getItem("miao-token-expire-time") || "0") + _tokenExpireTime.value = res; + return res; + }); + + const setTokenExpireTime = (value: number) => { + _tokenExpireTime.value = value; + localStorage.setItem("miao-token-expire-time", value.toString()); + }; + + const token = computed(() => { + if (_token.value) { + return _token.value; + } + const res = localStorage.getItem("miao-token") || "" + _token.value = res; + return res; + }); + + const setLoginStatus = (value: boolean) => { + isLogin.value = value; + }; + const setToken = (value: string) => { + _token.value = value; + localStorage.setItem("miao-token", value); + }; + return { + isLogin, + setLoginStatus, + token, + setToken, + tokenExpireTime, + setTokenExpireTime, + _tokenExpireTime, + _token + }; +}); + +export default useUserStore; \ No newline at end of file diff --git a/nuxt.config.ts b/nuxt.config.ts index d6eb448..b051140 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -8,7 +8,6 @@ export default defineNuxtConfig({ devtools: { enabled: false }, alias: { "@": "/" - // 'dayjs': 'dayjs/esm/' }, app: { pageTransition: { @@ -18,14 +17,7 @@ export default defineNuxtConfig({ }, vite: { server: {}, - plugins: [ - // AutoImport({ - // resolvers: [ElementPlusResolver()], - // }), - // Components({ - // resolvers: [ElementPlusResolver()], - // }) - ], + plugins: [], test: { deps: { inline: ['element-plus'] @@ -34,11 +26,6 @@ export default defineNuxtConfig({ }, modules: ["@pinia/nuxt", '@element-plus/nuxt'], compatibilityDate: "2025-01-12", - build: { - analyze: { - filename: "stats.html", - }, - }, nitro: { compressPublicAssets: true, }, diff --git a/package.json b/package.json index ad36863..f7dc70f 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@pinia/nuxt": "^0.9.0", + "@types/node": "^22.10.5", "dayjs": "^1.11.13", "markdown-it": "^14.1.0", "node-fetch": "^3.3.2", diff --git a/pages/posts.vue b/pages/posts.vue index babb082..6a79b62 100644 --- a/pages/posts.vue +++ b/pages/posts.vue @@ -1,5 +1,5 @@ @@ -9,7 +9,7 @@ \ No newline at end of file diff --git a/pages/user/index.vue b/pages/user/index.vue new file mode 100644 index 0000000..084e9ee --- /dev/null +++ b/pages/user/index.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/pages/user/login.vue b/pages/user/login.vue new file mode 100644 index 0000000..ca4befc --- /dev/null +++ b/pages/user/login.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/pages/user/main.vue b/pages/user/main.vue new file mode 100644 index 0000000..2bd7c78 --- /dev/null +++ b/pages/user/main.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a57456..090346c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@pinia/nuxt': specifier: ^0.9.0 version: 0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)))(rollup@4.30.1) + '@types/node': + specifier: ^22.10.5 + version: 22.10.5 dayjs: specifier: ^1.11.13 version: 1.11.13 diff --git a/server/api/auth/login.ts b/server/api/auth/login.ts new file mode 100644 index 0000000..d2b6824 --- /dev/null +++ b/server/api/auth/login.ts @@ -0,0 +1,4 @@ +export default defineEventHandler(async (event) => { + const body = await readBody(event) + return +}) \ No newline at end of file diff --git a/server/api/test/testDir.ts b/server/api/test/testDir.ts index a885dc1..2addf65 100644 --- a/server/api/test/testDir.ts +++ b/server/api/test/testDir.ts @@ -1,7 +1,9 @@ import fs from 'fs'; +import checkUserData from '~/server/utils/checkUserData'; export default defineEventHandler((event) => { - const res = fs.readdirSync('./') + checkUserData() + const res = fs.readdirSync('userData') return { res } diff --git a/server/middleware/auth.ts b/server/middleware/auth.ts new file mode 100644 index 0000000..d08006a --- /dev/null +++ b/server/middleware/auth.ts @@ -0,0 +1,12 @@ +import serverConfig from "../server.config" + +const pathNeedAuth = serverConfig.auth.api + +export default defineEventHandler((event) => { + // console.log('New request: ' + getRequestURL(event)) + const path = getRequestURL(event).pathname + if(pathNeedAuth.has(path)){ + // console.log('Auth needed') + return true + } +}) \ No newline at end of file diff --git a/server/middleware/checkUserData.ts b/server/middleware/checkUserData.ts new file mode 100644 index 0000000..8ab2106 --- /dev/null +++ b/server/middleware/checkUserData.ts @@ -0,0 +1,4 @@ +export default defineEventHandler((event) => { + checkUserData() + // console.log('New request: ' + getRequestURL(event)) +}) \ No newline at end of file diff --git a/server/server.config.ts b/server/server.config.ts new file mode 100644 index 0000000..78204db --- /dev/null +++ b/server/server.config.ts @@ -0,0 +1,8 @@ +export default { + auth: { + // 需要进行鉴权的api + api: new Set([ + '/api/test/testDir' + ]) + } +} \ No newline at end of file diff --git a/server/utils/checkUserData.ts b/server/utils/checkUserData.ts new file mode 100644 index 0000000..b537779 --- /dev/null +++ b/server/utils/checkUserData.ts @@ -0,0 +1,22 @@ +import mkfileIfNotExist from "./mkfileIfNotExist" + +let checked = false + +/** + * 检查并完善userData的目录结构,若不存在密钥则生成随机的密钥 + * @returns {void} + */ +const checkUserData = () => { + if (checked) return + checked = true + // console.log('check userData') + const dirList = [ + './userData/', + './userData/db/', + './userData/md/', + ] + dirList.forEach(mkdirIfNotExist) + mkfileIfNotExist('./userData/key.txt', new Array(2048).fill(0).map(() => Math.floor(Math.random() * 16).toString(16)).join('')) +} + +export default checkUserData \ No newline at end of file diff --git a/server/utils/mkdirIfNotExist.ts b/server/utils/mkdirIfNotExist.ts new file mode 100644 index 0000000..e59f708 --- /dev/null +++ b/server/utils/mkdirIfNotExist.ts @@ -0,0 +1,15 @@ +import fs from 'fs'; + +export default function mkdirIfNotExists(dir: string | string[]): void { + if (typeof dir !== 'string') { + dir.forEach((d) => mkdirIfNotExists(d)); + return; + } + if (!fs.existsSync(dir)) { + try { + fs.mkdirSync(dir, { recursive: true }); + } catch (error) { + console.error(error) + } + } +} diff --git a/server/utils/mkfileIfNotExist.ts b/server/utils/mkfileIfNotExist.ts new file mode 100644 index 0000000..41cbc8a --- /dev/null +++ b/server/utils/mkfileIfNotExist.ts @@ -0,0 +1,25 @@ +import fs from 'fs'; +import path from 'path'; +import mkdirIfNotExist from './mkdirIfNotExist'; + +export default function mkfileIfNotExist(filePath: string | string[], content?: string): void { + content = content || ''; + if (Array.isArray(filePath)) { + filePath.forEach((file) => mkfileIfNotExist(file, content)); + return; + } + if (typeof filePath !== 'string') { + console.error('Invalid file path:', filePath); + return; + } + if (fs.existsSync(filePath)) { + return; + } + const dir = path.dirname(filePath); + mkdirIfNotExist(dir); + try { + fs.writeFileSync(filePath, content); + } catch (error) { + console.error('Error creating file:', error); + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index a7be82f..2704d9a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "style/**/*", "utils/**/*", ".nuxt/*.d.ts", - "types/**/*" + "types/**/*", + "plugins/**/*", ] }