Skip to content

Commit 09b036b

Browse files
lividclaude
andcommitted
Add SSH rsync as optional publishing destination (#453)
Publish site content via SSH rsync in parallel with IPNS. Includes sandbox-safe SSH key import, --delete toggle, rsync log window with auto-refresh and colored output, and Tools menu entry. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 1191259 commit 09b036b

9 files changed

Lines changed: 815 additions & 104 deletions

File tree

Planet.xcodeproj/project.pbxproj

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@
6060
2A3C6E792C22A3AA007B2CCD /* IPFSStatusWindowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3C6E702C22A3AA007B2CCD /* IPFSStatusWindowManager.swift */; };
6161
2A3D28C22C6A80DE005ABCF5 /* PlanetAPIConsoleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3D28C12C6A80DE005ABCF5 /* PlanetAPIConsoleView.swift */; };
6262
2A3D28C32C6A80DE005ABCF5 /* PlanetAPIConsoleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3D28C12C6A80DE005ABCF5 /* PlanetAPIConsoleView.swift */; };
63+
5F244DE6913A63FF00000004 /* SSHRsyncLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F244DE6913A63FF00000001 /* SSHRsyncLogger.swift */; };
64+
76B55B235F244DE6913A63FF /* SSHRsyncLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F244DE6913A63FF00000001 /* SSHRsyncLogger.swift */; };
65+
5F244DE6913A63FF00000005 /* SSHRsyncLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F244DE6913A63FF00000002 /* SSHRsyncLogView.swift */; };
66+
E77C82F7465746DF88F58625 /* SSHRsyncLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F244DE6913A63FF00000002 /* SSHRsyncLogView.swift */; };
6367
2A3D28C82C6A80F5005ABCF5 /* PlanetAPIConsoleViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3D28C72C6A80F5005ABCF5 /* PlanetAPIConsoleViewModel.swift */; };
6468
2A3D28C92C6A80F5005ABCF5 /* PlanetAPIConsoleViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3D28C72C6A80F5005ABCF5 /* PlanetAPIConsoleViewModel.swift */; };
6569
2A3D28CB2C6A8137005ABCF5 /* PlanetAPILogMiddleware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3D28CA2C6A8137005ABCF5 /* PlanetAPILogMiddleware.swift */; };
@@ -625,6 +629,8 @@
625629
2A3C6E6F2C22A3AA007B2CCD /* IPFSStatusWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IPFSStatusWindowController.swift; sourceTree = "<group>"; };
626630
2A3C6E702C22A3AA007B2CCD /* IPFSStatusWindowManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IPFSStatusWindowManager.swift; sourceTree = "<group>"; };
627631
2A3D28C12C6A80DE005ABCF5 /* PlanetAPIConsoleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanetAPIConsoleView.swift; sourceTree = "<group>"; };
632+
5F244DE6913A63FF00000001 /* SSHRsyncLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SSHRsyncLogger.swift; sourceTree = "<group>"; };
633+
5F244DE6913A63FF00000002 /* SSHRsyncLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SSHRsyncLogView.swift; sourceTree = "<group>"; };
628634
2A3D28C72C6A80F5005ABCF5 /* PlanetAPIConsoleViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanetAPIConsoleViewModel.swift; sourceTree = "<group>"; };
629635
2A3D28CA2C6A8137005ABCF5 /* PlanetAPILogMiddleware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanetAPILogMiddleware.swift; sourceTree = "<group>"; };
630636
2A4164D329E64755009BFC24 /* PlanetQuickShareView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanetQuickShareView.swift; sourceTree = "<group>"; };
@@ -1205,6 +1211,7 @@
12051211
children = (
12061212
6A7F60642B21A35000475731 /* Search */,
12071213
6A1F97A42ADDDDE500C75625 /* API */,
1214+
5F244DE6913A63FF00000003 /* SSHRsync */,
12081215
6A1FD5042A75A67C00391972 /* Art */,
12091216
2AC4996927BB987B00F1C2D1 /* Info.plist */,
12101217
E8B4FE442A8D146100C01E94 /* InfoPlist.strings */,
@@ -1400,6 +1407,15 @@
14001407
path = dApps;
14011408
sourceTree = "<group>";
14021409
};
1410+
5F244DE6913A63FF00000003 /* SSHRsync */ = {
1411+
isa = PBXGroup;
1412+
children = (
1413+
5F244DE6913A63FF00000001 /* SSHRsyncLogger.swift */,
1414+
5F244DE6913A63FF00000002 /* SSHRsyncLogView.swift */,
1415+
);
1416+
path = SSHRsync;
1417+
sourceTree = "<group>";
1418+
};
14031419
6A1F97A42ADDDDE500C75625 /* API */ = {
14041420
isa = PBXGroup;
14051421
children = (
@@ -2047,6 +2063,8 @@
20472063
2A95E6672A19A3AF001288B8 /* TBWindow.swift in Sources */,
20482064
2A95E64A2A19A398001288B8 /* PFDashboardSidebarView.swift in Sources */,
20492065
2A3D28C22C6A80DE005ABCF5 /* PlanetAPIConsoleView.swift in Sources */,
2066+
5F244DE6913A63FF00000004 /* SSHRsyncLogger.swift in Sources */,
2067+
5F244DE6913A63FF00000005 /* SSHRsyncLogView.swift in Sources */,
20502068
2A8E08582BF4B190002D0C03 /* IPFSOpenWindowController.swift in Sources */,
20512069
2A95E65E2A19A3AA001288B8 /* TemplateBrowserSidebar.swift in Sources */,
20522070
6A0326A02C81DF2100FEDD55 /* String+EthereumChecksumAddress.swift in Sources */,
@@ -2311,6 +2329,8 @@
23112329
6A61D5E72B23A234007F761E /* CapsuleBar.swift in Sources */,
23122330
72114717FB02C931CE9E08E9 /* MyPlanetSidebarItem.swift in Sources */,
23132331
2A3D28C32C6A80DE005ABCF5 /* PlanetAPIConsoleView.swift in Sources */,
2332+
76B55B235F244DE6913A63FF /* SSHRsyncLogger.swift in Sources */,
2333+
E77C82F7465746DF88F58625 /* SSHRsyncLogView.swift in Sources */,
23142334
2A4AE87A2A89EF3600A27B5B /* GroupIndicatorView.swift in Sources */,
23152335
6AB6E4FB2915227600F17328 /* WalletManager.swift in Sources */,
23162336
2A7022F22897DF4600022F13 /* PlanetDownloadsWindow.swift in Sources */,

Planet/Entities/BackupMyPlanetModel.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,8 @@ struct BackupMyPlanetModel: Codable {
6464
let doNotIndex: Bool?
6565
let prewarmNewPost: Bool?
6666
let publishAsIPNS: Bool?
67+
let sshRsyncEnabled: Bool?
68+
let sshRsyncDestination: String?
69+
let sshRsyncKeyPath: String?
70+
let sshRsyncDeleteEnabled: Bool?
6771
}

0 commit comments

Comments
 (0)