1
0
Fork 0
mirror of https://github.com/shimataro/ssh-key-action.git synced 2025-06-19 22:52:10 +10:00

backup & restore

This commit is contained in:
shimataro 2023-10-10 06:44:49 +09:00
parent 2983fc456f
commit 35831eecc5
No known key found for this signature in database
GPG key ID: BE92C05736911A9D
2 changed files with 119 additions and 6 deletions

View file

@ -2738,6 +2738,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
const fs_1 = __importDefault(__nccwpck_require__(147));
const path_1 = __importDefault(__nccwpck_require__(17));
const core = __importStar(__nccwpck_require__(186));
const STATE_BACKUP_SUFFIX = "backup-suffix";
const KNOWN_HOSTS = [
"github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=",
];
@ -2788,6 +2789,7 @@ function setup() {
});
const config = core.getInput("config");
const ifKeyExists = core.getInput("if_key_exists");
backup(name);
// create ".ssh" directory
const sshDirName = createSshDirectory();
// files to be created
@ -2832,9 +2834,57 @@ function setup() {
* cleanup function
*/
function cleanup() {
// remove ".ssh" directory
const sshDirName = removeSshDirectory();
console.log(`SSH key in ${sshDirName} has been removed successfully.`);
const backupSuffix = core.getState(STATE_BACKUP_SUFFIX);
if (backupSuffix === "") {
// remove ".ssh" directory if suffix is not set
const sshDirName = removeSshDirectory();
console.log(`SSH key in ${sshDirName} has been removed successfully.`);
}
else {
restore(backupSuffix);
console.log(`Files that have suffix "${backupSuffix} has been restored successfully.`);
}
}
/**
* backup files
* @param keyFileName filename of SSH private key
*/
function backup(keyFileName) {
const dirName = getSshDirectory();
if (!fs_1.default.existsSync(dirName)) {
// do noting if .ssh does not exist
return;
}
const backupSuffix = `.bak-${Date.now()}`;
core.saveState(STATE_BACKUP_SUFFIX, backupSuffix);
for (const fileName of ["known_hosts", "config", keyFileName]) {
const pathNameOrg = path_1.default.join(dirName, fileName);
const pathNameBak = `${pathNameOrg}${backupSuffix}`;
if (!fs_1.default.existsSync(pathNameOrg)) {
continue;
}
// move -> copy (in order to keep permissions when restore)
fs_1.default.renameSync(pathNameOrg, pathNameBak);
fs_1.default.copyFileSync(pathNameBak, pathNameOrg);
}
console.log(`backup suffix: "${backupSuffix}"`);
}
/**
* restore files
* @param backupSuffix suffix of backup directory
*/
function restore(backupSuffix) {
const keyFileName = core.getInput("name");
const dirName = getSshDirectory();
for (const fileName of ["known_hosts", "config", keyFileName]) {
const pathNameOrg = path_1.default.join(dirName, fileName);
const pathNameBak = `${pathNameOrg}${backupSuffix}`;
if (!fs_1.default.existsSync(pathNameBak)) {
continue;
}
fs_1.default.rmSync(pathNameOrg);
fs_1.default.renameSync(pathNameBak, pathNameOrg);
}
}
/**
* create ".ssh" directory

View file

@ -9,6 +9,8 @@ interface FileInfo {
options: fs.WriteFileOptions;
}
const STATE_BACKUP_SUFFIX = "backup-suffix";
const KNOWN_HOSTS = [
"github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=",
];
@ -63,6 +65,8 @@ function setup(): void {
const config = core.getInput("config");
const ifKeyExists = core.getInput("if_key_exists");
backup(name);
// create ".ssh" directory
const sshDirName = createSshDirectory();
@ -111,10 +115,69 @@ function setup(): void {
* cleanup function
*/
function cleanup(): void {
// remove ".ssh" directory
const sshDirName = removeSshDirectory();
const backupSuffix = core.getState(STATE_BACKUP_SUFFIX);
console.log(`SSH key in ${sshDirName} has been removed successfully.`);
if (backupSuffix === "") {
// remove ".ssh" directory if suffix is not set
const sshDirName = removeSshDirectory();
console.log(`SSH key in ${sshDirName} has been removed successfully.`);
} else {
restore(backupSuffix);
console.log(`Files that have suffix "${backupSuffix} has been restored successfully.`);
}
}
/**
* backup files
* @param keyFileName filename of SSH private key
*/
function backup(keyFileName: string): void {
const dirName = getSshDirectory();
if (!fs.existsSync(dirName)) {
// do noting if .ssh does not exist
return;
}
const backupSuffix = `.bak-${Date.now()}`;
core.saveState(STATE_BACKUP_SUFFIX, backupSuffix);
for (const fileName of ["known_hosts", "config", keyFileName]) {
const pathNameOrg = path.join(dirName, fileName);
const pathNameBak = `${pathNameOrg}${backupSuffix}`;
if (!fs.existsSync(pathNameOrg)) {
continue;
}
// move -> copy (in order to keep permissions when restore)
fs.renameSync(pathNameOrg, pathNameBak);
fs.copyFileSync(pathNameBak, pathNameOrg);
}
console.log(`backup suffix: "${backupSuffix}"`);
}
/**
* restore files
* @param backupSuffix suffix of backup directory
*/
function restore(backupSuffix: string): void {
const keyFileName = core.getInput("name");
const dirName = getSshDirectory();
for (const fileName of ["known_hosts", "config", keyFileName]) {
const pathNameOrg = path.join(dirName, fileName);
const pathNameBak = `${pathNameOrg}${backupSuffix}`;
if (!fs.existsSync(pathNameBak)) {
continue;
}
fs.rmSync(pathNameOrg);
fs.renameSync(pathNameBak, pathNameOrg);
}
}
/**