github-actions[bot]
commited on
Commit
·
b8a045d
1
Parent(s):
1877b95
Update from GitHub Actions
Browse files- functions/utils/authService.ts +73 -19
- src/App.vue +2 -2
functions/utils/authService.ts
CHANGED
@@ -74,22 +74,90 @@ export class AuthService {
|
|
74 |
await page.waitForSelector('#idA_PWD_SwitchToPassword', { timeout: 3000 });
|
75 |
await page.click('#idA_PWD_SwitchToPassword');
|
76 |
} catch (error) {
|
77 |
-
console.log(
|
78 |
}
|
79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
await page.waitForURL("https://login.live.com/**");
|
81 |
await page.fill('input[type="password"]', account.password);
|
82 |
await page.fill('input[type="password"]', account.password);
|
83 |
await page.click('button[type="submit"]');
|
84 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
try {
|
86 |
-
|
87 |
-
await page.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
} catch (error) {
|
89 |
-
|
90 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
}
|
92 |
|
|
|
93 |
private async handleMultiFactorAuth(page: Page, account: Account) {
|
94 |
for (let i = 0; i < 3; i++) {
|
95 |
try {
|
@@ -110,21 +178,7 @@ export class AuthService {
|
|
110 |
await page.fill("#iProofEmail", proofEmail);
|
111 |
await page.click('input[type="submit"]');
|
112 |
|
113 |
-
const
|
114 |
-
{
|
115 |
-
"suffix": "godgodgame.com",
|
116 |
-
"apiUrl": "https://seedmail.igiven.com/api/latest-email",
|
117 |
-
"token": this.env.PROOF_GODGODGAME_TOKEN
|
118 |
-
},
|
119 |
-
{
|
120 |
-
"suffix": "igiven.com",
|
121 |
-
"apiUrl": "https://mail.igiven.com/api/latest-email",
|
122 |
-
"token": this.env.PROOF_IGIVEN_TOKEN
|
123 |
-
}
|
124 |
-
];
|
125 |
-
|
126 |
-
const suffix = proofEmail.substring(proofEmail.indexOf('@') + 1);
|
127 |
-
const proofConfig = proof.find(p => p.suffix === suffix)!;
|
128 |
const verificationCode = await getVerificationCode(
|
129 |
proofConfig.apiUrl,
|
130 |
proofConfig.token!,
|
|
|
74 |
await page.waitForSelector('#idA_PWD_SwitchToPassword', { timeout: 3000 });
|
75 |
await page.click('#idA_PWD_SwitchToPassword');
|
76 |
} catch (error) {
|
77 |
+
console.log(account.email, `没有旧版切换到密码登录,继续执行: ${error}`);
|
78 |
}
|
79 |
|
80 |
+
try {
|
81 |
+
const passwordButtonByRole = page.getByRole('button', { name: '使用密码' });
|
82 |
+
if (await passwordButtonByRole.isVisible({ timeout: 3000 })) {
|
83 |
+
await passwordButtonByRole.click();
|
84 |
+
}
|
85 |
+
} catch (error) {
|
86 |
+
console.log(account.email, `没有新版切换到密码登录,继续执行: ${error}`);
|
87 |
+
}
|
88 |
await page.waitForURL("https://login.live.com/**");
|
89 |
await page.fill('input[type="password"]', account.password);
|
90 |
await page.fill('input[type="password"]', account.password);
|
91 |
await page.click('button[type="submit"]');
|
92 |
|
93 |
+
|
94 |
+
const proofEmail = account.proofEmail;
|
95 |
+
|
96 |
+
try {
|
97 |
+
await page.waitForURL((url) => {
|
98 |
+
return url.href.startsWith('https://account.live.com/recover');
|
99 |
+
}, { timeout: 3000 });
|
100 |
+
await page.click('input[type="submit"]#iLandingViewAction');
|
101 |
+
const timestamp = Math.floor(Date.now() / 1000);
|
102 |
+
await page.fill("#iProofEmail", proofEmail)
|
103 |
+
await page.click('input[type="submit"]')
|
104 |
+
|
105 |
+
const proofConfig = this.getProofConfig(proofEmail);
|
106 |
+
const verificationCode = await getVerificationCode(proofConfig.apiUrl, proofConfig.token!, proofEmail, timestamp);
|
107 |
+
await page.fill('input[type="tel"]', verificationCode);
|
108 |
+
await page.click('input[type="submit"]');
|
109 |
+
|
110 |
+
//可能需要修改密码..这里就不处理了
|
111 |
+
} catch (error) {
|
112 |
+
console.log(account.email, `没有帮助我们保护帐户确认,继续执行: ${error}`);
|
113 |
+
}
|
114 |
+
|
115 |
try {
|
116 |
+
//新版的邮箱验证
|
117 |
+
await page.waitForURL((url) => {
|
118 |
+
return url.href.startsWith('https://login.live.com/oauth20_authorize.srf');
|
119 |
+
}, { timeout: 3000 });
|
120 |
+
|
121 |
+
const timestamp = Math.floor(Date.now() / 1000);
|
122 |
+
await page.fill("#proof-confirmation-email-input", proofEmail)
|
123 |
+
await page.click('button[type="submit"]')
|
124 |
+
|
125 |
+
const proofConfig = this.getProofConfig(proofEmail);
|
126 |
+
const verificationCode = await getVerificationCode(proofConfig.apiUrl, proofConfig.token!, proofEmail, timestamp);
|
127 |
+
await page.fill('input#codeEntry-0', verificationCode[0]);
|
128 |
+
await page.fill('input#codeEntry-1', verificationCode[1]);
|
129 |
+
await page.fill('input#codeEntry-2', verificationCode[2]);
|
130 |
+
await page.fill('input#codeEntry-3', verificationCode[3]);
|
131 |
+
await page.fill('input#codeEntry-4', verificationCode[4]);
|
132 |
+
await page.fill('input#codeEntry-5', verificationCode[5]);
|
133 |
+
|
134 |
+
//可能需要修改密码..这里就不处理了
|
135 |
} catch (error) {
|
136 |
+
console.log(account.email, `没有帮助我们保护帐户确认,继续执行: ${error}`);
|
137 |
}
|
138 |
+
|
139 |
+
}
|
140 |
+
|
141 |
+
private getProofConfig(proofEmail: string) {
|
142 |
+
const proof = [
|
143 |
+
{
|
144 |
+
"suffix": "godgodgame.com",
|
145 |
+
"apiUrl": "https://seedmail.igiven.com/api/latest-email",
|
146 |
+
"token": this.env.PROOF_GODGODGAME_TOKEN
|
147 |
+
},
|
148 |
+
{
|
149 |
+
"suffix": "igiven.com",
|
150 |
+
"apiUrl": "https://mail.igiven.com/api/latest-email",
|
151 |
+
"token": this.env.PROOF_IGIVEN_TOKEN
|
152 |
+
}
|
153 |
+
];
|
154 |
+
|
155 |
+
const suffix = proofEmail.substring(proofEmail.indexOf('@') + 1);
|
156 |
+
const proofConfig = proof.find(p => p.suffix === suffix)!;
|
157 |
+
return proofConfig;
|
158 |
}
|
159 |
|
160 |
+
|
161 |
private async handleMultiFactorAuth(page: Page, account: Account) {
|
162 |
for (let i = 0; i < 3; i++) {
|
163 |
try {
|
|
|
178 |
await page.fill("#iProofEmail", proofEmail);
|
179 |
await page.click('input[type="submit"]');
|
180 |
|
181 |
+
const proofConfig = this.getProofConfig(proofEmail);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
const verificationCode = await getVerificationCode(
|
183 |
proofConfig.apiUrl,
|
184 |
proofConfig.token!,
|
src/App.vue
CHANGED
@@ -61,7 +61,7 @@ const jwtToken = parseToken();
|
|
61 |
<template #logo>
|
62 |
<router-link to="/" class="flex items-center gap-2 p-4">
|
63 |
<img :src="logo" alt="logo" class="w-8 h-8" />
|
64 |
-
<h1 class="text-xl font-bold text-white">
|
65 |
</router-link>
|
66 |
</template>
|
67 |
<t-menu-item v-for="item in menu" :key="item.path" :value="item.path" :to="item.path"
|
@@ -80,7 +80,7 @@ const jwtToken = parseToken();
|
|
80 |
<template #logo>
|
81 |
<router-link to="/" class="flex items-center gap-2">
|
82 |
<img :src="logo" alt="logo" class="w-10 h-10 transition-transform hover:scale-110" />
|
83 |
-
<h1 class="text-2xl font-bold text-white tracking-wider">
|
84 |
</router-link>
|
85 |
</template>
|
86 |
<t-menu-item v-for="item in menu" :key="item.path" :value="item.path" :to="item.path"
|
|
|
61 |
<template #logo>
|
62 |
<router-link to="/" class="flex items-center gap-2 p-4">
|
63 |
<img :src="logo" alt="logo" class="w-8 h-8" />
|
64 |
+
<h1 class="text-xl font-bold text-white">MS MAIL</h1>
|
65 |
</router-link>
|
66 |
</template>
|
67 |
<t-menu-item v-for="item in menu" :key="item.path" :value="item.path" :to="item.path"
|
|
|
80 |
<template #logo>
|
81 |
<router-link to="/" class="flex items-center gap-2">
|
82 |
<img :src="logo" alt="logo" class="w-10 h-10 transition-transform hover:scale-110" />
|
83 |
+
<h1 class="text-2xl font-bold text-white tracking-wider">MS MAIL</h1>
|
84 |
</router-link>
|
85 |
</template>
|
86 |
<t-menu-item v-for="item in menu" :key="item.path" :value="item.path" :to="item.path"
|