mirror of
https://github.com/usual2970/certimate.git
synced 2025-10-05 05:54:53 +00:00
feat: migrate pocketbase to v0.23
This commit is contained in:
@@ -4,11 +4,11 @@ package ui
|
||||
import (
|
||||
"embed"
|
||||
|
||||
"github.com/labstack/echo/v5"
|
||||
"github.com/pocketbase/pocketbase/apis"
|
||||
)
|
||||
|
||||
//go:embed all:dist
|
||||
var distDir embed.FS
|
||||
|
||||
// DistDirFS contains the embedded dist directory files (without the "dist" prefix)
|
||||
var DistDirFS = echo.MustSubFS(distDir, "dist")
|
||||
var DistDirFS = apis.MustSubFS(distDir, "dist")
|
||||
|
8
ui/package-lock.json
generated
8
ui/package-lock.json
generated
@@ -20,7 +20,7 @@
|
||||
"jszip": "^3.10.1",
|
||||
"lucide-react": "^0.469.0",
|
||||
"nanoid": "^5.0.9",
|
||||
"pocketbase": "^0.21.5",
|
||||
"pocketbase": "^0.25.0",
|
||||
"radash": "^12.1.0",
|
||||
"react": "^18.3.1",
|
||||
"react-copy-to-clipboard": "^5.1.0",
|
||||
@@ -6811,9 +6811,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/pocketbase": {
|
||||
"version": "0.21.5",
|
||||
"resolved": "https://registry.npmmirror.com/pocketbase/-/pocketbase-0.21.5.tgz",
|
||||
"integrity": "sha512-bnI/uinnQps+ElSlzxkc4yvwuSFfKcoszDtXH/4QT2FhGq2mJVUvDlxn+rjRXVntUjPfmMG5LEPZ1eGqV6ssog=="
|
||||
"version": "0.25.0",
|
||||
"resolved": "https://registry.npmmirror.com/pocketbase/-/pocketbase-0.25.0.tgz",
|
||||
"integrity": "sha512-xbjiQG/tnh2HsjZrTW7ZEJASvl4hmGAB5PQAmNRkRU8BmrPib7zwKyXdiYJl34QN7ADpqykZD2lAMdDtrrQbuw=="
|
||||
},
|
||||
"node_modules/possible-typed-array-names": {
|
||||
"version": "1.0.0",
|
||||
|
@@ -22,7 +22,7 @@
|
||||
"jszip": "^3.10.1",
|
||||
"lucide-react": "^0.469.0",
|
||||
"nanoid": "^5.0.9",
|
||||
"pocketbase": "^0.21.5",
|
||||
"pocketbase": "^0.25.0",
|
||||
"radash": "^12.1.0",
|
||||
"react": "^18.3.1",
|
||||
"react-copy-to-clipboard": "^5.1.0",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import { ClientResponseError } from "pocketbase";
|
||||
|
||||
import { getPocketBase } from "@/repository/pocketbase";
|
||||
import { getPocketBase } from "@/repository/_pocketbase";
|
||||
|
||||
export const notifyTest = async (channel: string) => {
|
||||
const pb = getPocketBase();
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { ClientResponseError } from "pocketbase";
|
||||
|
||||
import { type Statistics } from "@/domain/statistics";
|
||||
import { getPocketBase } from "@/repository/pocketbase";
|
||||
import { getPocketBase } from "@/repository/_pocketbase";
|
||||
|
||||
export const get = async () => {
|
||||
const pb = getPocketBase();
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { ClientResponseError } from "pocketbase";
|
||||
|
||||
import { WORKFLOW_TRIGGERS } from "@/domain/workflow";
|
||||
import { getPocketBase } from "@/repository/pocketbase";
|
||||
import { getPocketBase } from "@/repository/_pocketbase";
|
||||
|
||||
export const run = async (id: string) => {
|
||||
const pb = getPocketBase();
|
||||
|
@@ -1,11 +1,11 @@
|
||||
import { Navigate, Outlet } from "react-router-dom";
|
||||
|
||||
import Version from "@/components/Version";
|
||||
import { getPocketBase } from "@/repository/pocketbase";
|
||||
import { getAuthStore } from "@/repository/admin";
|
||||
|
||||
const AuthLayout = () => {
|
||||
const auth = getPocketBase().authStore;
|
||||
if (auth.isValid && auth.isAdmin) {
|
||||
const auth = getAuthStore();
|
||||
if (auth.isValid && auth.isSuperuser) {
|
||||
return <Navigate to="/" />;
|
||||
}
|
||||
|
||||
|
@@ -17,7 +17,7 @@ import { Button, type ButtonProps, Drawer, Dropdown, Layout, Menu, type MenuProp
|
||||
|
||||
import Version from "@/components/Version";
|
||||
import { useBrowserTheme, useTriggerElement } from "@/hooks";
|
||||
import { getPocketBase } from "@/repository/pocketbase";
|
||||
import { getAuthStore } from "@/repository/admin";
|
||||
|
||||
const ConsoleLayout = () => {
|
||||
const navigate = useNavigate();
|
||||
@@ -35,8 +35,8 @@ const ConsoleLayout = () => {
|
||||
navigate("/settings/account");
|
||||
};
|
||||
|
||||
const auth = getPocketBase().authStore;
|
||||
if (!auth.isValid || !auth.isAdmin) {
|
||||
const auth = getAuthStore();
|
||||
if (!auth.isValid || !auth.isSuperuser) {
|
||||
return <Navigate to="/login" />;
|
||||
}
|
||||
|
||||
|
@@ -5,7 +5,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { useAntdForm } from "@/hooks";
|
||||
import { getPocketBase } from "@/repository/pocketbase";
|
||||
import { authWithPassword } from "@/repository/admin";
|
||||
import { getErrMsg } from "@/utils/error";
|
||||
|
||||
const Login = () => {
|
||||
@@ -27,7 +27,7 @@ const Login = () => {
|
||||
} = useAntdForm<z.infer<typeof formSchema>>({
|
||||
onSubmit: async (values) => {
|
||||
try {
|
||||
await getPocketBase().admins.authWithPassword(values.username, values.password);
|
||||
await authWithPassword(values.username, values.password);
|
||||
await navigage("/");
|
||||
} catch (err) {
|
||||
notificationApi.error({ message: t("common.text.request_error"), description: getErrMsg(err) });
|
||||
|
@@ -6,7 +6,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { useAntdForm } from "@/hooks";
|
||||
import { getPocketBase } from "@/repository/pocketbase";
|
||||
import { getAuthStore, save as saveAdmin } from "@/repository/admin";
|
||||
import { getErrMsg } from "@/utils/error";
|
||||
|
||||
const SettingsAccount = () => {
|
||||
@@ -27,18 +27,16 @@ const SettingsAccount = () => {
|
||||
formProps,
|
||||
} = useAntdForm<z.infer<typeof formSchema>>({
|
||||
initialValues: {
|
||||
username: getPocketBase().authStore.model?.email,
|
||||
username: getAuthStore().record?.email,
|
||||
},
|
||||
onSubmit: async (values) => {
|
||||
try {
|
||||
await getPocketBase().admins.update(getPocketBase().authStore.model?.id, {
|
||||
email: values.username,
|
||||
});
|
||||
await saveAdmin({ email: values.username });
|
||||
|
||||
messageApi.success(t("common.text.operation_succeeded"));
|
||||
|
||||
setTimeout(() => {
|
||||
getPocketBase().authStore.clear();
|
||||
getAuthStore().clear();
|
||||
navigate("/login");
|
||||
}, 500);
|
||||
} catch (err) {
|
||||
|
@@ -6,7 +6,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { useAntdForm } from "@/hooks";
|
||||
import { getPocketBase } from "@/repository/pocketbase";
|
||||
import { authWithPassword, getAuthStore, save as saveAdmin } from "@/repository/admin";
|
||||
import { getErrMsg } from "@/utils/error";
|
||||
|
||||
const SettingsPassword = () => {
|
||||
@@ -33,16 +33,13 @@ const SettingsPassword = () => {
|
||||
} = useAntdForm({
|
||||
onSubmit: async (values) => {
|
||||
try {
|
||||
await getPocketBase().admins.authWithPassword(getPocketBase().authStore.model?.email, values.oldPassword);
|
||||
await getPocketBase().admins.update(getPocketBase().authStore.model?.id, {
|
||||
password: values.newPassword,
|
||||
passwordConfirm: values.confirmPassword,
|
||||
});
|
||||
await authWithPassword(getAuthStore().record!.email, values.oldPassword);
|
||||
await saveAdmin({ password: values.newPassword });
|
||||
|
||||
messageApi.success(t("common.text.operation_succeeded"));
|
||||
|
||||
setTimeout(() => {
|
||||
getPocketBase().authStore.clear();
|
||||
getAuthStore().clear();
|
||||
navigate("/login");
|
||||
}, 500);
|
||||
} catch (err) {
|
||||
|
@@ -1,8 +1,5 @@
|
||||
import PocketBase from "pocketbase";
|
||||
|
||||
const apiDomain = import.meta.env.VITE_API_DOMAIN;
|
||||
console.log("VITE_API_DOMAIN:", apiDomain);
|
||||
|
||||
let pb: PocketBase;
|
||||
export const getPocketBase = () => {
|
||||
if (pb) return pb;
|
@@ -1,7 +1,7 @@
|
||||
import dayjs from "dayjs";
|
||||
|
||||
import { type AccessModel } from "@/domain/access";
|
||||
import { getPocketBase } from "./pocketbase";
|
||||
import { getPocketBase } from "./_pocketbase";
|
||||
|
||||
const COLLECTION_NAME = "access";
|
||||
|
||||
@@ -22,13 +22,8 @@ export const save = async (record: MaybeModelRecord<AccessModel>) => {
|
||||
};
|
||||
|
||||
export const remove = async (record: MaybeModelRecordWithId<AccessModel>) => {
|
||||
record = { ...record, deleted: dayjs.utc().format("YYYY-MM-DD HH:mm:ss") };
|
||||
|
||||
// TODO: 仅为兼容旧版本,后续迭代时删除
|
||||
if ("provider" in record && record.provider === "httpreq") record.provider = "acmehttpreq";
|
||||
if ("provider" in record && record.provider === "tencent") record.provider = "tencentcloud";
|
||||
if ("provider" in record && record.provider === "pdns") record.provider = "powerdns";
|
||||
|
||||
await getPocketBase().collection(COLLECTION_NAME).update<AccessModel>(record.id!, record);
|
||||
await getPocketBase()
|
||||
.collection(COLLECTION_NAME)
|
||||
.update<AccessModel>(record.id!, { deleted: dayjs.utc().format("YYYY-MM-DD HH:mm:ss") });
|
||||
return true;
|
||||
};
|
||||
|
17
ui/src/repository/admin.ts
Normal file
17
ui/src/repository/admin.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { getPocketBase } from "./_pocketbase";
|
||||
|
||||
const COLLECTION_NAME = "_superusers";
|
||||
|
||||
export const authWithPassword = (username: string, password: string) => {
|
||||
return getPocketBase().collection(COLLECTION_NAME).authWithPassword(username, password);
|
||||
};
|
||||
|
||||
export const getAuthStore = () => {
|
||||
return getPocketBase().authStore;
|
||||
};
|
||||
|
||||
export const save = (data: { email: string } | { password: string }) => {
|
||||
return getPocketBase()
|
||||
.collection(COLLECTION_NAME)
|
||||
.update(getAuthStore().record?.id || "", data);
|
||||
};
|
@@ -2,7 +2,7 @@ import dayjs from "dayjs";
|
||||
import { type RecordListOptions } from "pocketbase";
|
||||
|
||||
import { type CertificateModel } from "@/domain/certificate";
|
||||
import { getPocketBase } from "./pocketbase";
|
||||
import { getPocketBase } from "./_pocketbase";
|
||||
|
||||
const COLLECTION_NAME = "certificate";
|
||||
|
||||
@@ -39,8 +39,8 @@ export const list = async (request: ListCertificateRequest) => {
|
||||
};
|
||||
|
||||
export const remove = async (record: MaybeModelRecordWithId<CertificateModel>) => {
|
||||
record = { ...record, deleted: dayjs.utc().format("YYYY-MM-DD HH:mm:ss") };
|
||||
|
||||
await getPocketBase().collection(COLLECTION_NAME).update<CertificateModel>(record.id!, record);
|
||||
await getPocketBase()
|
||||
.collection(COLLECTION_NAME)
|
||||
.update<CertificateModel>(record.id!, { deleted: dayjs.utc().format("YYYY-MM-DD HH:mm:ss") });
|
||||
return true;
|
||||
};
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { ClientResponseError } from "pocketbase";
|
||||
|
||||
import { type SettingsModel, type SettingsNames } from "@/domain/settings";
|
||||
import { getPocketBase } from "./pocketbase";
|
||||
import { getPocketBase } from "./_pocketbase";
|
||||
|
||||
export const get = async <T extends NonNullable<unknown>>(name: SettingsNames) => {
|
||||
try {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { type RecordListOptions, type RecordSubscription } from "pocketbase";
|
||||
|
||||
import { type WorkflowModel } from "@/domain/workflow";
|
||||
import { getPocketBase } from "./pocketbase";
|
||||
import { getPocketBase } from "./_pocketbase";
|
||||
|
||||
const COLLECTION_NAME = "workflow";
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import { type WorkflowRunModel } from "@/domain/workflowRun";
|
||||
|
||||
import { getPocketBase } from "./pocketbase";
|
||||
import { getPocketBase } from "./_pocketbase";
|
||||
|
||||
const COLLECTION_NAME = "workflow_run";
|
||||
|
||||
|
Reference in New Issue
Block a user