From cb12d8ffec8372dd2b94a8d7b0ddc9582b35cd32 Mon Sep 17 00:00:00 2001 From: whyour Date: Wed, 18 May 2022 20:06:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4=E7=A7=81?= =?UTF-8?q?=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- back/services/sshKey.ts | 17 +++++++++++------ back/services/subscription.ts | 34 +++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/back/services/sshKey.ts b/back/services/sshKey.ts index 16f6b7cc..89262df5 100644 --- a/back/services/sshKey.ts +++ b/back/services/sshKey.ts @@ -14,7 +14,10 @@ export default class SshKeyService { private generatePrivateKeyFile(alias: string, key: string): void { try { - fs.writeFileSync(`${this.sshPath}/${alias}`, key, { encoding: 'utf8' }); + fs.writeFileSync(`${this.sshPath}/${alias}`, key, { + encoding: 'utf8', + mode: '400', + }); } catch (error) { this.logger.error('生成私钥文件失败', error); } @@ -37,7 +40,6 @@ export default class SshKeyService { for (const config of configs) { fs.appendFileSync(this.sshConfigFilePath, config, { encoding: 'utf8', - mode: '400', }); } } catch (error) { @@ -47,10 +49,13 @@ export default class SshKeyService { private removeSshConfig(config: string) { try { - fs.readFileSync(this.sshConfigFilePath, { encoding: 'utf8' }).replace( - config, - '', - ); + const data = fs + .readFileSync(this.sshConfigFilePath, { encoding: 'utf8' }) + .replace(config, '') + .replace(/\n\n+/, '\n\n'); + fs.writeFileSync(this.sshConfigFilePath, data, { + encoding: 'utf8', + }); } catch (error) { this.logger.error(`删除ssh配置文件${config}失败`, error); } diff --git a/back/services/subscription.ts b/back/services/subscription.ts index 07e00ef3..cce105ec 100644 --- a/back/services/subscription.ts +++ b/back/services/subscription.ts @@ -96,7 +96,7 @@ export default class SubscriptionService { private formatCommand(doc: Subscription, url?: string) { let command = 'ql '; - let _url = url || doc.url; + let _url = url || this.formatUrl(doc).url; const { type, whitelist, blacklist, dependences, branch } = doc; if (type === 'file') { command += `raw "${_url}"`; @@ -108,27 +108,35 @@ export default class SubscriptionService { return command; } - private handleTask(doc: Subscription, needCreate = true, needAddKey = true) { + private formatUrl(doc: Subscription) { let url = doc.url; + let host = ''; if (doc.type === 'private-repo') { if (doc.pull_type === 'ssh-key') { - const host = doc.url!.replace(/.*\@([^\:]+)\:.*/, '$1'); + host = doc.url!.replace(/.*\@([^\:]+)\:.*/, '$1'); url = doc.url!.replace(host, doc.alias); - if (needAddKey) { - this.sshKeyService.addSSHKey( - (doc.pull_option as any).private_key, - doc.alias, - host, - ); - } else { - this.sshKeyService.removeSSHKey(doc.alias, host); - } } else { - const host = doc.url!.replace(/.*\:\/\/([^\/]+)\/.*/, '$1'); + host = doc.url!.replace(/.*\:\/\/([^\/]+)\/.*/, '$1'); const { username, password } = doc.pull_option as any; url = doc.url!.replace(host, `${username}:${password}@${host}`); } } + return { url, host }; + } + + private handleTask(doc: Subscription, needCreate = true, needAddKey = true) { + const { url, host } = this.formatUrl(doc); + if (doc.type === 'private-repo' && doc.pull_type === 'ssh-key') { + if (needAddKey) { + this.sshKeyService.addSSHKey( + (doc.pull_option as any).private_key, + doc.alias, + host, + ); + } else { + this.sshKeyService.removeSSHKey(doc.alias, host); + } + } doc.command = this.formatCommand(doc, url as string);