From 142e7c3434906be662e1c89d56aadfe05e98c998 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 12 Aug 2024 20:53:03 +0800 Subject: [PATCH 1/2] :wastebasket: Clean up code --- .idea/dataSources.local.xml | 2 +- .../723637bc-6ce3-4bbe-afb3-d88730c75a1b.xml | 310 ++++++------- .../74bcf3ef-a2b9-435b-b9e5-f32902a33b25.xml | 410 +++++++++--------- .idea/workspace.xml | 115 +++-- Dockerfile | 9 - go.mod | 2 +- go.sum | 2 + settings.toml | 2 - web/.eslintrc.cjs | 18 - web/.gitignore | 32 -- web/.prettierrc.json | 8 - web/.vite/deps/_metadata.json | 85 ---- web/.vite/deps/package.json | 3 - web/README.md | 39 -- web/bun.lockb | Bin 155486 -> 0 bytes web/env.d.ts | 1 - web/index.html | 13 - web/package.json | 45 -- web/public/favicon.png | Bin 77150 -> 0 bytes web/src/assets/utils.css | 14 - web/src/components/Copyright.vue | 6 - web/src/components/GoUseSolian.vue | 19 - web/src/components/NotificationList.vue | 79 ---- web/src/components/UserMenu.vue | 53 --- .../components/admin/UserAssignPermsPanel.vue | 165 ------- web/src/components/admin/UserDetailPanel.vue | 47 -- web/src/components/admin/UserFactorPanel.vue | 74 ---- web/src/components/auth/Authenticate.vue | 65 --- .../components/auth/AuthenticateCompleted.vue | 67 --- web/src/components/auth/CallbackNotify.vue | 16 - web/src/components/auth/FactorApplicator.vue | 93 ---- web/src/components/auth/FactorPicker.vue | 88 ---- web/src/components/navigation/AppBar.vue | 52 --- web/src/index.vue | 5 - web/src/layouts/administrator.vue | 30 -- web/src/layouts/master.vue | 22 - web/src/layouts/user-center.vue | 30 -- web/src/main.ts | 54 --- web/src/router/index.ts | 116 ----- web/src/scripts/request.ts | 3 - web/src/stores/notifications.ts | 67 --- web/src/stores/userinfo.ts | 54 --- web/src/views/admin/dashboard.vue | 51 --- web/src/views/admin/users.vue | 142 ------ web/src/views/auth/authorize.vue | 189 -------- web/src/views/auth/claims.ts | 13 - web/src/views/auth/sign-in.vue | 85 ---- web/src/views/auth/sign-up.vue | 162 ------- web/src/views/dashboard.vue | 77 ---- web/src/views/flow/confirm.vue | 104 ----- web/src/views/flow/password-reset.vue | 122 ------ web/src/views/personalize.vue | 157 ------- web/src/views/security.vue | 197 --------- web/tsconfig.app.json | 14 - web/tsconfig.json | 11 - web/tsconfig.node.json | 13 - web/uno.config.ts | 5 - web/vite.config.ts | 27 -- 58 files changed, 451 insertions(+), 3233 deletions(-) delete mode 100755 web/.eslintrc.cjs delete mode 100755 web/.gitignore delete mode 100755 web/.prettierrc.json delete mode 100644 web/.vite/deps/_metadata.json delete mode 100644 web/.vite/deps/package.json delete mode 100755 web/README.md delete mode 100755 web/bun.lockb delete mode 100755 web/env.d.ts delete mode 100755 web/index.html delete mode 100755 web/package.json delete mode 100755 web/public/favicon.png delete mode 100755 web/src/assets/utils.css delete mode 100755 web/src/components/Copyright.vue delete mode 100644 web/src/components/GoUseSolian.vue delete mode 100755 web/src/components/NotificationList.vue delete mode 100755 web/src/components/UserMenu.vue delete mode 100644 web/src/components/admin/UserAssignPermsPanel.vue delete mode 100644 web/src/components/admin/UserDetailPanel.vue delete mode 100644 web/src/components/admin/UserFactorPanel.vue delete mode 100755 web/src/components/auth/Authenticate.vue delete mode 100644 web/src/components/auth/AuthenticateCompleted.vue delete mode 100755 web/src/components/auth/CallbackNotify.vue delete mode 100755 web/src/components/auth/FactorApplicator.vue delete mode 100755 web/src/components/auth/FactorPicker.vue delete mode 100644 web/src/components/navigation/AppBar.vue delete mode 100755 web/src/index.vue delete mode 100644 web/src/layouts/administrator.vue delete mode 100755 web/src/layouts/master.vue delete mode 100755 web/src/layouts/user-center.vue delete mode 100755 web/src/main.ts delete mode 100755 web/src/router/index.ts delete mode 100755 web/src/scripts/request.ts delete mode 100755 web/src/stores/notifications.ts delete mode 100755 web/src/stores/userinfo.ts delete mode 100644 web/src/views/admin/dashboard.vue delete mode 100644 web/src/views/admin/users.vue delete mode 100755 web/src/views/auth/authorize.vue delete mode 100755 web/src/views/auth/claims.ts delete mode 100755 web/src/views/auth/sign-in.vue delete mode 100755 web/src/views/auth/sign-up.vue delete mode 100755 web/src/views/dashboard.vue delete mode 100755 web/src/views/flow/confirm.vue delete mode 100755 web/src/views/flow/password-reset.vue delete mode 100755 web/src/views/personalize.vue delete mode 100755 web/src/views/security.vue delete mode 100755 web/tsconfig.app.json delete mode 100755 web/tsconfig.json delete mode 100755 web/tsconfig.node.json delete mode 100755 web/uno.config.ts delete mode 100755 web/vite.config.ts diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml index 6bea2b4..9e885e4 100644 --- a/.idea/dataSources.local.xml +++ b/.idea/dataSources.local.xml @@ -1,6 +1,6 @@ - + " diff --git a/.idea/dataSources/723637bc-6ce3-4bbe-afb3-d88730c75a1b.xml b/.idea/dataSources/723637bc-6ce3-4bbe-afb3-d88730c75a1b.xml index 79223f4..c4e5736 100644 --- a/.idea/dataSources/723637bc-6ce3-4bbe-afb3-d88730c75a1b.xml +++ b/.idea/dataSources/723637bc-6ce3-4bbe-afb3-d88730c75a1b.xml @@ -1,6 +1,6 @@ - + mdy 1||-9223372036854775808|c|G @@ -4851,115 +4851,115 @@ true posixrules pg_database_owner - bigint|0s 16396 1 1 747 + bigint|0s postgres - bigint|0s 17069 1 1 3790 + bigint|0s postgres - bigint|0s 16981 1 1 1416 + bigint|0s postgres - bigint|0s 16402 1 1 752 + bigint|0s postgres - bigint|0s 16408 1 1 757 + bigint|0s postgres - bigint|0s 16414 1 1 762 + bigint|0s postgres - bigint|0s 16426 1 1 772 + bigint|0s postgres - bigint|0s 16438 1 1 782 + bigint|0s postgres - bigint|0s 16444 1 1 787 + bigint|0s postgres - bigint|0s 16450 1 1 792 + bigint|0s postgres - bigint|0s 16456 1 1 797 + bigint|0s postgres - bigint|0s 17805 1 1 25805 + bigint|0s postgres - bigint|0s 18214 1 1 39862 + bigint|0s postgres - bigint|0s 18203 1 1 39859 + bigint|0s postgres @@ -5048,66 +5048,66 @@ true posixrules postgres
- bigint|0s nextval('identity_account_contacts_id_seq'::regclass) 1 1 800 + bigint|0s 16396 20 - timestamp with time zone|0s 2 745 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 745 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 745 + timestamp with time zone|0s 1184 - smallint|0s 5 745 + smallint|0s 21 - text|0s 6 745 + text|0s 25 - boolean|0s 7 745 + boolean|0s 16 - boolean|0s 8 745 + boolean|0s 16 - timestamp with time zone|0s 9 745 + timestamp with time zone|0s 1184 - bigint|0s 10 745 + bigint|0s 20 @@ -5176,54 +5176,54 @@ true posixrules 17778 - bigint|0s nextval('identity_account_friendships_id_seq'::regclass) 1 1 3790 + bigint|0s 17069 20 - timestamp with time zone|0s 2 3790 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 3790 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 3790 + timestamp with time zone|0s 1184 - bigint|0s 5 3790 + bigint|0s 20 - bigint|0s 6 3790 + bigint|0s 20 - smallint|0s 7 3790 + smallint|0s 21 - bigint|0s 8 7471 + bigint|0s 20 @@ -5281,60 +5281,60 @@ true posixrules 17074 - bigint|0s nextval('identity_account_pages_id_seq'::regclass) 1 1 1416 + bigint|0s 16981 20 - timestamp with time zone|0s 2 1416 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 1416 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 1416 + timestamp with time zone|0s 1184 - text|0s 5 1416 + text|0s 25 - text|0s 6 1416 + text|0s 25 - text|0s 7 1416 + text|0s 25 - jsonb|0s 8 1416 + jsonb|0s 3802 - bigint|0s 9 1416 + bigint|0s 20 @@ -5378,60 +5378,60 @@ true posixrules 16988 - bigint|0s nextval('identity_account_profiles_id_seq'::regclass) 1 1 801 + bigint|0s 16402 20 - timestamp with time zone|0s 2 750 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 750 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 750 + timestamp with time zone|0s 1184 - text|0s 5 750 + text|0s 25 - text|0s 6 750 + text|0s 25 - bigint|0s 7 750 + bigint|0s 20 - timestamp with time zone|0s 8 750 + timestamp with time zone|0s 1184 - bigint|0s 9 750 + bigint|0s 20 @@ -5475,72 +5475,72 @@ true posixrules 16470 - bigint|0s nextval('identity_accounts_id_seq'::regclass) 1 1 802 + bigint|0s 16408 20 - timestamp with time zone|0s 2 755 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 755 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 755 + timestamp with time zone|0s 1184 - text|0s 5 755 + text|0s 25 - text|0s 6 755 + text|0s 25 - text|0s 7 755 + text|0s 25 - text|0s 8 755 + text|0s 25 - timestamp with time zone|0s 9 755 + timestamp with time zone|0s 1184 - bigint|0s 10 755 + bigint|0s 20 - text|0s 11 755 + text|0s 25 @@ -5595,66 +5595,66 @@ true posixrules 17757 - bigint|0s nextval('identity_action_events_id_seq'::regclass) 1 1 803 + bigint|0s 16414 20 - timestamp with time zone|0s 2 760 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 760 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 760 + timestamp with time zone|0s 1184 - text|0s 5 760 + text|0s 25 - text|0s 6 760 + text|0s 25 - text|0s 7 760 + text|0s 25 - text|0s 8 760 + text|0s 25 - text|0s 9 760 + text|0s 25 - bigint|0s 10 760 + bigint|0s 20 @@ -5698,54 +5698,54 @@ true posixrules 16474 - bigint|0s nextval('identity_auth_factors_id_seq'::regclass) 1 1 805 + bigint|0s 16426 20 - timestamp with time zone|0s 2 770 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 770 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 770 + timestamp with time zone|0s 1184 - smallint|0s 5 770 + smallint|0s 21 - text|0s 6 770 + text|0s 25 - jsonb|0s 7 770 + jsonb|0s 3802 - bigint|0s 8 770 + bigint|0s 20 @@ -5789,120 +5789,120 @@ true posixrules 16478 - bigint|0s nextval('passport_auth_tickets_id_seq'::regclass) 1 1 25805 + bigint|0s 17805 20 - timestamp with time zone|0s 2 25805 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 25805 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 25805 + timestamp with time zone|0s 1184 - text|0s 5 25805 + text|0s 25 - text|0s 6 25805 + text|0s 25 - text|0s 7 25805 + text|0s 25 - boolean|0s 8 25805 + boolean|0s 16 - boolean|0s 9 25805 + boolean|0s 16 - jsonb|0s 10 25805 + jsonb|0s 3802 - jsonb|0s 11 25805 + jsonb|0s 3802 - text|0s 12 25805 + text|0s 25 - text|0s 13 25805 + text|0s 25 - text|0s 14 25805 + text|0s 25 - timestamp with time zone|0s 15 25805 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 16 25805 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 17 25805 + timestamp with time zone|0s 1184 - bigint|0s 18 25805 + bigint|0s 20 - bigint|0s 19 25805 + bigint|0s 20 @@ -5942,54 +5942,54 @@ true posixrules 17812 - bigint|0s nextval('identity_magic_tokens_id_seq'::regclass) 1 1 807 + bigint|0s 16438 20 - timestamp with time zone|0s 2 780 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 780 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 780 + timestamp with time zone|0s 1184 - text|0s 5 780 + text|0s 25 - smallint|0s 6 780 + smallint|0s 21 - bigint|0s 7 780 + bigint|0s 20 - timestamp with time zone|0s 8 780 + timestamp with time zone|0s 1184 @@ -6033,54 +6033,54 @@ true posixrules 16482 - bigint|0s nextval('identity_notification_subscribers_id_seq'::regclass) 1 1 808 + bigint|0s 16444 20 - timestamp with time zone|0s 2 785 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 785 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 785 + timestamp with time zone|0s 1184 - text|0s 5 785 + text|0s 25 - text|0s 6 785 + text|0s 25 - text|0s 7 785 + text|0s 25 - bigint|0s 8 785 + bigint|0s 20 @@ -6149,72 +6149,72 @@ true posixrules 17848 - bigint|0s nextval('identity_notifications_id_seq'::regclass) 1 1 809 + bigint|0s 16450 20 - timestamp with time zone|0s 2 790 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 790 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 790 + timestamp with time zone|0s 1184 - text|0s 5 790 + text|0s 25 - text|0s 6 790 + text|0s 25 - jsonb|0s 7 790 + jsonb|0s 3802 - boolean|0s 8 790 + boolean|0s 16 - timestamp with time zone|0s 9 790 + timestamp with time zone|0s 1184 - bigint|0s 10 790 + bigint|0s 20 - bigint|0s 11 790 + bigint|0s 20 @@ -6272,48 +6272,48 @@ true posixrules 16486 - bigint|0s nextval('passport_realm_members_id_seq'::regclass) 1 1 39862 + bigint|0s 18214 20 - timestamp with time zone|0s 2 39862 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 39862 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 39862 + timestamp with time zone|0s 1184 - bigint|0s 5 39862 + bigint|0s 20 - bigint|0s 6 39862 + bigint|0s 20 - bigint|0s 7 39862 + bigint|0s 20 @@ -6360,66 +6360,66 @@ true posixrules 18219 - bigint|0s nextval('passport_realms_id_seq'::regclass) 1 1 39859 + bigint|0s 18203 20 - timestamp with time zone|0s 2 39859 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 39859 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 39859 + timestamp with time zone|0s 1184 - text|0s 5 39859 + text|0s 25 - text|0s 6 39859 + text|0s 25 - text|0s 7 39859 + text|0s 25 - boolean|0s 8 39859 + boolean|0s 16 - boolean|0s 9 39859 + boolean|0s 16 - bigint|0s 10 39859 + bigint|0s 20 @@ -6455,78 +6455,78 @@ true posixrules 18210 - bigint|0s nextval('identity_third_clients_id_seq'::regclass) 1 1 810 + bigint|0s 16456 20 - timestamp with time zone|0s 2 795 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 795 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 795 + timestamp with time zone|0s 1184 - text|0s 5 795 + text|0s 25 - text|0s 6 795 + text|0s 25 - text|0s 7 795 + text|0s 25 - text|0s 8 795 + text|0s 25 - jsonb|0s 9 795 + jsonb|0s 3802 - jsonb|0s 10 795 + jsonb|0s 3802 - boolean|0s 11 795 + boolean|0s 16 - bigint|0s 12 795 + bigint|0s 20 diff --git a/.idea/dataSources/74bcf3ef-a2b9-435b-b9e5-f32902a33b25.xml b/.idea/dataSources/74bcf3ef-a2b9-435b-b9e5-f32902a33b25.xml index e7c8c61..83da32f 100644 --- a/.idea/dataSources/74bcf3ef-a2b9-435b-b9e5-f32902a33b25.xml +++ b/.idea/dataSources/74bcf3ef-a2b9-435b-b9e5-f32902a33b25.xml @@ -1,6 +1,6 @@ - + mdy 1||-9223372036854775808|c|G @@ -4256,147 +4256,147 @@ false Zulu pg_database_owner - bigint|0s 37369 1 1 6233 + bigint|0s littlesheep - bigint|0s 47483 1 1 10189 + bigint|0s postgres - bigint|0s 47473 1 1 10185 + bigint|0s postgres - bigint|0s 37339 1 1 6229 + bigint|0s littlesheep - bigint|0s 47423 1 1 10149 + bigint|0s postgres - bigint|0s 37313 1 1 6224 + bigint|0s littlesheep - bigint|0s 37474 1 1 6247 + bigint|0s littlesheep - bigint|0s 47413 1 1 10006 + bigint|0s postgres - bigint|0s 37324 1 1 6227 + bigint|0s littlesheep - bigint|0s 37526 1 1 6259 + bigint|0s littlesheep - bigint|0s 47120 1 1 8941 + bigint|0s postgres - bigint|0s 37459 1 1 6245 + bigint|0s littlesheep - bigint|0s 37509 1 1 6251 + bigint|0s littlesheep - bigint|0s 37489 1 1 6249 + bigint|0s littlesheep - bigint|0s 37562 1 1 6430 + bigint|0s littlesheep - bigint|0s 37551 1 1 6427 + bigint|0s littlesheep - bigint|0s 47321 1 1 9536 + bigint|0s postgres - bigint|0s 37403 1 1 6238 + bigint|0s littlesheep @@ -4508,66 +4508,66 @@ false Zulu littlesheep
- bigint|0s nextval('passport_account_contacts_id_seq'::regclass) 1 1 6233 + bigint|0s 37369 20 - timestamp with time zone|0s 2 6233 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6233 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6233 + timestamp with time zone|0s 1184 - smallint|0s 5 6233 + smallint|0s 21 - text|0s 6 6233 + text|0s 25 - boolean|0s 7 6233 + boolean|0s 16 - boolean|0s 8 6233 + boolean|0s 16 - timestamp with time zone|0s 9 6233 + timestamp with time zone|0s 1184 - bigint|0s 10 6233 + bigint|0s 20 @@ -4610,42 +4610,42 @@ false Zulu 37376 - bigint|0s nextval('passport_account_group_members_id_seq'::regclass) 1 1 10189 + bigint|0s 47483 20 - timestamp with time zone|0s 2 10189 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 10189 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 10189 + timestamp with time zone|0s 1184 - bigint|0s 5 10189 + bigint|0s 20 - bigint|0s 6 10189 + bigint|0s 20 @@ -4685,42 +4685,42 @@ false Zulu 47488 - bigint|0s nextval('passport_account_groups_id_seq'::regclass) 1 1 10185 + bigint|0s 47473 20 - timestamp with time zone|0s 2 10185 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 10185 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 10185 + timestamp with time zone|0s 1184 - text|0s 5 10185 + text|0s 25 - jsonb|0s 6 10185 + jsonb|0s 3802 @@ -4746,66 +4746,66 @@ false Zulu 47480 - bigint|0s nextval('passport_account_profiles_id_seq'::regclass) 1 1 6229 + bigint|0s 37339 20 - timestamp with time zone|0s 2 6229 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6229 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6229 + timestamp with time zone|0s 1184 - text|0s 5 6229 + text|0s 25 - text|0s 6 6229 + text|0s 25 - bigint|0s 7 6229 + bigint|0s 20 - timestamp with time zone|0s 8 6229 + timestamp with time zone|0s 1184 - bigint|0s 9 6229 + bigint|0s 20 - timestamp with time zone|0s 10 9548 + timestamp with time zone|0s 1184 @@ -4838,54 +4838,54 @@ false Zulu 37346 - bigint|0s nextval('passport_account_relationships_id_seq'::regclass) 1 1 10149 + bigint|0s 47423 20 - timestamp with time zone|0s 2 10149 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 10149 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 10149 + timestamp with time zone|0s 1184 - bigint|0s 5 10149 + bigint|0s 20 - bigint|0s 6 10149 + bigint|0s 20 - smallint|0s 7 10149 + smallint|0s 21 - jsonb|0s 8 10149 + jsonb|0s 3802 @@ -4925,84 +4925,84 @@ false Zulu 47430 - bigint|0s nextval('passport_accounts_id_seq'::regclass) 1 1 6224 + bigint|0s 37313 20 - timestamp with time zone|0s 2 6224 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6224 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6224 + timestamp with time zone|0s 1184 - text|0s 5 6224 + text|0s 25 - text|0s 6 6224 + text|0s 25 - text|0s 7 6224 + text|0s 25 - timestamp with time zone|0s 10 6224 + timestamp with time zone|0s 1184 - bigint|0s 11 6224 + bigint|0s 20 - jsonb|0s 12 7177 + jsonb|0s 3802 - bigint|0s 13 7431 + bigint|0s 20 - bigint|0s 14 7432 + bigint|0s 20 - timestamp with time zone|0s 15 10120 + timestamp with time zone|0s 1184 @@ -5038,66 +5038,66 @@ false Zulu 37320 - bigint|0s nextval('passport_action_events_id_seq'::regclass) 1 1 6247 + bigint|0s 37474 20 - timestamp with time zone|0s 2 6247 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6247 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6247 + timestamp with time zone|0s 1184 - text|0s 5 6247 + text|0s 25 - text|0s 6 6247 + text|0s 25 - text|0s 7 6247 + text|0s 25 - text|0s 8 6247 + text|0s 25 - text|0s 9 6247 + text|0s 25 - bigint|0s 10 6247 + bigint|0s 20 @@ -5130,60 +5130,60 @@ false Zulu 37481 - bigint|0s nextval('passport_audit_records_id_seq'::regclass) 1 1 10006 + bigint|0s 47413 20 - timestamp with time zone|0s 2 10006 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 10006 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 10006 + timestamp with time zone|0s 1184 - text|0s 5 10006 + text|0s 25 - jsonb|0s 6 10006 + jsonb|0s 3802 - text|0s 7 10006 + text|0s 25 - text|0s 8 10006 + text|0s 25 - bigint|0s 9 10006 + bigint|0s 20 @@ -5209,54 +5209,54 @@ false Zulu 47420 - bigint|0s nextval('passport_auth_factors_id_seq'::regclass) 1 1 6227 + bigint|0s 37324 20 - timestamp with time zone|0s 2 6227 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6227 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6227 + timestamp with time zone|0s 1184 - smallint|0s 5 6227 + smallint|0s 21 - text|0s 6 6227 + text|0s 25 - jsonb|0s 7 6227 + jsonb|0s 3802 - bigint|0s 8 6227 + bigint|0s 20 @@ -5289,120 +5289,120 @@ false Zulu 37331 - bigint|0s nextval('passport_auth_tickets_id_seq'::regclass) 1 1 6259 + bigint|0s 37526 20 - timestamp with time zone|0s 2 6259 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6259 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6259 + timestamp with time zone|0s 1184 - text|0s 5 6259 + text|0s 25 - text|0s 6 6259 + text|0s 25 - text|0s 7 6259 + text|0s 25 - boolean|0s 8 6259 + boolean|0s 16 - boolean|0s 9 6259 + boolean|0s 16 - jsonb|0s 10 6259 + jsonb|0s 3802 - jsonb|0s 11 6259 + jsonb|0s 3802 - text|0s 12 6259 + text|0s 25 - text|0s 13 6259 + text|0s 25 - text|0s 14 6259 + text|0s 25 - timestamp with time zone|0s 15 6259 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 16 6259 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 17 6259 + timestamp with time zone|0s 1184 - bigint|0s 18 6259 + bigint|0s 20 - bigint|0s 19 6259 + bigint|0s 20 @@ -5449,60 +5449,60 @@ false Zulu 37533 - bigint|0s nextval('passport_badges_id_seq'::regclass) 1 1 8941 + bigint|0s 47120 20 - timestamp with time zone|0s 2 8941 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 8941 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 8941 + timestamp with time zone|0s 1184 - text|0s 5 8941 + text|0s 25 - text|0s 6 8941 + text|0s 25 - text|0s 7 8941 + text|0s 25 - bigint|0s 8 8941 + bigint|0s 20 - jsonb|0s 9 8945 + jsonb|0s 3802 @@ -5535,60 +5535,60 @@ false Zulu 47127 - bigint|0s nextval('passport_magic_tokens_id_seq'::regclass) 1 1 6245 + bigint|0s 37459 20 - timestamp with time zone|0s 2 6245 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6245 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6245 + timestamp with time zone|0s 1184 - text|0s 5 6245 + text|0s 25 - smallint|0s 6 6245 + smallint|0s 21 - bigint|0s 7 6245 + bigint|0s 20 - timestamp with time zone|0s 8 6245 + timestamp with time zone|0s 1184 - bigint|0s 9 9525 + bigint|0s 20 @@ -5621,60 +5621,60 @@ false Zulu 37466 - bigint|0s nextval('passport_notification_subscribers_id_seq'::regclass) 1 1 6251 + bigint|0s 37509 20 - timestamp with time zone|0s 2 6251 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6251 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6251 + timestamp with time zone|0s 1184 - text|0s 5 6251 + text|0s 25 - text|0s 6 6251 + text|0s 25 - text|0s 7 6251 + text|0s 25 - bigint|0s 8 6251 + bigint|0s 20 - text|0s 9 7011 + text|0s 25 @@ -5717,126 +5717,126 @@ false Zulu 37516 - bigint|0s nextval('passport_notifications_id_seq'::regclass) 1 1 6249 + bigint|0s 37489 20 - timestamp with time zone|0s 2 6249 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6249 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6249 + timestamp with time zone|0s 1184 - text|0s 5 6249 + text|0s 25 - text|0s 6 6249 + text|0s 25 - jsonb|0s 7 6249 + jsonb|0s 3802 - boolean|0s 8 6249 + boolean|0s 16 - timestamp with time zone|0s 9 6249 + timestamp with time zone|0s 1184 - bigint|0s 10 6249 + bigint|0s 20 - bigint|0s 11 6249 + bigint|0s 20 - text|0s 12 8943 + text|0s 25 - jsonb|0s 13 8944 + jsonb|0s 3802 - text|0s 14 10152 + text|0s 25 - text|0s 15 10153 + text|0s 25 - text|0s 16 10154 + text|0s 25 - text|0s 17 10155 + text|0s 25 - bigint|0s 18 10156 + bigint|0s 20 - text|0s 19 10187 + text|0s 25 - text|0s 20 10188 + text|0s 25 @@ -5876,48 +5876,48 @@ false Zulu 37496 - bigint|0s nextval('passport_realm_members_id_seq'::regclass) 1 1 6430 + bigint|0s 37562 20 - timestamp with time zone|0s 2 6430 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6430 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6430 + timestamp with time zone|0s 1184 - bigint|0s 5 6430 + bigint|0s 20 - bigint|0s 6 6430 + bigint|0s 20 - bigint|0s 7 6430 + bigint|0s 20 @@ -5971,66 +5971,66 @@ false Zulu 37567 - bigint|0s nextval('passport_realms_id_seq'::regclass) 1 1 6427 + bigint|0s 37551 20 - timestamp with time zone|0s 2 6427 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6427 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6427 + timestamp with time zone|0s 1184 - text|0s 5 6427 + text|0s 25 - text|0s 6 6427 + text|0s 25 - text|0s 7 6427 + text|0s 25 - boolean|0s 8 6427 + boolean|0s 16 - boolean|0s 9 6427 + boolean|0s 16 - bigint|0s 10 6427 + bigint|0s 20 @@ -6066,72 +6066,72 @@ false Zulu 37558 - bigint|0s nextval('passport_statuses_id_seq'::regclass) 1 1 9536 + bigint|0s 47321 20 - timestamp with time zone|0s 2 9536 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 9536 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 9536 + timestamp with time zone|0s 1184 - text|0s 5 9536 + text|0s 25 - text|0s 6 9536 + text|0s 25 - smallint|0s 7 9536 + smallint|0s 21 - boolean|0s 8 9536 + boolean|0s 16 - boolean|0s 9 9536 + boolean|0s 16 - bigint|0s 10 9536 + bigint|0s 20 - timestamp with time zone|0s 11 9549 + timestamp with time zone|0s 1184 @@ -6164,78 +6164,78 @@ false Zulu 47328 - bigint|0s nextval('passport_third_clients_id_seq'::regclass) 1 1 6238 + bigint|0s 37403 20 - timestamp with time zone|0s 2 6238 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 3 6238 + timestamp with time zone|0s 1184 - timestamp with time zone|0s 4 6238 + timestamp with time zone|0s 1184 - text|0s 5 6238 + text|0s 25 - text|0s 6 6238 + text|0s 25 - text|0s 7 6238 + text|0s 25 - text|0s 8 6238 + text|0s 25 - jsonb|0s 9 6238 + jsonb|0s 3802 - jsonb|0s 10 6238 + jsonb|0s 3802 - boolean|0s 11 6238 + boolean|0s 16 - bigint|0s 12 6238 + bigint|0s 20 diff --git a/.idea/workspace.xml b/.idea/workspace.xml index f21eba0..6f64fc4 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,66 @@
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - { - "keyToString": { - "DefaultGoTemplateProperty": "Go File", - "Go Build.Backend.executor": "Run", - "Go 构建.Backend.executor": "Run", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.go.formatter.settings.were.checked": "true", - "RunOnceActivity.go.migrated.go.modules.settings": "true", - "RunOnceActivity.go.modules.automatic.dependencies.download": "true", - "RunOnceActivity.go.modules.go.list.on.any.changes.was.set": "true", - "git-widget-placeholder": "master", - "go.import.settings.migrated": "true", - "go.sdk.automatically.set": "true", - "last_opened_file_path": "/Users/littlesheep/Documents/Projects/Hydrogen/Passport/web/src/components/admin", - "node.js.detected.package.eslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "run.code.analysis.last.selected.profile": "pProject Default", - "settings.editor.selected.configurable": "preferences.pluginManager", - "ts.external.directory.path": "/Users/littlesheep/Documents/Projects/Hydrogen/Passport/web/node_modules/typescript/lib", - "vue.rearranger.settings.migration": "true" + +}]]> @@ -109,8 +168,8 @@ - diff --git a/Dockerfile b/Dockerfile index 048ec55..af19f58 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,14 @@ # Building Backend FROM golang:alpine as passport-server -RUN apk add nodejs npm - WORKDIR /source COPY . . - -WORKDIR /source/web -RUN npm install -RUN npm run build - -WORKDIR /source RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -buildvcs -o /dist ./pkg/main.go # Runtime FROM golang:alpine COPY --from=passport-server /dist /passport/server -COPY --from=passport-server /source/web/dist /passport/web EXPOSE 8444 diff --git a/go.mod b/go.mod index 51ed962..27d686b 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21.6 toolchain go1.22.1 require ( - git.solsynth.dev/hydrogen/dealer v0.0.0-20240721055146-d74cdddbaf49 + git.solsynth.dev/hydrogen/dealer v0.0.0-20240801060523-8cf0feb09a27 github.com/go-playground/validator/v10 v10.17.0 github.com/gofiber/fiber/v2 v2.52.4 github.com/golang-jwt/jwt/v5 v5.2.0 diff --git a/go.sum b/go.sum index 53ebc75..483be55 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ git.solsynth.dev/hydrogen/dealer v0.0.0-20240721055146-d74cdddbaf49 h1:DMmCBcnCO0qcER/p4EQ04CmWleb4YI3Br6QK5F8Q628= git.solsynth.dev/hydrogen/dealer v0.0.0-20240721055146-d74cdddbaf49/go.mod h1:IZd94qZZIj+MO9EqjGDqnAD9nWurlNPyhVPKemAY5lw= +git.solsynth.dev/hydrogen/dealer v0.0.0-20240801060523-8cf0feb09a27 h1:KQzeOI2ou240SXiL1hxMYDvZpYKtCFblCGDusFyGyBY= +git.solsynth.dev/hydrogen/dealer v0.0.0-20240801060523-8cf0feb09a27/go.mod h1:IZd94qZZIj+MO9EqjGDqnAD9nWurlNPyhVPKemAY5lw= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= diff --git a/settings.toml b/settings.toml index bca1738..821d584 100644 --- a/settings.toml +++ b/settings.toml @@ -1,8 +1,6 @@ id = "passport01" name = "Solarpass" -frontend_app = "web/dist" - bind = "0.0.0.0:8444" grpc_bind = "0.0.0.0:7444" domain = "localhost" diff --git a/web/.eslintrc.cjs b/web/.eslintrc.cjs deleted file mode 100755 index 11cf3e4..0000000 --- a/web/.eslintrc.cjs +++ /dev/null @@ -1,18 +0,0 @@ -/* eslint-env node */ -require("@rushstack/eslint-patch/modern-module-resolution") - -module.exports = { - root: true, - extends: [ - "plugin:vue/vue3-essential", - "eslint:recommended", - "@vue/eslint-config-typescript", - "@vue/eslint-config-prettier/skip-formatting", - ], - parserOptions: { - ecmaVersion: "latest", - }, - rules: { - "vue/multi-word-component-names": "off", - } -} diff --git a/web/.gitignore b/web/.gitignore deleted file mode 100755 index 3740343..0000000 --- a/web/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -.DS_Store -dist -dist-ssr -coverage -*.local - -/cypress/videos/ -/cypress/screenshots/ - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - -*.tsbuildinfo - -.vite \ No newline at end of file diff --git a/web/.prettierrc.json b/web/.prettierrc.json deleted file mode 100755 index 6404b10..0000000 --- a/web/.prettierrc.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/prettierrc", - "semi": false, - "tabWidth": 2, - "singleQuote": false, - "printWidth": 120, - "trailingComma": "all" -} diff --git a/web/.vite/deps/_metadata.json b/web/.vite/deps/_metadata.json deleted file mode 100644 index d806bde..0000000 --- a/web/.vite/deps/_metadata.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "hash": "8b6d0833", - "configHash": "9db2f33b", - "lockfileHash": "f7feab31", - "browserHash": "0decaeb8", - "optimized": { - "vue": { - "src": "../../node_modules/vue/dist/vue.runtime.esm-bundler.js", - "file": "vue.js", - "fileHash": "1913939b", - "needsInterop": false - }, - "pinia": { - "src": "../../node_modules/pinia/dist/pinia.mjs", - "file": "pinia.js", - "fileHash": "4c101c90", - "needsInterop": false - }, - "vuetify": { - "src": "../../node_modules/vuetify/lib/framework.mjs", - "file": "vuetify.js", - "fileHash": "3ab2542c", - "needsInterop": false - }, - "vuetify/blueprints": { - "src": "../../node_modules/vuetify/lib/blueprints/index.mjs", - "file": "vuetify_blueprints.js", - "fileHash": "b34fe63c", - "needsInterop": false - }, - "vuetify/components": { - "src": "../../node_modules/vuetify/lib/components/index.mjs", - "file": "vuetify_components.js", - "fileHash": "42f8a374", - "needsInterop": false - }, - "vuetify/labs/components": { - "src": "../../node_modules/vuetify/lib/labs/components.mjs", - "file": "vuetify_labs_components.js", - "fileHash": "a46a672a", - "needsInterop": false - }, - "vuetify/directives": { - "src": "../../node_modules/vuetify/lib/directives/index.mjs", - "file": "vuetify_directives.js", - "fileHash": "66c34130", - "needsInterop": false - }, - "vue-router": { - "src": "../../node_modules/vue-router/dist/vue-router.mjs", - "file": "vue-router.js", - "fileHash": "56488480", - "needsInterop": false - } - }, - "chunks": { - "chunk-WKTZ3I3B": { - "file": "chunk-WKTZ3I3B.js" - }, - "chunk-XJKCW2PU": { - "file": "chunk-XJKCW2PU.js" - }, - "chunk-VFMM6PD2": { - "file": "chunk-VFMM6PD2.js" - }, - "chunk-XREPMAG4": { - "file": "chunk-XREPMAG4.js" - }, - "chunk-ZUZRGUJJ": { - "file": "chunk-ZUZRGUJJ.js" - }, - "chunk-V6X3YB3T": { - "file": "chunk-V6X3YB3T.js" - }, - "chunk-6CN2GOSH": { - "file": "chunk-6CN2GOSH.js" - }, - "chunk-AYVSL3LM": { - "file": "chunk-AYVSL3LM.js" - }, - "chunk-Q5PGHB6G": { - "file": "chunk-Q5PGHB6G.js" - } - } -} \ No newline at end of file diff --git a/web/.vite/deps/package.json b/web/.vite/deps/package.json deleted file mode 100644 index 3dbc1ca..0000000 --- a/web/.vite/deps/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/web/README.md b/web/README.md deleted file mode 100755 index bdb10ae..0000000 --- a/web/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# views - -This template should help get you started developing with Vue 3 in Vite. - -## Recommended IDE Setup - -[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). - -## Type Support for `.vue` Imports in TS - -TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. - -## Customize configuration - -See [Vite Configuration Reference](https://vitejs.dev/config/). - -## Project Setup - -```sh -npm install -``` - -### Compile and Hot-Reload for Development - -```sh -npm run dev -``` - -### Type-Check, Compile and Minify for Production - -```sh -npm run build -``` - -### Lint with [ESLint](https://eslint.org/) - -```sh -npm run lint -``` diff --git a/web/bun.lockb b/web/bun.lockb deleted file mode 100755 index 29dcf9b366a379396972b3cfde041d14d208486c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155486 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 diff --git a/web/index.html b/web/index.html deleted file mode 100755 index c61a7b4..0000000 --- a/web/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Solarpass - - -
- - - diff --git a/web/package.json b/web/package.json deleted file mode 100755 index 886e629..0000000 --- a/web/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "passport-web", - "version": "1.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "run-p type-check \"build-only {@}\" --", - "preview": "vite preview", - "build-only": "vite build", - "type-check": "vue-tsc --build --force", - "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", - "format": "prettier --write src/" - }, - "dependencies": { - "@fontsource/roboto": "^5.0.13", - "@mdi/font": "^7.4.47", - "@unocss/reset": "^0.61.0", - "dompurify": "^3.1.5", - "marked": "^12.0.2", - "pinia": "^2.1.7", - "universal-cookie": "^7.1.4", - "unocss": "^0.61.0", - "vue": "^3.4.30", - "vue-router": "^4.4.0", - "vuetify": "^3.6.10" - }, - "devDependencies": { - "@rushstack/eslint-patch": "^1.10.3", - "@tsconfig/node20": "^20.1.4", - "@types/dompurify": "^3.0.5", - "@types/node": "^20.14.8", - "@vitejs/plugin-vue": "^5.0.5", - "@vitejs/plugin-vue-jsx": "^3.1.0", - "@vue/eslint-config-prettier": "^8.0.0", - "@vue/eslint-config-typescript": "^12.0.0", - "@vue/tsconfig": "^0.5.1", - "eslint": "^8.57.0", - "eslint-plugin-vue": "^9.26.0", - "npm-run-all2": "^6.2.0", - "prettier": "^3.3.2", - "typescript": "^5.4.5", - "vite": "^5.3.1", - "vue-tsc": "^2.0.22" - } -} diff --git a/web/public/favicon.png b/web/public/favicon.png deleted file mode 100755 index 2ca2d074c6ca4713375dd395ae7153a1b99a9239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77150 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 -

- diff --git a/web/src/components/GoUseSolian.vue b/web/src/components/GoUseSolian.vue deleted file mode 100644 index 834cfc9..0000000 --- a/web/src/components/GoUseSolian.vue +++ /dev/null @@ -1,19 +0,0 @@ - \ No newline at end of file diff --git a/web/src/components/NotificationList.vue b/web/src/components/NotificationList.vue deleted file mode 100755 index 9dbaf39..0000000 --- a/web/src/components/NotificationList.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - diff --git a/web/src/components/UserMenu.vue b/web/src/components/UserMenu.vue deleted file mode 100755 index 4fe1467..0000000 --- a/web/src/components/UserMenu.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/web/src/components/admin/UserAssignPermsPanel.vue b/web/src/components/admin/UserAssignPermsPanel.vue deleted file mode 100644 index 8218150..0000000 --- a/web/src/components/admin/UserAssignPermsPanel.vue +++ /dev/null @@ -1,165 +0,0 @@ - - - diff --git a/web/src/components/admin/UserDetailPanel.vue b/web/src/components/admin/UserDetailPanel.vue deleted file mode 100644 index 41afbb0..0000000 --- a/web/src/components/admin/UserDetailPanel.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - - \ No newline at end of file diff --git a/web/src/components/admin/UserFactorPanel.vue b/web/src/components/admin/UserFactorPanel.vue deleted file mode 100644 index 3eebcb3..0000000 --- a/web/src/components/admin/UserFactorPanel.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - \ No newline at end of file diff --git a/web/src/components/auth/Authenticate.vue b/web/src/components/auth/Authenticate.vue deleted file mode 100755 index 6056427..0000000 --- a/web/src/components/auth/Authenticate.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - diff --git a/web/src/components/auth/AuthenticateCompleted.vue b/web/src/components/auth/AuthenticateCompleted.vue deleted file mode 100644 index 2f71ddc..0000000 --- a/web/src/components/auth/AuthenticateCompleted.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - \ No newline at end of file diff --git a/web/src/components/auth/CallbackNotify.vue b/web/src/components/auth/CallbackNotify.vue deleted file mode 100755 index d63c6d6..0000000 --- a/web/src/components/auth/CallbackNotify.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/web/src/components/auth/FactorApplicator.vue b/web/src/components/auth/FactorApplicator.vue deleted file mode 100755 index 26155f0..0000000 --- a/web/src/components/auth/FactorApplicator.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - diff --git a/web/src/components/auth/FactorPicker.vue b/web/src/components/auth/FactorPicker.vue deleted file mode 100755 index dde94fd..0000000 --- a/web/src/components/auth/FactorPicker.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - diff --git a/web/src/components/navigation/AppBar.vue b/web/src/components/navigation/AppBar.vue deleted file mode 100644 index fdfb806..0000000 --- a/web/src/components/navigation/AppBar.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - - - diff --git a/web/src/index.vue b/web/src/index.vue deleted file mode 100755 index 4f21c35..0000000 --- a/web/src/index.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/web/src/layouts/administrator.vue b/web/src/layouts/administrator.vue deleted file mode 100644 index 4d3c5d6..0000000 --- a/web/src/layouts/administrator.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - - - diff --git a/web/src/layouts/master.vue b/web/src/layouts/master.vue deleted file mode 100755 index fe42bd5..0000000 --- a/web/src/layouts/master.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - - - diff --git a/web/src/layouts/user-center.vue b/web/src/layouts/user-center.vue deleted file mode 100755 index 5a2ee15..0000000 --- a/web/src/layouts/user-center.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - - - \ No newline at end of file diff --git a/web/src/main.ts b/web/src/main.ts deleted file mode 100755 index b3665d3..0000000 --- a/web/src/main.ts +++ /dev/null @@ -1,54 +0,0 @@ -import "virtual:uno.css" - -import "./assets/utils.css" - -import { createApp } from "vue" -import { createPinia } from "pinia" - -import "vuetify/styles" -import { createVuetify } from "vuetify" -import { md3 } from "vuetify/blueprints" -import * as components from "vuetify/components" -import * as labsComponents from "vuetify/labs/components" -import * as directives from "vuetify/directives" - -import "@mdi/font/css/materialdesignicons.min.css" -import "@fontsource/roboto/latin.css" -import "@unocss/reset/tailwind.css" - -import index from "./index.vue" -import router from "./router" - -const app = createApp(index) - -app.use( - createVuetify({ - directives, - components: { - ...components, - ...labsComponents, - }, - blueprint: md3, - theme: { - defaultTheme: "original", - themes: { - original: { - colors: { - primary: "#4a5099", - secondary: "#2196f3", - accent: "#009688", - error: "#f44336", - warning: "#ff9800", - info: "#03a9f4", - success: "#4caf50", - }, - }, - }, - }, - }), -) - -app.use(createPinia()) -app.use(router) - -app.mount("#app") diff --git a/web/src/router/index.ts b/web/src/router/index.ts deleted file mode 100755 index 9aea2a8..0000000 --- a/web/src/router/index.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { createRouter, createWebHistory } from "vue-router" -import { useUserinfo } from "@/stores/userinfo" -import UserCenterLayout from "@/layouts/user-center.vue" -import AdministratorLayout from "@/layouts/administrator.vue" - -const router = createRouter({ - history: createWebHistory(import.meta.env.BASE_URL), - routes: [ - { - path: "/", - redirect: { name: "dashboard" }, - meta: { public: true }, - }, - { - path: "/users", - component: UserCenterLayout, - children: [ - { - path: "/me", - name: "dashboard", - component: () => import("@/views/dashboard.vue"), - meta: { title: "Your account" }, - }, - { - path: "/me/personalize", - name: "personalize", - component: () => import("@/views/personalize.vue"), - meta: { title: "Your personality" }, - }, - { - path: "/me/security", - name: "security", - component: () => import("@/views/security.vue"), - meta: { title: "Your security" }, - }, - ], - }, - { - path: "/", - children: [ - { - path: "/sign-in", - alias: ["/mfa"], - 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" }, - }, - { - path: "/authorize", - name: "oauth.authorize", - component: () => import("@/views/auth/authorize.vue"), - }, - ], - }, - { - path: "/flow", - children: [ - { - path: "confirm", - name: "callback.confirm", - component: () => import("@/views/flow/confirm.vue"), - meta: { public: true, title: "Confirm registration" }, - }, - { - path: "password-reset", - name: "callback.password-reset", - component: () => import("@/views/flow/password-reset.vue"), - meta: { public: true, title: "Reset password" }, - }, - ], - }, - { - path: "/admin", - component: AdministratorLayout, - children: [ - { - path: "", - name: "admin.dashboard", - component: () => import("@/views/admin/dashboard.vue"), - }, - { - path: "users", - name: "admin.users", - component: () => import("@/views/admin/users.vue"), - }, - ] - } - ], -}) - -router.beforeEach(async (to, from, next) => { - const id = useUserinfo() - if (!id.isReady) { - await id.readProfiles() - } - - if (to.meta.title) { - document.title = `Solarpass | ${to.meta.title}` - } else { - document.title = "Solarpass" - } - - if (!to.meta.public && !id.userinfo.isLoggedIn) { - next({ name: "auth.sign-in", query: { redirect_uri: to.fullPath } }) - } else { - next() - } -}) - -export default router diff --git a/web/src/scripts/request.ts b/web/src/scripts/request.ts deleted file mode 100755 index 3384bc4..0000000 --- a/web/src/scripts/request.ts +++ /dev/null @@ -1,3 +0,0 @@ -export async function request(input: string, init?: RequestInit) { - return await fetch(input, init) -} diff --git a/web/src/stores/notifications.ts b/web/src/stores/notifications.ts deleted file mode 100755 index 0a5ffa4..0000000 --- a/web/src/stores/notifications.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { defineStore } from "pinia" -import { ref } from "vue" -import { checkLoggedIn, getAtk } from "@/stores/userinfo" -import { request } from "@/scripts/request" - -export const useNotifications = defineStore("notifications", () => { - let socket: WebSocket - - const loading = ref(false) - - const notifications = ref([]) - const total = ref(0) - - async function list() { - loading.value = true - const res = await request( - "/api/notifications?" + - new URLSearchParams({ - take: (25).toString(), - offset: (0).toString(), - }), - { - headers: { Authorization: `Bearer ${getAtk()}` }, - }, - ) - if (res.status === 200) { - const data = await res.json() - notifications.value = data["data"] - total.value = data["count"] - } - loading.value = false - } - - function remove(idx: number) { - notifications.value.splice(idx, 1) - total.value-- - } - - async function connect() { - if (!(checkLoggedIn())) return - - const protocol = location.protocol.replace("http", "ws") - const uri = `${protocol}//${window.location.host}/api/ws` - - socket = new WebSocket(uri + `?tk=${getAtk() as string}`) - - socket.addEventListener("open", (event) => { - console.log("[NOTIFICATIONS] The listen websocket has been established... ", event.type) - }) - socket.addEventListener("close", (event) => { - console.warn("[NOTIFICATIONS] The listen websocket is disconnected... ", event.reason, event.code) - }) - socket.addEventListener("message", (event) => { - const data = JSON.parse(event.data) - if (data["w"] == "notifications.new") { - notifications.value.push(data["p"]) - total.value++ - } - }) - } - - function disconnect() { - socket.close() - } - - return { loading, notifications, total, list, remove, connect, disconnect } -}) \ No newline at end of file diff --git a/web/src/stores/userinfo.ts b/web/src/stores/userinfo.ts deleted file mode 100755 index 048b03f..0000000 --- a/web/src/stores/userinfo.ts +++ /dev/null @@ -1,54 +0,0 @@ -import Cookie from "universal-cookie" -import { defineStore } from "pinia" -import { ref } from "vue" -import { request } from "@/scripts/request" - -export interface Userinfo { - isLoggedIn: boolean - displayName: string - data: any -} - -export const defaultUserinfo: Userinfo = { - isLoggedIn: false, - displayName: "Citizen", - data: null, -} - -export function getAtk(): string { - return new Cookie().get("__hydrogen_atk") -} - -export function checkLoggedIn(): boolean { - return new Cookie().get("__hydrogen_rtk") -} - -export const useUserinfo = defineStore("userinfo", () => { - const userinfo = ref(defaultUserinfo) - const isReady = ref(false) - - async function readProfiles() { - if (!checkLoggedIn()) { - isReady.value = true - } - - const res = await request("/api/users/me", { - headers: { Authorization: `Bearer ${getAtk()}` }, - }) - - if (res.status !== 200) { - return - } - - const data = await res.json() - - isReady.value = true - userinfo.value = { - isLoggedIn: true, - displayName: data["nick"], - data: data, - } - } - - return { userinfo, isReady, readProfiles } -}) diff --git a/web/src/views/admin/dashboard.vue b/web/src/views/admin/dashboard.vue deleted file mode 100644 index e3411a4..0000000 --- a/web/src/views/admin/dashboard.vue +++ /dev/null @@ -1,51 +0,0 @@ - - \ No newline at end of file diff --git a/web/src/views/admin/users.vue b/web/src/views/admin/users.vue deleted file mode 100644 index eb027ef..0000000 --- a/web/src/views/admin/users.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - diff --git a/web/src/views/auth/authorize.vue b/web/src/views/auth/authorize.vue deleted file mode 100755 index ddbbd1e..0000000 --- a/web/src/views/auth/authorize.vue +++ /dev/null @@ -1,189 +0,0 @@ - - - - - diff --git a/web/src/views/auth/claims.ts b/web/src/views/auth/claims.ts deleted file mode 100755 index 6ca79e5..0000000 --- a/web/src/views/auth/claims.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface ClaimType { - icon: string - name: string - description: string -} - -export const claims: { [id: string]: ClaimType } = { - openid: { - icon: "mdi-identifier", - name: "Open Identity", - description: "Allow them to read your personal information.", - }, -} diff --git a/web/src/views/auth/sign-in.vue b/web/src/views/auth/sign-in.vue deleted file mode 100755 index 998e4f0..0000000 --- a/web/src/views/auth/sign-in.vue +++ /dev/null @@ -1,85 +0,0 @@ - - - - - diff --git a/web/src/views/auth/sign-up.vue b/web/src/views/auth/sign-up.vue deleted file mode 100755 index a206dc3..0000000 --- a/web/src/views/auth/sign-up.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - - - diff --git a/web/src/views/dashboard.vue b/web/src/views/dashboard.vue deleted file mode 100755 index c5e0644..0000000 --- a/web/src/views/dashboard.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - diff --git a/web/src/views/flow/confirm.vue b/web/src/views/flow/confirm.vue deleted file mode 100755 index 055c5c4..0000000 --- a/web/src/views/flow/confirm.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - - - diff --git a/web/src/views/flow/password-reset.vue b/web/src/views/flow/password-reset.vue deleted file mode 100755 index ae4f3e4..0000000 --- a/web/src/views/flow/password-reset.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - - - diff --git a/web/src/views/personalize.vue b/web/src/views/personalize.vue deleted file mode 100755 index 56d7f76..0000000 --- a/web/src/views/personalize.vue +++ /dev/null @@ -1,157 +0,0 @@ - - - - - diff --git a/web/src/views/security.vue b/web/src/views/security.vue deleted file mode 100755 index 3787987..0000000 --- a/web/src/views/security.vue +++ /dev/null @@ -1,197 +0,0 @@ - - - - - diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json deleted file mode 100755 index e14c754..0000000 --- a/web/tsconfig.app.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "@vue/tsconfig/tsconfig.dom.json", - "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], - "exclude": ["src/**/__tests__/*"], - "compilerOptions": { - "composite": true, - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - } - } -} diff --git a/web/tsconfig.json b/web/tsconfig.json deleted file mode 100755 index 66b5e57..0000000 --- a/web/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "files": [], - "references": [ - { - "path": "./tsconfig.node.json" - }, - { - "path": "./tsconfig.app.json" - } - ] -} diff --git a/web/tsconfig.node.json b/web/tsconfig.node.json deleted file mode 100755 index 2c669ee..0000000 --- a/web/tsconfig.node.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "@tsconfig/node20/tsconfig.json", - "include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "nightwatch.conf.*", "playwright.config.*"], - "compilerOptions": { - "composite": true, - "noEmit": true, - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", - - "module": "ESNext", - "moduleResolution": "Bundler", - "types": ["node"] - } -} diff --git a/web/uno.config.ts b/web/uno.config.ts deleted file mode 100755 index 2d323f7..0000000 --- a/web/uno.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { defineConfig, presetAttributify, presetTypography, presetUno } from "unocss" - -export default defineConfig({ - presets: [presetAttributify(), presetTypography(), presetUno({ preflight: false })], -}) diff --git a/web/vite.config.ts b/web/vite.config.ts deleted file mode 100755 index 41b2b40..0000000 --- a/web/vite.config.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { fileURLToPath, URL } from "node:url"; - -import { defineConfig } from "vite"; -import vue from "@vitejs/plugin-vue"; -import vueJsx from "@vitejs/plugin-vue-jsx"; -import unocss from "unocss/vite"; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [vue(), vueJsx(), unocss()], - resolve: { - alias: { - "@": fileURLToPath(new URL("./src", import.meta.url)) - } - }, - server: { - proxy: { - "/api/ws": { - target: "ws://localhost:8444", - ws: true - }, - - "/api": "http://localhost:8444", - "/.well-known": "http://localhost:8444" - } - } -}); From e4d73b1d31c814276ff0288dbdfbc697e5bcd2e9 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 12 Aug 2024 20:58:20 +0800 Subject: [PATCH 2/2] :recycle: Separate application domain and token issuer --- .idea/workspace.xml | 65 +++-------------------- pkg/internal/server/api/well_known_api.go | 2 +- pkg/internal/services/jwt.go | 4 +- pkg/internal/services/ticket.go | 2 +- settings.toml | 3 ++ 5 files changed, 13 insertions(+), 63 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 6f64fc4..936825d 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,65 +4,12 @@
- - - - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -234,7 +180,8 @@ - true diff --git a/pkg/internal/server/api/well_known_api.go b/pkg/internal/server/api/well_known_api.go index df62e03..1c95935 100644 --- a/pkg/internal/server/api/well_known_api.go +++ b/pkg/internal/server/api/well_known_api.go @@ -12,7 +12,7 @@ func getOidcConfiguration(c *fiber.Ctx) error { basepath := fmt.Sprintf("https://%s", domain) return c.JSON(fiber.Map{ - "issuer": basepath, + "issuer": viper.GetString("security.issuer"), "authorization_endpoint": fmt.Sprintf("%s/authorize", basepath), "token_endpoint": fmt.Sprintf("%s/api/auth/token", basepath), "userinfo_endpoint": fmt.Sprintf("%s/api/users/me", basepath), diff --git a/pkg/internal/services/jwt.go b/pkg/internal/services/jwt.go index 9391ef0..00365e1 100644 --- a/pkg/internal/services/jwt.go +++ b/pkg/internal/services/jwt.go @@ -20,7 +20,7 @@ type PayloadClaims struct { Nick string `json:"preferred_username,omitempty"` Email string `json:"email,omitempty"` - // Additonal Stuff + // Additional Stuff AuthorizedParties string `json:"azp,omitempty"` Nonce string `json:"nonce,omitempty"` Type string `json:"typ"` @@ -44,7 +44,7 @@ func EncodeJwt(id string, typ, sub, sed string, nonce *string, aud []string, exp RegisteredClaims: jwt.RegisteredClaims{ Subject: sub, Audience: aud, - Issuer: fmt.Sprintf("https://%s", viper.GetString("domain")), + Issuer: viper.GetString("security.issuer"), ExpiresAt: jwt.NewNumericDate(exp), NotBefore: jwt.NewNumericDate(time.Now()), IssuedAt: jwt.NewNumericDate(time.Now()), diff --git a/pkg/internal/services/ticket.go b/pkg/internal/services/ticket.go index 188e145..681320e 100644 --- a/pkg/internal/services/ticket.go +++ b/pkg/internal/services/ticket.go @@ -11,7 +11,7 @@ import ( "github.com/samber/lo" ) -const InternalTokenAudience = "passport" +const InternalTokenAudience = "solar-network" func DetectRisk(user models.Account, ip, ua string) bool { var clue int64 diff --git a/settings.toml b/settings.toml index 821d584..ace5b52 100644 --- a/settings.toml +++ b/settings.toml @@ -5,6 +5,8 @@ bind = "0.0.0.0:8444" grpc_bind = "0.0.0.0:7444" domain = "localhost" +domain = "id.solsynth.dev" + content_endpoint = "https://usercontent.solsynth.dev" default_user_group = 1 @@ -19,6 +21,7 @@ print_routes = false addr = "127.0.0.1:7442" [security] +issuer = "https://solsynth.dev" cookie_domain = "localhost" cookie_samesite = "Lax" access_token_duration = 300