From 96526da432904d4de85d65f86c5578abfae49307 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Thu, 28 Mar 2024 20:44:13 +0800 Subject: [PATCH] :sparkles: User sign in --- .gitignore | 1 + android/app/capacitor.build.gradle | 2 +- android/capacitor.settings.gradle | 3 + bun.lockb | Bin 183228 -> 0 bytes index.html | 2 +- ios/App/App/Info.plist | 2 +- ios/App/Podfile | 2 +- ios/App/Podfile.lock | 8 +- package.json | 1 + src/components/Copyright.vue | 6 + src/components/NotificationList.vue | 90 ++++++++++++ src/components/UserMenu.vue | 43 ++++++ src/components/auth/AccountLocator.vue | 70 ++++++++++ src/components/auth/CallbackNotify.vue | 16 +++ src/components/auth/FactorApplicator.vue | 139 +++++++++++++++++++ src/components/auth/FactorPicker.vue | 75 ++++++++++ src/components/posts/PostReaction.vue | 2 +- src/components/publish/ArticleEditor.vue | 2 +- src/components/publish/CommentEditor.vue | 2 +- src/components/publish/MomentEditor.vue | 2 +- src/components/publish/PostDeletion.vue | 2 +- src/components/publish/parts/Media.vue | 4 +- src/components/realms/RealmDeletion.vue | 2 +- src/components/realms/RealmEditor.vue | 2 +- src/components/realms/RealmInvitation.vue | 2 +- src/components/realms/RealmMembers.vue | 2 +- src/index.vue | 12 +- src/layouts/master.vue | 5 +- src/router/index.ts | 18 +++ src/stores/realms.ts | 4 +- src/stores/userinfo.ts | 16 +-- src/views/auth/sign-in.vue | 85 ++++++++++++ src/views/auth/sign-up.vue | 162 ++++++++++++++++++++++ 33 files changed, 750 insertions(+), 34 deletions(-) delete mode 100755 bun.lockb create mode 100644 src/components/Copyright.vue create mode 100644 src/components/NotificationList.vue create mode 100644 src/components/UserMenu.vue create mode 100644 src/components/auth/AccountLocator.vue create mode 100644 src/components/auth/CallbackNotify.vue create mode 100644 src/components/auth/FactorApplicator.vue create mode 100644 src/components/auth/FactorPicker.vue create mode 100644 src/views/auth/sign-in.vue create mode 100644 src/views/auth/sign-up.vue diff --git a/.gitignore b/.gitignore index 8ee54e8..528a1cf 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ coverage *.sw? *.tsbuildinfo +*.lockb diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle index fdb4970..ac381a7 100644 --- a/android/app/capacitor.build.gradle +++ b/android/app/capacitor.build.gradle @@ -9,7 +9,7 @@ android { apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" dependencies { - + implementation project(':capacitor-preferences') } diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle index 9a5fa87..a1c665a 100644 --- a/android/capacitor.settings.gradle +++ b/android/capacitor.settings.gradle @@ -1,3 +1,6 @@ // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN include ':capacitor-android' project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') + +include ':capacitor-preferences' +project(':capacitor-preferences').projectDir = new File('../node_modules/@capacitor/preferences/android') diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index b4652aca8727bac233cb49021b36ce985cf3776e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183228 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 diff --git a/index.html b/index.html index 809b29c..ba5c5aa 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - Solarplaza + Solian
diff --git a/ios/App/App/Info.plist b/ios/App/App/Info.plist index e084545..3c7a5b1 100644 --- a/ios/App/App/Info.plist +++ b/ios/App/App/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion en CFBundleDisplayName - @hydrogen/solaragent + Solian CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/ios/App/Podfile b/ios/App/Podfile index c66ecd4..e403f39 100644 --- a/ios/App/Podfile +++ b/ios/App/Podfile @@ -11,7 +11,7 @@ install! 'cocoapods', :disable_input_output_paths => true def capacitor_pods pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' - + pod 'CapacitorPreferences', :path => '../../node_modules/@capacitor/preferences' end target 'App' do diff --git a/ios/App/Podfile.lock b/ios/App/Podfile.lock index 95ebdcf..79c172c 100644 --- a/ios/App/Podfile.lock +++ b/ios/App/Podfile.lock @@ -2,21 +2,27 @@ PODS: - Capacitor (5.7.4): - CapacitorCordova - CapacitorCordova (5.7.4) + - CapacitorPreferences (5.0.7): + - Capacitor DEPENDENCIES: - "Capacitor (from `../../node_modules/@capacitor/ios`)" - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)" + - "CapacitorPreferences (from `../../node_modules/@capacitor/preferences`)" EXTERNAL SOURCES: Capacitor: :path: "../../node_modules/@capacitor/ios" CapacitorCordova: :path: "../../node_modules/@capacitor/ios" + CapacitorPreferences: + :path: "../../node_modules/@capacitor/preferences" SPEC CHECKSUMS: Capacitor: 4fe9adf012caceb4c71ffea2f1f4d005cdcbeea7 CapacitorCordova: a6e87fccc0307dee7aec1560ec9398485f2b0ce7 + CapacitorPreferences: 77ac427e98db83bace772455f8ba447430382c4c -PODFILE CHECKSUM: 8ab55909c5de2b217f9841e5e5b329f5ec901553 +PODFILE CHECKSUM: 769e120bf4dfe4ef1095b83775e36bafeeeb3cdd COCOAPODS: 1.15.1 diff --git a/package.json b/package.json index 7a4fc9f..b51ed40 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@capacitor/android": "^5.7.4", "@capacitor/core": "^5.7.4", "@capacitor/ios": "^5.7.4", + "@capacitor/preferences": "^5.0.7", "@fontsource/roboto": "^5.0.12", "@mdi/font": "^7.4.47", "dompurify": "^3.0.11", diff --git a/src/components/Copyright.vue b/src/components/Copyright.vue new file mode 100644 index 0000000..f3f6baa --- /dev/null +++ b/src/components/Copyright.vue @@ -0,0 +1,6 @@ + diff --git a/src/components/NotificationList.vue b/src/components/NotificationList.vue new file mode 100644 index 0000000..32119a1 --- /dev/null +++ b/src/components/NotificationList.vue @@ -0,0 +1,90 @@ + + + diff --git a/src/components/UserMenu.vue b/src/components/UserMenu.vue new file mode 100644 index 0000000..10a1c28 --- /dev/null +++ b/src/components/UserMenu.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/auth/AccountLocator.vue b/src/components/auth/AccountLocator.vue new file mode 100644 index 0000000..aff510e --- /dev/null +++ b/src/components/auth/AccountLocator.vue @@ -0,0 +1,70 @@ + + + diff --git a/src/components/auth/CallbackNotify.vue b/src/components/auth/CallbackNotify.vue new file mode 100644 index 0000000..d63c6d6 --- /dev/null +++ b/src/components/auth/CallbackNotify.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/auth/FactorApplicator.vue b/src/components/auth/FactorApplicator.vue new file mode 100644 index 0000000..85f7ff0 --- /dev/null +++ b/src/components/auth/FactorApplicator.vue @@ -0,0 +1,139 @@ + + + diff --git a/src/components/auth/FactorPicker.vue b/src/components/auth/FactorPicker.vue new file mode 100644 index 0000000..cd8b4fd --- /dev/null +++ b/src/components/auth/FactorPicker.vue @@ -0,0 +1,75 @@ + + + diff --git a/src/components/posts/PostReaction.vue b/src/components/posts/PostReaction.vue index 1622d14..bfacece 100644 --- a/src/components/posts/PostReaction.vue +++ b/src/components/posts/PostReaction.vue @@ -68,7 +68,7 @@ const error = ref(null) async function reactPost(symbol: string, attitude: number) { const res = await request("interactive", `/api/p/${props.model}/${props.item?.id}/react`, { method: "POST", - headers: { Authorization: `Bearer ${getAtk()}`, "Content-Type": "application/json" }, + headers: { Authorization: `Bearer ${await getAtk()}`, "Content-Type": "application/json" }, body: JSON.stringify({ symbol, attitude }) }) if (res.status === 201) { diff --git a/src/components/publish/ArticleEditor.vue b/src/components/publish/ArticleEditor.vue index 8e4727e..fffc585 100644 --- a/src/components/publish/ArticleEditor.vue +++ b/src/components/publish/ArticleEditor.vue @@ -184,7 +184,7 @@ async function postArticle(evt: SubmitEvent) { loading.value = true const res = await request("interactive", url, { method: method, - headers: { "Content-Type": "application/json", Authorization: `Bearer ${getAtk()}` }, + headers: { "Content-Type": "application/json", Authorization: `Bearer ${await getAtk()}` }, body: JSON.stringify(payload) }) if (res.status === 200) { diff --git a/src/components/publish/CommentEditor.vue b/src/components/publish/CommentEditor.vue index a2482d9..de4a4a5 100644 --- a/src/components/publish/CommentEditor.vue +++ b/src/components/publish/CommentEditor.vue @@ -65,7 +65,7 @@ async function postComment(evt: SubmitEvent) { loading.value = true const res = await request("interactive", url, { method: method, - headers: { "Content-Type": "application/json", Authorization: `Bearer ${getAtk()}` }, + headers: { "Content-Type": "application/json", Authorization: `Bearer ${await getAtk()}` }, body: JSON.stringify(payload) }) if (res.status === 200) { diff --git a/src/components/publish/MomentEditor.vue b/src/components/publish/MomentEditor.vue index aca7a48..5135881 100644 --- a/src/components/publish/MomentEditor.vue +++ b/src/components/publish/MomentEditor.vue @@ -131,7 +131,7 @@ async function postMoment(evt: SubmitEvent) { loading.value = true const res = await request("interactive", url, { method: method, - headers: { "Content-Type": "application/json", Authorization: `Bearer ${getAtk()}` }, + headers: { "Content-Type": "application/json", Authorization: `Bearer ${await getAtk()}` }, body: JSON.stringify(payload) }) if (res.status === 200) { diff --git a/src/components/publish/PostDeletion.vue b/src/components/publish/PostDeletion.vue index fa3be14..f578839 100644 --- a/src/components/publish/PostDeletion.vue +++ b/src/components/publish/PostDeletion.vue @@ -38,7 +38,7 @@ async function deletePost() { loading.value = true const res = await request("interactive", url, { method: "DELETE", - headers: { Authorization: `Bearer ${getAtk()}` } + headers: { Authorization: `Bearer ${await getAtk()}` } }) if (res.status !== 200) { error.value = await res.text() diff --git a/src/components/publish/parts/Media.vue b/src/components/publish/parts/Media.vue index 7ee7ac9..42a7cf7 100644 --- a/src/components/publish/parts/Media.vue +++ b/src/components/publish/parts/Media.vue @@ -65,7 +65,7 @@ async function upload(file?: any) { emits("update:uploading", true) const res = await request("interactive", "/api/attachments", { method: "POST", - headers: { Authorization: `Bearer ${getAtk()}` }, + headers: { Authorization: `Bearer ${await getAtk()}` }, body: data }) let meta: any @@ -87,7 +87,7 @@ async function dispose(idx: number) { const res = await request("interactive", `/api/attachments/${item.id}`, { method: "DELETE", - headers: { Authorization: `Bearer ${getAtk()}` } + headers: { Authorization: `Bearer ${await getAtk()}` } }) if (res.status !== 200) { error.value = await res.text() diff --git a/src/components/realms/RealmDeletion.vue b/src/components/realms/RealmDeletion.vue index 51beca5..0af3091 100644 --- a/src/components/realms/RealmDeletion.vue +++ b/src/components/realms/RealmDeletion.vue @@ -43,7 +43,7 @@ async function deletePost() { loading.value = true const res = await request("interactive", url, { method: "DELETE", - headers: { Authorization: `Bearer ${getAtk()}` } + headers: { Authorization: `Bearer ${await getAtk()}` } }) if (res.status !== 200) { error.value = await res.text() diff --git a/src/components/realms/RealmEditor.vue b/src/components/realms/RealmEditor.vue index 5b6884a..051fa51 100644 --- a/src/components/realms/RealmEditor.vue +++ b/src/components/realms/RealmEditor.vue @@ -63,7 +63,7 @@ async function submit(evt: SubmitEvent) { loading.value = true const res = await request("interactive", url, { method: method, - headers: { "Content-Type": "application/json", Authorization: `Bearer ${getAtk()}` }, + headers: { "Content-Type": "application/json", Authorization: `Bearer ${await getAtk()}` }, body: JSON.stringify(payload) }) if (res.status !== 200) { diff --git a/src/components/realms/RealmInvitation.vue b/src/components/realms/RealmInvitation.vue index 683d6f7..d13b2af 100644 --- a/src/components/realms/RealmInvitation.vue +++ b/src/components/realms/RealmInvitation.vue @@ -38,7 +38,7 @@ async function inviteMember(evt: SubmitEvent) { loading.value = true const res = await request("interactive", `/api/realms/${props.item?.id}/invite`, { method: "POST", - headers: { "Content-Type": "application/json", Authorization: `Bearer ${getAtk()}` }, + headers: { "Content-Type": "application/json", Authorization: `Bearer ${await getAtk()}` }, body: JSON.stringify({ account_name: targetName.value }) diff --git a/src/components/realms/RealmMembers.vue b/src/components/realms/RealmMembers.vue index 410e1df..9abc0f6 100644 --- a/src/components/realms/RealmMembers.vue +++ b/src/components/realms/RealmMembers.vue @@ -97,7 +97,7 @@ async function kickMember(item: any) { loading.value = true const res = await request("interactive", `/api/realms/${props.item?.id}/kick`, { method: "POST", - headers: { "Content-Type": "application/json", Authorization: `Bearer ${getAtk()}` }, + headers: { "Content-Type": "application/json", Authorization: `Bearer ${await getAtk()}` }, body: JSON.stringify({ account_name: item.account.name }) diff --git a/src/index.vue b/src/index.vue index e068d9d..d4637e1 100644 --- a/src/index.vue +++ b/src/index.vue @@ -7,10 +7,14 @@ diff --git a/src/layouts/master.vue b/src/layouts/master.vue index 914d0c2..dc9155e 100644 --- a/src/layouts/master.vue +++ b/src/layouts/master.vue @@ -40,7 +40,7 @@ - + @@ -139,9 +139,6 @@ id.readProfiles() const meta = useWellKnown() -const signinUrl = computed(() => { - return meta.wellKnown?.components?.identity + `/auth/sign-in?redirect_uri=${encodeURIComponent(location.href)}` -}) const passportUrl = computed(() => { return meta.wellKnown?.components?.identity }) diff --git a/src/router/index.ts b/src/router/index.ts index 3ce9642..cccefa6 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -29,6 +29,24 @@ const router = createRouter({ path: "/realms/:realmId", name: "realms.page", component: () => import("@/views/realms/page.vue") + }, + + { + path: "/auth", + children: [ + { + path: "sign-in", + name: "auth.sign-in", + component: () => import("@/views/auth/sign-in.vue"), + meta: { public: true, title: "Sign in" } + }, + { + path: "sign-up", + name: "auth.sign-up", + component: () => import("@/views/auth/sign-up.vue"), + meta: { public: true, title: "Sign up" } + } + ] } ] } diff --git a/src/stores/realms.ts b/src/stores/realms.ts index 633a8ee..ab13adf 100644 --- a/src/stores/realms.ts +++ b/src/stores/realms.ts @@ -19,10 +19,10 @@ export const useRealms = defineStore("realms", () => { const available = ref([]) async function list() { - if (!checkLoggedIn()) return + if (!(await checkLoggedIn())) return const res = await request("interactive", "/api/realms/me/available", { - headers: { Authorization: `Bearer ${getAtk()}` } + headers: { Authorization: `Bearer ${await getAtk()}` } }) if (res.status !== 200) { throw new Error(await res.text()) diff --git a/src/stores/userinfo.ts b/src/stores/userinfo.ts index 9f38c80..d0de4ee 100644 --- a/src/stores/userinfo.ts +++ b/src/stores/userinfo.ts @@ -1,7 +1,7 @@ -import Cookie from "universal-cookie" import { defineStore } from "pinia" import { ref } from "vue" import { request } from "@/scripts/request" +import { Preferences } from "@capacitor/preferences" export interface Userinfo { isReady: boolean @@ -17,12 +17,12 @@ const defaultUserinfo: Userinfo = { data: null } -export function getAtk(): string { - return new Cookie().get("identity_auth_key") +export async function getAtk() { + return (await Preferences.get({ key: "identity.access_token" })).value } -export function checkLoggedIn(): boolean { - return new Cookie().get("identity_auth_key") +export async function checkLoggedIn(): boolean { + return (await Preferences.get({ key: "identity.access_token" })).value != null } export const useUserinfo = defineStore("userinfo", () => { @@ -30,12 +30,12 @@ export const useUserinfo = defineStore("userinfo", () => { const isReady = ref(false) async function readProfiles() { - if (!checkLoggedIn()) { + if (!(await checkLoggedIn())) { isReady.value = true } - const res = await request("interactive", "/api/users/me", { - headers: { Authorization: `Bearer ${getAtk()}` } + const res = await request("identity", "/api/users/me", { + headers: { Authorization: `Bearer ${await getAtk()}` } }) if (res.status !== 200) { diff --git a/src/views/auth/sign-in.vue b/src/views/auth/sign-in.vue new file mode 100644 index 0000000..7f7388b --- /dev/null +++ b/src/views/auth/sign-in.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/views/auth/sign-up.vue b/src/views/auth/sign-up.vue new file mode 100644 index 0000000..eddf9e7 --- /dev/null +++ b/src/views/auth/sign-up.vue @@ -0,0 +1,162 @@ + + + + +