fix: douban login

This commit is contained in:
wanxp 2023-09-20 13:37:16 +08:00
parent 01a386dd6b
commit 938d7f6658
4 changed files with 39 additions and 67 deletions

@ -35,12 +35,22 @@ export default class SettingsManager {
if (this.settings.loginHeadersContent) {
// return StringUtil.parseHeaders(this.settings.loginHeadersContent);
return JSON.parse(this.settings.loginHeadersContent);
}else if (this.settings.loginCookiesContent) {
return {Cookie: this.settings.loginCookiesContent, ...DEFAULT_DOUBAN_HEADERS};
}else {
return DEFAULT_DOUBAN_HEADERS;
}
}
getHeadersByCookie(cookie:string):object {
if (cookie) {
return {...DEFAULT_DOUBAN_HEADERS, Cookie: cookie};
}else {
return DEFAULT_DOUBAN_HEADERS;
}
}
async updateSetting(key: keyof DoubanPluginSetting, value:any) {

@ -47,41 +47,15 @@ export default class UserComponent {
needLogin() {
const headers:any = this.settingsManager.getSetting('loginHeadersContent') ;
if(!headers) {
const cookies:any = this.settingsManager.getSetting('loginCookiesContent') ;
if(!headers && !cookies) {
return false;
}
return !this.isLogin();
}
async loginByCookie():Promise<User> {
let cookie = this.settingsManager.getSetting('loginCookiesContent');
if(!cookie) {
this.settingsManager.debug('主界面:loginByCookie:无豆瓣cookies信息获取用户信息失败');
return new User();
}
this.settingsManager.debug('主界面:loginByCookie:豆瓣cookies信息正常尝试获取用户信息');
await this.loadUserInfo(cookie).then(user => {
this.user = user;
this.settingsManager.debug(`主界面:loginByCookie:豆瓣cookies信息正常${user&&user.id?'获取用户信息成功id:'+ StringUtil.confuse(user.id) + ',用户名:'+ StringUtil.confuse(user.name) :'获取用户信息失败'}`);
});
return this.user;
}
async loginByHeaders() {
// @ts-ignore
let headersStr:string = this.settingsManager.getSetting('loginHeadersContent');
if(!headersStr) {
this.settingsManager.debug('主界面:loginByCookie:无豆瓣headers信息获取用户信息失败');
return new User();
}
this.settingsManager.debug('主界面:loginByCookie:豆瓣cookies信息正常尝试获取用户信息');
const headers:object = JSON.parse(headersStr);
await this.loadUserInfoByHeaders(headers).then(user => {
this.user = user;
this.settingsManager.debug(`主界面:loginByCookie:豆瓣cookies信息正常${user&&user.id?'获取用户信息成功id:'+ StringUtil.confuse(user.id) + ',用户名:'+ StringUtil.confuse(user.name) :'获取用户信息失败'}`);
});
return this.user;
}
async loginHeaders(headers: object):Promise<User> {
if(!headers) {
@ -105,18 +79,14 @@ export default class UserComponent {
}
async loginCookie(cookie: any):Promise<User> {
if(!cookie) {
return new User();
}
this.settingsManager.debug('配置界面:loginCookie:豆瓣cookies信息正常尝试获取用户信息,cookie:' + cookie);
await this.loadUserInfo(cookie).then(user => {
this.user = user;
this.settingsManager.debug(`配置界面:loginCookie:豆瓣cookies信息正常${user&&user.id?'获取用户信息成功id:'+ StringUtil.confuse(user.id) + ',用户名:'+ StringUtil.confuse(user.name) :'获取用户信息失败'}`);
});
if(this.user) {
this.settingsManager.updateSetting('loginCookiesContent', cookie);
}
return this.user;
const headers: object = this.settingsManager.getHeadersByCookie(cookie);
return this.loginHeaders(headers)
.then(user => {
if(this.user) {
this.settingsManager.updateSetting('loginCookiesContent', cookie);
}
return user;
});
}
@ -157,4 +127,17 @@ export default class UserComponent {
};
async login() {
let headers:object = this.settingsManager.getHeaders();
if(!headers) {
this.settingsManager.debug('主界面:login:无豆瓣信息,获取用户信息失败');
return new User();
}
this.settingsManager.debug('主界面:login:豆瓣headers信息正常尝试获取用户信息');
await this.loadUserInfoByHeaders(headers).then(user => {
this.user = user;
this.settingsManager.debug(`主界面:loginByCookie:豆瓣cookies信息正常${user&&user.id?'获取用户信息成功id:'+ StringUtil.confuse(user.id) + ',用户名:'+ StringUtil.confuse(user.name) :'获取用户信息失败'}`);
});
return this.user;
}
}

@ -209,7 +209,7 @@ export default class DoubanPlugin extends Plugin {
this.netFileHandler = new NetFileHandler(this.fileHandler);
if (this.userComponent.needLogin()) {
try {
await this.userComponent.loginByCookie();
await this.userComponent.login();
}catch (e) {
log.debug(i18nHelper.getMessage('100101'));
}
@ -280,38 +280,19 @@ export default class DoubanPlugin extends Plugin {
}
async checkLogin(context: HandleContext):Promise<boolean> {
// return await this.checkLoginByCookie(context);
return await this.checkLoginByHeaders(context);
}
private async checkLoginByCookie(context: HandleContext) {
this.settingsManager.debug('主界面:同步时的登录状态检测');
if (!context.userComponent.needLogin()) {
this.settingsManager.debug('主界面:同步时的登录状态检测完成: 无用户信息, 尝试使用cookie获取用户信息');
await context.userComponent.loginByCookie();
this.settingsManager.debug('主界面:同步时的登录状态检测完成: 无用户信息, 尝试获取用户信息');
await context.userComponent.login();
}
if (!context.userComponent.isLogin()) {
this.settingsManager.debug('主界面:同步时的登录状态检测完成: 尝试使用cookie获取用户信息失败');
this.settingsManager.debug('主界面:同步时的登录状态检测完成: 尝试获取用户信息失败');
new Notice(i18nHelper.getMessage('140303'));
return false;
}
return true;
}
private async checkLoginByHeaders(context: HandleContext) {
this.settingsManager.debug('主界面:同步时的登录状态检测');
if (!context.userComponent.needLogin()) {
this.settingsManager.debug('主界面:同步时的登录状态检测完成: 无用户信息, 尝试使用headers获取用户信息');
await context.userComponent.loginByHeaders();
}
if (!context.userComponent.isLogin()) {
this.settingsManager.debug('主界面:同步时的登录状态检测完成: 尝试使用headers获取用户信息失败');
new Notice(i18nHelper.getMessage('140303'));
return false;
}
return true;
}
private initSyncDefaultSettings(syncConfig: SyncConfig) {
syncConfig.dataFilePath = syncConfig.dataFilePath ? syncConfig.dataFilePath : DEFAULT_SETTINGS.dataFilePath;

@ -39,7 +39,6 @@ export default class HttpUtil {
response.on("end", function () {
let data = Buffer.concat(chunks, size)
let html = data.toString()
console.log(html)
resolve(html)
})
})
@ -52,7 +51,6 @@ export default class HttpUtil {
* @param headers
* @param settingsManager
*/
// Cookie: 'll="108296"; bid=xHRJLeWBrjQ; _pk_id.100001.8cb4=f8f83e81ec224a1a.1691572669.; __utmv=30149280.13103; __yadk_uid=ce95W7OsgT0iKFceWgbMSUdw1oOqxNTk; __gads=ID=62585f60f3f637d0-2234f63fc6e200a5:T=1691572672:RT=1691572672:S=ALNI_MaIqTxSWHsfpnX9nAmMHcPQEsaezg; __gpi=UID=00000c29a9f98e5b:T=1691572672:RT=1691572672:S=ALNI_MbLAq8XNoKrRPKNqGCMdgXSPZvidw; ap_v=0,6.0; __utma=30149280.135860784.1691572641.1691572641.1694509646.2; __utmc=30149280; __utmz=30149280.1694509646.2.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1694509648%2C%22https%3A%2F%2Fmovie.douban.com%2Ftv%2F%22%5D; _pk_ses.100001.8cb4=1; __utmt=1; dbcl2="131038721:LUssju34QFw"; ck=dCQj; push_noty_num=0; push_doumail_num=0; __utmb=30149280.3.10.1694509646'
public static httpRequestGetBuffer(url: string, headers: any, settingsManager?: SettingsManager): Promise<ArrayBuffer> {
let options = {
headers: headers