Files
i2p.i2p/launchers/macosx/I2PLauncher/Utils/LaunchAgent.swift
meeh 45b4f426a8 OSX Launcher: Big rewrite of swift code where it now has the capability of creating services.
The router management has been much easier with this approach as it uses launchd to do the dirty work.
This code also uses java_home as a wrapper instead of locating the java binary by itself. This also contribute to the improvements.
2018-10-11 16:55:07 +00:00

125 lines
2.9 KiB
Swift

//
// LaunchAgent.swift
// I2PLauncher
//
// Created by Mikal Villa on 05/10/2018.
// Copyright © 2018 The I2P Project. All rights reserved.
//
import Foundation
public enum ProcessType: String, Codable {
case standard = "Standard"
case background = "Background"
case adaptive = "Adaptive"
case interactive = "Interactive"
}
public class LaunchAgent: Codable {
public var url: URL? = nil
// Basic Properties
public var label: String
public var disabled: Bool? = nil
public var enableGlobbing: Bool? = nil
public var program: String? = nil {
didSet {
if program != nil {
programArguments = nil
}
}
}
public var programArguments: [String]? = nil {
didSet {
guard let args = programArguments else {
return
}
if args.count == 1 {
self.program = args.first
programArguments = nil
} else {
program = nil
}
}
}
public var processType: ProcessType? = nil
// Program
public var workingDirectory: String? = nil
public var standardOutPath: String? = nil
public var standardErrorPath: String? = nil
public var environmentVariables: [String: String]? = nil
// Run Conditions
public var runAtLoad: Bool? = nil
public var startInterval: Int? = nil
public var onDemand: Bool? = nil
public var keepAlive: Bool? = nil
public var watchPaths: [String]? = nil
// Security
public var umask: Int? = nil
// System Daemon Security
public var groupName: String? = nil
public var userName: String? = nil
public var rootDirectory: String? = nil
// Run Constriants
public var launchOnlyOnce: Bool? = nil
public var limitLoadToSessionType: [String]? = nil
public init(label: String, program: [String]) {
self.label = label
if program.count == 1 {
self.program = program.first
} else {
self.programArguments = program
}
}
public convenience init(label: String, program: String...) {
self.init(label: label, program: program)
}
public enum CodingKeys: String, CodingKey {
case label = "Label"
case disabled = "Disabled"
case program = "Program"
case programArguments = "ProgramArguments"
// Program
case workingDirectory = "WorkingDirectory"
case standardOutPath = "StandardOutPath"
case standardErrorPath = "StandardErrorPath"
case environmentVariables = "EnvironmentVariables"
// Run Conditions
case runAtLoad = "RunAtLoad"
case startInterval = "StartInterval"
case onDemand = "OnDemand"
case keepAlive = "KeepAlive"
case watchPaths = "WatchPaths"
// Security
case umask = "Umask"
case groupName = "GroupName"
case userName = "UserName"
case rootDirectory = "RootDirectory"
// Run Constriants
case launchOnlyOnce = "LaunchOnlyOnce"
case limitLoadToSessionType = "LimitLoadToSessionType"
// Process type
case processType = "ProcessType"
}
}