Files
i2p.i2p/launchers/macosx/I2PLauncher/routermgmt/launchd/LaunchAgent.swift

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"
}
}