mirror of
https://github.com/mas-cli/mas
synced 2024-11-22 03:23:08 +00:00
Move code to more appropriate files.
Partial #533 Signed-off-by: Ross Goldberg <484615+rgoldberg@users.noreply.github.com>
This commit is contained in:
parent
e639341d11
commit
3d264675bf
6 changed files with 50 additions and 31 deletions
|
@ -32,12 +32,12 @@ extension MAS {
|
||||||
throw MASError.macOSUserMustBeRoot
|
throw MASError.macOSUserMustBeRoot
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let username = getSudoUsername() else {
|
guard let username = ProcessInfo.processInfo.sudoUsername else {
|
||||||
throw MASError.runtimeError("Could not determine the original username")
|
throw MASError.runtimeError("Could not determine the original username")
|
||||||
}
|
}
|
||||||
|
|
||||||
guard
|
guard
|
||||||
let uid = getSudoUID(),
|
let uid = ProcessInfo.processInfo.sudoUID,
|
||||||
seteuid(uid) == 0
|
seteuid(uid) == 0
|
||||||
else {
|
else {
|
||||||
throw MASError.runtimeError("Failed to switch effective user from 'root' to '\(username)'")
|
throw MASError.runtimeError("Failed to switch effective user from 'root' to '\(username)'")
|
||||||
|
|
|
@ -43,24 +43,6 @@ class SoftwareMapAppLibrary: AppLibrary {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSudoUsername() -> String? {
|
|
||||||
ProcessInfo.processInfo.environment["SUDO_USER"]
|
|
||||||
}
|
|
||||||
|
|
||||||
func getSudoUID() -> uid_t? {
|
|
||||||
guard let uid = ProcessInfo.processInfo.environment["SUDO_UID"] else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return uid_t(uid)
|
|
||||||
}
|
|
||||||
|
|
||||||
func getSudoGID() -> gid_t? {
|
|
||||||
guard let gid = ProcessInfo.processInfo.environment["SUDO_GID"] else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return gid_t(gid)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func getOwnerAndGroupOfItem(atPath path: String) throws -> (uid_t, gid_t) {
|
private func getOwnerAndGroupOfItem(atPath path: String) throws -> (uid_t, gid_t) {
|
||||||
do {
|
do {
|
||||||
let attributes = try FileManager.default.attributesOfItem(atPath: path)
|
let attributes = try FileManager.default.attributesOfItem(atPath: path)
|
||||||
|
@ -75,11 +57,11 @@ private func getOwnerAndGroupOfItem(atPath path: String) throws -> (uid_t, gid_t
|
||||||
}
|
}
|
||||||
|
|
||||||
private func chown(paths: [String]) throws -> [String: (uid_t, gid_t)] {
|
private func chown(paths: [String]) throws -> [String: (uid_t, gid_t)] {
|
||||||
guard let sudoUID = getSudoUID() else {
|
guard let sudoUID = ProcessInfo.processInfo.sudoUID else {
|
||||||
throw MASError.runtimeError("Failed to get original uid")
|
throw MASError.runtimeError("Failed to get original uid")
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let sudoGID = getSudoGID() else {
|
guard let sudoGID = ProcessInfo.processInfo.sudoGID else {
|
||||||
throw MASError.runtimeError("Failed to get original gid")
|
throw MASError.runtimeError("Failed to get original gid")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import ArgumentParser
|
import ArgumentParser
|
||||||
import Foundation
|
|
||||||
import PromiseKit
|
import PromiseKit
|
||||||
|
|
||||||
@main
|
@main
|
||||||
|
@ -55,11 +54,3 @@ struct MAS: ParsableCommand {
|
||||||
Self.initialize()
|
Self.initialize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typealias AppID = UInt64
|
|
||||||
|
|
||||||
extension NSNumber {
|
|
||||||
var appIDValue: AppID {
|
|
||||||
uint64Value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
17
Sources/mas/Models/AppID.swift
Normal file
17
Sources/mas/Models/AppID.swift
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
//
|
||||||
|
// AppID.swift
|
||||||
|
// mas
|
||||||
|
//
|
||||||
|
// Created by Ross Goldberg on 2024-10-29.
|
||||||
|
// Copyright © 2024 mas-cli. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
typealias AppID = UInt64
|
||||||
|
|
||||||
|
extension NSNumber {
|
||||||
|
var appIDValue: AppID {
|
||||||
|
uint64Value
|
||||||
|
}
|
||||||
|
}
|
29
Sources/mas/Utilities/ProcessInfo.swift
Normal file
29
Sources/mas/Utilities/ProcessInfo.swift
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// ProcessInfo.swift
|
||||||
|
// mas
|
||||||
|
//
|
||||||
|
// Created by Ross Goldberg on 2024-10-29.
|
||||||
|
// Copyright © 2024 mas-cli. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension ProcessInfo {
|
||||||
|
var sudoUsername: String? {
|
||||||
|
environment["SUDO_USER"]
|
||||||
|
}
|
||||||
|
|
||||||
|
var sudoUID: uid_t? {
|
||||||
|
guard let uid = environment["SUDO_UID"] else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return uid_t(uid)
|
||||||
|
}
|
||||||
|
|
||||||
|
var sudoGID: gid_t? {
|
||||||
|
guard let gid = environment["SUDO_GID"] else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return gid_t(gid)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue