|
1 | 1 | <script lang="ts" setup>
|
2 |
| -import { NButton, NSpace, NAlert, NImage, useMessage, NSelect } from "naive-ui"; |
3 |
| -import { ref } from "vue"; |
4 |
| -import { api } from "../api"; |
| 2 | +import { |
| 3 | + NButton, |
| 4 | + NSpace, |
| 5 | + NAlert, |
| 6 | + NImage, |
| 7 | + useMessage, |
| 8 | + NCheckbox, |
| 9 | + NInput, |
| 10 | +} from "naive-ui" |
| 11 | +import { ref } from "vue" |
| 12 | +import { api } from "../api" |
5 | 13 |
|
6 |
| -const alist_redirect_uri = "https://alist.nn.ci/tool/aliyundrive/callback"; |
7 |
| -const app_id = "76917ccccd4441c39457a04f6084fb2f"; |
| 14 | +const alist_redirect_uri = "https://alist.nn.ci/tool/aliyundrive/callback" |
| 15 | +const app_id = "76917ccccd4441c39457a04f6084fb2f" |
8 | 16 |
|
9 | 17 | function goGet() {
|
10 |
| - const url = new URL("https://open.aliyundrive.com/oauth/authorize"); |
11 |
| - url.searchParams.set("client_id", app_id); |
12 |
| - url.searchParams.set("redirect_uri", alist_redirect_uri); |
13 |
| - url.searchParams.set("scope", "user:base,file:all:read,file:all:write"); |
14 |
| - url.searchParams.set("response_type", "code"); |
15 |
| - url.searchParams.set("state", ""); |
16 |
| - url.searchParams.set("relogin", "true"); |
17 |
| - window.open(url.toString(), "_blank"); |
| 18 | + const url = new URL("https://open.aliyundrive.com/oauth/authorize") |
| 19 | + url.searchParams.set("client_id", useMyOwn.value ? client_id.value : app_id) |
| 20 | + url.searchParams.set("redirect_uri", alist_redirect_uri) |
| 21 | + url.searchParams.set("scope", "user:base,file:all:read,file:all:write") |
| 22 | + url.searchParams.set("response_type", "code") |
| 23 | + url.searchParams.set( |
| 24 | + "state", |
| 25 | + window.btoa( |
| 26 | + useMyOwn.value ? `${client_id.value}::${client_secret.value}` : "::" |
| 27 | + ) |
| 28 | + ) |
| 29 | + url.searchParams.set("relogin", "true") |
| 30 | + window.open(url.toString(), "_blank") |
18 | 31 | }
|
19 | 32 |
|
20 | 33 | interface QrCodeResp {
|
21 |
| - qrCodeUrl: string; |
22 |
| - sid: string; |
23 |
| - error: string; |
| 34 | + qrCodeUrl: string |
| 35 | + sid: string |
| 36 | + error: string |
24 | 37 | }
|
25 | 38 |
|
26 |
| -const qrcode = ref<QrCodeResp>(); |
| 39 | +const qrcode = ref<QrCodeResp>() |
27 | 40 |
|
28 |
| -const gettingQrCode = ref(false); |
| 41 | +const gettingQrCode = ref(false) |
| 42 | +const client_id = ref("") |
| 43 | +const client_secret = ref("") |
| 44 | +const useMyOwn = ref(false) |
29 | 45 |
|
30 | 46 | async function getQrCode() {
|
31 | 47 | try {
|
32 |
| - gettingQrCode.value = true; |
| 48 | + gettingQrCode.value = true |
33 | 49 | const resp = await fetch(api() + "/alist/ali_open/qr", {
|
34 | 50 | method: "POST",
|
35 | 51 | headers: {
|
36 | 52 | "Content-Type": "application/json",
|
37 | 53 | },
|
38 |
| - body: JSON.stringify({}), |
39 |
| - }); |
40 |
| - const res: QrCodeResp = await resp.json(); |
41 |
| - qrcode.value = res; |
| 54 | + body: JSON.stringify( |
| 55 | + useMyOwn.value |
| 56 | + ? { |
| 57 | + client_id: client_id.value, |
| 58 | + client_secret: client_secret.value, |
| 59 | + } |
| 60 | + : {} |
| 61 | + ), |
| 62 | + }) |
| 63 | + const res: QrCodeResp = await resp.json() |
| 64 | + qrcode.value = res |
42 | 65 | } catch (e) {
|
43 |
| - console.log(e); |
| 66 | + console.log(e) |
44 | 67 | qrcode.value = {
|
45 | 68 | error: "error",
|
46 | 69 | qrCodeUrl: "",
|
47 | 70 | sid: "",
|
48 |
| - }; |
| 71 | + } |
49 | 72 | } finally {
|
50 |
| - gettingQrCode.value = false; |
| 73 | + gettingQrCode.value = false |
51 | 74 | }
|
52 | 75 | }
|
53 | 76 |
|
54 | 77 | interface ScanStatus {
|
55 |
| - status: string; |
56 |
| - authCode: string; |
| 78 | + status: string |
| 79 | + authCode: string |
57 | 80 | }
|
58 | 81 |
|
59 |
| -const scanStatus = ref<ScanStatus>(); |
60 |
| -const gettingScanStatus = ref(false); |
| 82 | +const scanStatus = ref<ScanStatus>() |
| 83 | +const gettingScanStatus = ref(false) |
61 | 84 |
|
62 |
| -const message = useMessage(); |
| 85 | +const message = useMessage() |
63 | 86 |
|
64 | 87 | async function haveScan() {
|
65 | 88 | try {
|
66 |
| - gettingScanStatus.value = true; |
| 89 | + gettingScanStatus.value = true |
67 | 90 | const resp = await fetch(
|
68 | 91 | `${api()}/proxy/https://open.aliyundrive.com/oauth/qrcode/${
|
69 | 92 | qrcode.value?.sid
|
70 | 93 | }/status`
|
71 |
| - ); |
72 |
| - const res: ScanStatus = await resp.json(); |
73 |
| - scanStatus.value = res; |
| 94 | + ) |
| 95 | + const res: ScanStatus = await resp.json() |
| 96 | + scanStatus.value = res |
74 | 97 | if (res.status === "LoginSuccess") {
|
75 |
| - const url = new URL(alist_redirect_uri); |
76 |
| - url.searchParams.set("code", res.authCode); |
77 |
| - window.open(url.toString(), "_blank"); |
| 98 | + const url = new URL(alist_redirect_uri) |
| 99 | + url.searchParams.set("code", res.authCode) |
| 100 | + window.open(url.toString(), "_blank") |
78 | 101 | } else {
|
79 |
| - message.warning(res.status); |
| 102 | + message.warning(res.status) |
80 | 103 | }
|
81 | 104 | } catch (e) {
|
82 |
| - console.log(e); |
83 |
| - message.error(String(e)); |
| 105 | + console.log(e) |
| 106 | + message.error(String(e)) |
84 | 107 | } finally {
|
85 |
| - gettingScanStatus.value = false; |
| 108 | + gettingScanStatus.value = false |
86 | 109 | }
|
87 | 110 | }
|
88 | 111 | </script>
|
89 | 112 |
|
90 | 113 | <template>
|
91 | 114 | <NSpace vertical size="large">
|
| 115 | + <NCheckbox v-model:checked="useMyOwn" size="large" |
| 116 | + >Use my own client</NCheckbox |
| 117 | + > |
| 118 | + <template v-if="useMyOwn"> |
| 119 | + <NInput size="large" v-model:value="client_id" placeholder="client_id" /> |
| 120 | + <NInput |
| 121 | + size="large" |
| 122 | + v-model:value="client_secret" |
| 123 | + placeholder="client_secret" |
| 124 | + /> |
| 125 | + </template> |
92 | 126 | <NButton size="large" type="primary" @click="goGet" block
|
93 | 127 | >Go to login</NButton
|
94 | 128 | >
|
|
0 commit comments