Skip to content

Commit

Permalink
feat: Enable automatic login upon initial deployment.
Browse files Browse the repository at this point in the history
  • Loading branch information
Leizhenpeng committed Jan 16, 2024
1 parent 81a2cde commit cdbe9e7
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 24 deletions.
6 changes: 3 additions & 3 deletions packages/feishuapi/test/app.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import type { AppInfo, EventUrlInfo } from '../src/app'
import { FeishuAppPlus, OpenApp } from '../src/app'

const testConfig: FeishuLoginCookies = {
lark_oapi_csrf_token: 'mMH47ijv/C0IKvUblsY3cA9QVjskDfEvCmYyXoaqTIU=',
session: 'XN0YXJ0-e29q5c84-aef0-44db-9b99-24282033dd87-WVuZA',
lark_oapi_csrf_token: 'iWlO+bXQoO+StV+YXqROtR+IFnmSckEYFQdLCaynZgI=',
session: 'XN0YXJ0-02asc1af-0e16-4dbe-97a5-c192d4b72016-WVuZA',
}

const config = new Configuration(testConfig)
Expand Down Expand Up @@ -220,7 +220,7 @@ describe('feishu app plus', async () => {
expect(result).not.toBeUndefined()
})
it('del latest 2 app', async () => {
const result = await appPlus.delLatestNApp(4)
const result = await appPlus.delLatestNApp(10)
expect(result).not.toBeUndefined()
})
})
Expand Down
2 changes: 1 addition & 1 deletion src/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,5 +91,5 @@ async function resetAllAuth() {
const spinner = ora('Start reset all platform auth').start()
const config = FeishuConfigManager.getInstance()
config.setFeishuConfig({})
spinner.succeed('Reset successfully ')
spinner.succeed('Reset all platform auth successfully')
}
26 changes: 11 additions & 15 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,19 @@ export class FeishuConfigManager {
this.setFeishuConfig({ ...feishuConfig, ...config })
}

async updateNickname() {
private createAConfig(): Configuration {
const feishuConfig = this.getFeishuConfig()
const aConfig = new Configuration({
if (!feishuConfig)
throw new Error('No Feishu config')

return new Configuration({
session: feishuConfig.session as string,
lark_oapi_csrf_token: feishuConfig.lark_oapi_csrf_token as string,
})
}

async updateNickname() {
const aConfig = this.createAConfig()
const nickname = await aConfig.getNickname() as string
this.updateFeishuConfig({ nickname })
}
Expand All @@ -92,24 +99,13 @@ export class FeishuConfigManager {
const feishuConfig = this.getFeishuConfig()
if (!feishuConfig)
return false

const aConfig = new Configuration({
session: feishuConfig.session as string,
lark_oapi_csrf_token: feishuConfig.lark_oapi_csrf_token as string,
})
const aConfig = this.createAConfig()
const isAuthed = await aConfig.isAuthed()
return isAuthed
}

get appBuilder() {
const feishuConfig = this.getFeishuConfig()
if (!feishuConfig)
throw new Error('no feishu config')

const aConfig = new Configuration({
session: feishuConfig.session as string,
lark_oapi_csrf_token: feishuConfig.lark_oapi_csrf_token as string,
})
const aConfig = this.createAConfig()
const appBuilderInstance = new OpenApp(aConfig)
return appBuilderInstance
}
Expand Down
29 changes: 24 additions & 5 deletions src/deploy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import clipboard from 'clipboardy'
import Listr from 'listr'
import ora from 'ora'
import confirm from '@inquirer/confirm'

// @ts-expect-error This is an expected error because no type definition for this package
import { getFeishuCookies } from 'botops-feishu'
import { changeArgvToString, greenIt, redIt } from './utils'
import { DeployConfig } from './manifest'
import { FeishuConfigManager } from './config'
Expand Down Expand Up @@ -49,23 +52,38 @@ export async function handler(argv: any) {
await aDeployConfig.loadConfig(pathFile)
spin.succeed('Manifest file loaded successfully.')
const aLocalConfig = FeishuConfigManager.getInstance()
// 先检查是否登录授权
const isLogin = await aLocalConfig.isAuth()
if (!isLogin) {
const answer = await confirm({ message: 'Looks like you\'re not logged in to Feishu. Would you like to log in now?' })
if (!answer) {
redIt('Please log in to Feishu first')
process.exit(1)
}
const newCookie = await getFeishuCookies() as any
aLocalConfig.setFeishuConfig(newCookie)
await aLocalConfig.updateNickname()
greenIt(`🚀Successfully reauthorized Feishu! Welcome, ${aLocalConfig.nickname}!`)
}
const appBuilder = aLocalConfig.appBuilder
await appBuilder.init()

let appId = ''

// 配置文件是否含有appID
if (aDeployConfig.ifFirstDeploy) {
// 检测是否有重名的机器人
const oldAppId = await appBuilder.checkAppName(aDeployConfig.botName)
if (oldAppId) {
const answer = await confirm({ message: 'Detected a bot with the same name, do you want to overwrite it?' })
const answer = await confirm({ message: `A bot with the name '${aDeployConfig.botName}' has been detected. Do you wish to overwrite it?` })
if (answer) {
greenIt(`即将覆盖飞书机器人 ${aDeployConfig.botName}(${oldAppId})`)
appId = oldAppId
}
}
appId = await appBuilder.newApp(aDeployConfig.botBaseInfo)
greenIt(`新的飞书机器人 ${aDeployConfig.botName}(${appId}) 初始化成功`)
else {
appId = await appBuilder.newApp(aDeployConfig.botBaseInfo)
greenIt(`新的飞书机器人 ${aDeployConfig.botName}(${appId}) 初始化成功`)
}
}
else {
appId = aDeployConfig.appId as string
Expand Down Expand Up @@ -133,7 +151,8 @@ export async function handler(argv: any) {
},
])
await tasks.run()
greenIt((`🚀 机器人 ${aDeployConfig.botName}(${appId}) 部署成功`))
greenIt((`🚀 飞书机器人 ${aDeployConfig.botName}(${appId}) 部署成功`))
process.exit(0)
}

function readClipboard() {
Expand Down

0 comments on commit cdbe9e7

Please sign in to comment.