add login by cookie

This commit is contained in:
Wanxp 2023-02-02 01:26:38 +08:00
parent afecbcdcd0
commit 2b3c310f4c
6 changed files with 101 additions and 4 deletions

@ -1,4 +1,4 @@
import {i18nHelper} from "../../lang/helper"; import I18nHelper, {i18nHelper} from "../../lang/helper";
import {Platform, Setting} from "obsidian"; import {Platform, Setting} from "obsidian";
import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings"; import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings";
import SettingsManager from "./SettingsManager"; import SettingsManager from "./SettingsManager";
@ -7,6 +7,7 @@ import DoubanLogoutModel from "../component/DoubanLogoutModel";
import User from "../user/User"; import User from "../user/User";
import {createFolderSelectionSetting} from "./TemplateSettingHelper"; import {createFolderSelectionSetting} from "./TemplateSettingHelper";
import StringUtil from "../../utils/StringUtil"; import StringUtil from "../../utils/StringUtil";
import {log} from "../../utils/Logutil";
export function constructBasicUI(containerEl: HTMLElement, manager: SettingsManager) { export function constructBasicUI(containerEl: HTMLElement, manager: SettingsManager) {
containerEl.createEl('h3', { text: i18nHelper.getMessage('1210') }); containerEl.createEl('h3', { text: i18nHelper.getMessage('1210') });
@ -124,10 +125,12 @@ export function constructDoubanTokenSettingsUI(containerEl: HTMLElement, manager
export function constructLoginSettingsUI(containerEl: HTMLElement, manager: SettingsManager) { export function constructLoginSettingsUI(containerEl: HTMLElement, manager: SettingsManager) {
manager.debug(`配置界面:未登录-展示登录按钮`) manager.debug(`配置界面:未登录-展示登录按钮`)
new Setting(containerEl).setName(i18nHelper.getMessage('100131')).addButton((button) => { let loginSetting = containerEl.createDiv("login-button");
let loginCookie = containerEl.createDiv("login-button-cookie");
new Setting(loginSetting).setName(i18nHelper.getMessage('100131')).addButton((button) => {
return button return button
.setButtonText(i18nHelper.getMessage('100130')) .setButtonText(i18nHelper.getMessage('100130'))
.setCta()
.onClick(async () => { .onClick(async () => {
button.setDisabled(true); button.setDisabled(true);
manager.debug(`配置界面:点击登录按钮`) manager.debug(`配置界面:点击登录按钮`)
@ -135,6 +138,67 @@ export function constructLoginSettingsUI(containerEl: HTMLElement, manager: Sett
await loginModel.doLogin(); await loginModel.doLogin();
}); });
}); });
const loginCookieSetting:Setting = new Setting(loginSetting).setName(i18nHelper.getMessage('100133'));
// .setDesc(i18nHelper.getMessage('100134'))
loginCookieSetting.addButton((button) => {
loginCookieSetting.descEl.appendChild(
createFragment((frag) => {
frag.appendText(
i18nHelper.getMessage('100134')
);
frag.createEl(
'a',
{
text: i18nHelper.getMessage('100139'),
href: 'https://wiki.wanxuping.com/zh/obsidian-douban/setting/login/getCookie',
},
(a) => {
a.setAttr('target', '_blank');
}
);
frag.appendText(i18nHelper.getMessage('100138'));
})
);
return button
.setButtonText(i18nHelper.getMessage('100135'))
.onClick(async () => {
button.setDisabled(true);
manager.debug(`配置界面:点击登录异常处理按钮`)
constructLoginCookieSettingsUI(loginCookie, containerEl, manager);
});
});
}
export function constructLoginCookieSettingsUI(containerEl: HTMLElement, parentContainerEl: HTMLElement, manager: SettingsManager) {
manager.debug(`配置界面:登录异常处理按钮-展示Cookie输入框`)
new Setting(containerEl).setName(i18nHelper.getMessage('100136'))
.setClass("obsidian_douban_settings_cookie_login").addTextArea((text) => {
text.onChange(value => manager.updateCookieTemp(value));
return text;
}).addExtraButton((button) => {
return button
.setIcon('check')
.onClick(async () => {
button.setDisabled(true);
manager.debug(`配置界面:确认输入Cookie`);
const user:User = await manager.plugin.userComponent.loginCookie(manager.getCookieTemp())
if (!user || !user.id) {
log.notice(i18nHelper.getMessage('100137'))
}
constructDoubanTokenSettingsUI(parentContainerEl, manager);
});
})
.addExtraButton((button) => {
return button
.setIcon('x')
.onClick(async () => {
button.setDisabled(true);
manager.debug(`配置界面:取消输入Cookie`);
constructDoubanTokenSettingsUI(parentContainerEl, manager);
});
});
} }
export function constructHasLoginSettingsUI(containerEl: HTMLElement, manager: SettingsManager) { export function constructHasLoginSettingsUI(containerEl: HTMLElement, manager: SettingsManager) {

@ -11,6 +11,8 @@ export default class SettingsManager {
cleanupFns: Array<() => void> = []; cleanupFns: Array<() => void> = [];
innerLogger: Logger = new Logger(); innerLogger: Logger = new Logger();
cookieTemp:string;
constructor(app: App, plugin: DoubanPlugin) { constructor(app: App, plugin: DoubanPlugin) {
this.app = app; this.app = app;
this.plugin = plugin; this.plugin = plugin;
@ -43,4 +45,12 @@ export default class SettingsManager {
} }
} }
updateCookieTemp(cookie:string):void {
this.cookieTemp = cookie;
}
getCookieTemp():string {
return this.cookieTemp;
}
} }

@ -74,7 +74,9 @@ export default class UserComponent {
this.user = user; this.user = user;
this.settingsManager.debug(`配置界面:loginCookie:豆瓣cookies信息正常${user&&user.id?'获取用户信息成功id:'+ StringUtil.confuse(user.id) + ',用户名:'+ StringUtil.confuse(user.name) :'获取用户信息失败'}`); 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); this.settingsManager.updateSetting('loginCookiesContent', cookie);
}
return this.user; return this.user;
} }

@ -88,6 +88,13 @@ PS: This file could be delete if you want to.
'100129': `You have not login Douban, please login in computer first! After login, you can use your rating and reading status, see the last for specific variables.`, '100129': `You have not login Douban, please login in computer first! After login, you can use your rating and reading status, see the last for specific variables.`,
'100130': `Login`, '100130': `Login`,
'100131': `Login Douban`, '100131': `Login Douban`,
'100133': `For Login Error `,
'100135': `LoginByCookie`,
'100136': `Cookie Input`,
'100137': `Cookie Login Failed, Can not get User Info By Cookie, Please Check Your Cookie Text`,
'100134': `If you login failed, please click this button and follow`,
'100139': `Tutorial`,
'100138': `get Cookie and input to text area bellow`,
'100132': `Load Douban Login Page Failed`, '100132': `Load Douban Login Page Failed`,

@ -82,6 +82,13 @@ export default {
'100129': `豆瓣未登录,请先在电脑端登录!登录后导入参数可使用你的评分以及阅读状态等,具体可用参数见最后.`, '100129': `豆瓣未登录,请先在电脑端登录!登录后导入参数可使用你的评分以及阅读状态等,具体可用参数见最后.`,
'100130': `登录`, '100130': `登录`,
'100131': `登录豆瓣`, '100131': `登录豆瓣`,
'100133': `登录出错处理`,
'100135': `Cookie登录`,
'100136': `Cookie输入`,
'100137': `使用Cookie登录失败,请确认Cookie填写是否正确`,
'100134': `如果上面登录按钮点击后在弹窗中登录还是没成功,请点击此[Cookie登录]按钮,然后按照`,
'100139': `[教程]`,
'100138': `获取Cookie,并将Cookie复制到下面输入框中,最后点击✔️`,
'100132': `加载豆瓣登录页面失败`, '100132': `加载豆瓣登录页面失败`,
//DoubanSettingTab //DoubanSettingTab

@ -4,6 +4,13 @@
width: 100%; width: 100%;
} }
.obsidian_douban_settings_cookie_login > .setting-item-control > textarea {
margin-left: 5px;
margin-right: 5px;
height: 100px;
width: 100%;
}
.obsidian_douban_settings_textField { .obsidian_douban_settings_textField {
margin-left: 5px; margin-left: 5px;
margin-right: 5px; margin-right: 5px;