修复删除私钥

This commit is contained in:
whyour 2022-05-18 20:06:46 +08:00
parent a3114e40d1
commit deb124ae23
2 changed files with 32 additions and 19 deletions

View File

@ -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);
}

View File

@ -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);