Skip to content

Commit

Permalink
make CLI helper compile with Swift 5
Browse files Browse the repository at this point in the history
  • Loading branch information
DivineDominion committed Nov 15, 2021
1 parent 9496079 commit d7bcca7
Show file tree
Hide file tree
Showing 7 changed files with 551 additions and 635 deletions.
22 changes: 9 additions & 13 deletions swift5/CocoaFob.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
501FA93D1D94174D00D8D68C /* CocoaFobError.swift in Headers */ = {isa = PBXBuildFile; fileRef = C739DCDF1B48E1450074D8F2 /* CocoaFobError.swift */; settings = {ATTRIBUTES = (Public, ); }; };
501FA9441D94178600D8D68C /* LicenseVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501FA9431D94178600D8D68C /* LicenseVerifier.swift */; };
501FA9451D94178C00D8D68C /* LicenseVerifier.swift in Headers */ = {isa = PBXBuildFile; fileRef = 501FA9431D94178600D8D68C /* LicenseVerifier.swift */; settings = {ATTRIBUTES = (Public, ); }; };
50C0B74727428E6300FE3511 /* String+CocoaFob.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7101B731B52C66D00A71BA8 /* String+CocoaFob.swift */; };
50C0B74827428E6300FE3511 /* LicenseGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C739DCDC1B48E0240074D8F2 /* LicenseGenerator.swift */; };
50C0B74927428ED700FE3511 /* LicenseVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501FA9431D94178600D8D68C /* LicenseVerifier.swift */; };
C7101B6E1B52C4A900A71BA8 /* CFUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7101B6D1B52C4A900A71BA8 /* CFUtil.swift */; };
C7101B6F1B52C4A900A71BA8 /* CFUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7101B6D1B52C4A900A71BA8 /* CFUtil.swift */; };
C7101B741B52C66D00A71BA8 /* String+CocoaFob.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7101B731B52C66D00A71BA8 /* String+CocoaFob.swift */; };
Expand All @@ -24,11 +27,8 @@
C739DCE11B48E1450074D8F2 /* CocoaFobError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C739DCDF1B48E1450074D8F2 /* CocoaFobError.swift */; };
C75B81D51B572E9E003D4BCD /* Functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75B81D41B572E9E003D4BCD /* Functions.swift */; };
C75B81D71B57300C003D4BCD /* Stderr.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75B81D61B57300C003D4BCD /* Stderr.swift */; };
C75B81DA1B5741D4003D4BCD /* CocoaFobLicVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75B81D91B5741D4003D4BCD /* CocoaFobLicVerifier.swift */; };
C75B81DC1B574207003D4BCD /* CFUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75B81DB1B574207003D4BCD /* CFUtil.swift */; };
C75B81DE1B57420F003D4BCD /* CocoaFobError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75B81DD1B57420F003D4BCD /* CocoaFobError.swift */; };
C75B81E01B57421A003D4BCD /* CocoaFobStringExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75B81DF1B57421A003D4BCD /* CocoaFobStringExt.swift */; };
C75B81E21B574222003D4BCD /* CocoaFobLicGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75B81E11B574222003D4BCD /* CocoaFobLicGenerator.swift */; };
C77D712A1B5496F00019F670 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77D71291B5496F00019F670 /* main.swift */; };
C7C398631B55F95200DCF644 /* CommandLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7C398601B55F95200DCF644 /* CommandLine.swift */; };
C7C398641B55F95200DCF644 /* Option.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7C398611B55F95200DCF644 /* Option.swift */; };
Expand Down Expand Up @@ -71,13 +71,10 @@
C739DCDF1B48E1450074D8F2 /* CocoaFobError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CocoaFobError.swift; sourceTree = "<group>"; };
C75B81D41B572E9E003D4BCD /* Functions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functions.swift; sourceTree = "<group>"; };
C75B81D61B57300C003D4BCD /* Stderr.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stderr.swift; sourceTree = "<group>"; };
C75B81D91B5741D4003D4BCD /* CocoaFobLicVerifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CocoaFobLicVerifier.swift; path = CocoaFob/CocoaFobLicVerifier.swift; sourceTree = SOURCE_ROOT; };
C75B81DB1B574207003D4BCD /* CFUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CFUtil.swift; path = CocoaFob/CFUtil.swift; sourceTree = SOURCE_ROOT; };
C75B81DD1B57420F003D4BCD /* CocoaFobError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CocoaFobError.swift; path = CocoaFob/CocoaFobError.swift; sourceTree = SOURCE_ROOT; };
C75B81DF1B57421A003D4BCD /* CocoaFobStringExt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CocoaFobStringExt.swift; path = CocoaFob/CocoaFobStringExt.swift; sourceTree = SOURCE_ROOT; };
C75B81E11B574222003D4BCD /* CocoaFobLicGenerator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CocoaFobLicGenerator.swift; path = CocoaFob/CocoaFobLicGenerator.swift; sourceTree = SOURCE_ROOT; };
C77D71271B5496F00019F670 /* cocoafob-keygen */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "cocoafob-keygen"; sourceTree = BUILT_PRODUCTS_DIR; };
C77D71291B5496F00019F670 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
C77D71291B5496F00019F670 /* main.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
C7C398601B55F95200DCF644 /* CommandLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CommandLine.swift; path = vendor/CommandLine/CommandLine/CommandLine.swift; sourceTree = SOURCE_ROOT; };
C7C398611B55F95200DCF644 /* Option.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Option.swift; path = vendor/CommandLine/CommandLine/Option.swift; sourceTree = SOURCE_ROOT; };
C7C398621B55F95200DCF644 /* StringExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = StringExtensions.swift; path = vendor/CommandLine/CommandLine/StringExtensions.swift; sourceTree = SOURCE_ROOT; };
Expand Down Expand Up @@ -157,9 +154,6 @@
children = (
C75B81DB1B574207003D4BCD /* CFUtil.swift */,
C75B81DD1B57420F003D4BCD /* CocoaFobError.swift */,
C75B81DF1B57421A003D4BCD /* CocoaFobStringExt.swift */,
C75B81D91B5741D4003D4BCD /* CocoaFobLicVerifier.swift */,
C75B81E11B574222003D4BCD /* CocoaFobLicGenerator.swift */,
);
name = CocoaFob;
sourceTree = "<group>";
Expand Down Expand Up @@ -354,14 +348,14 @@
buildActionMask = 2147483647;
files = (
C7C398651B55F95200DCF644 /* StringExtensions.swift in Sources */,
50C0B74827428E6300FE3511 /* LicenseGenerator.swift in Sources */,
50C0B74727428E6300FE3511 /* String+CocoaFob.swift in Sources */,
C77D712A1B5496F00019F670 /* main.swift in Sources */,
C7C398641B55F95200DCF644 /* Option.swift in Sources */,
C75B81D51B572E9E003D4BCD /* Functions.swift in Sources */,
C75B81DA1B5741D4003D4BCD /* CocoaFobLicVerifier.swift in Sources */,
C75B81DE1B57420F003D4BCD /* CocoaFobError.swift in Sources */,
C75B81E01B57421A003D4BCD /* CocoaFobStringExt.swift in Sources */,
C75B81E21B574222003D4BCD /* CocoaFobLicGenerator.swift in Sources */,
C75B81D71B57300C003D4BCD /* Stderr.swift in Sources */,
50C0B74927428ED700FE3511 /* LicenseVerifier.swift in Sources */,
C75B81DC1B574207003D4BCD /* CFUtil.swift in Sources */,
C7C398631B55F95200DCF644 /* CommandLine.swift in Sources */,
);
Expand Down Expand Up @@ -431,6 +425,7 @@
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
Expand Down Expand Up @@ -482,6 +477,7 @@
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
Expand Down
32 changes: 16 additions & 16 deletions swift5/cocoafob-keygen/Functions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,26 @@
import Foundation

func verifyRegKey(pubKeyPath: String, userName: String, regKey: String) throws -> Bool {
let pubKeyPEM = try NSString(contentsOfFile: pubKeyPath, encoding: NSUTF8StringEncoding) as String
if let verifier = CocoaFobLicVerifier(publicKeyPEM: pubKeyPEM) {
return verifier.verify(regKey, forName: userName)
}
return false
let pubKeyPEM = try String(contentsOfFile: pubKeyPath, encoding: .utf8)
if let verifier = LicenseVerifier(publicKeyPEM: pubKeyPEM) {
return verifier.verify(regKey, forName: userName)
}
return false
}

func generateRegKey(pvtKeyPath: String, userName: String) throws -> String {
let pvtKeyPEM = try NSString(contentsOfFile: pvtKeyPath, encoding: NSUTF8StringEncoding) as String
if let generator = CocoaFobLicGenerator(privateKeyPEM: pvtKeyPEM) {
return try generator.generate(userName)
}
throw CocoaFobError.Error
let pvtKeyPEM = try String(contentsOfFile: pvtKeyPath, encoding: .utf8)
if let generator = LicenseGenerator(privateKeyPEM: pvtKeyPEM) {
return try generator.generate(userName)
}
throw CocoaFobError.error
}

func generateRegURL(pvtKeyPath: String, userName: String, schema: String) throws -> String? {
let regKey = try generateRegKey(pvtKeyPath, userName: userName)
if let userNameData = userName.dataUsingEncoding(NSUTF8StringEncoding) {
let userNameBase64 = userNameData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
return "\(schema)://\(userNameBase64)/\(regKey)"
}
return nil
let regKey = try generateRegKey(pvtKeyPath: pvtKeyPath, userName: userName)
if let userNameData = userName.data(using: .utf8) {
let userNameBase64 = userNameData.base64EncodedData(options: .init(rawValue: 0))
return "\(schema)://\(userNameBase64)/\(regKey)"
}
return nil
}
8 changes: 4 additions & 4 deletions swift5/cocoafob-keygen/Stderr.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import Foundation

// From http://ericasadun.com/2015/06/09/swift-2-0-how-to-print/
public struct Stderr: OutputStreamType {
public mutating func write(string: String) {
fputs(string, stderr)
}
public struct Stderr: TextOutputStream {
public mutating func write(_ string: String) {
fputs(string, stderr)
}
}
106 changes: 53 additions & 53 deletions swift5/cocoafob-keygen/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,68 +23,68 @@ cli.addOptions(pubKey, pvtKey, userName, regKey, urlSchema, help)
var errStream = Stderr()

do {
try cli.parse()
try cli.parse()
} catch {
cli.printUsage(error)
exit(EX_USAGE)
cli.printUsage(error)
exit(EX_USAGE)
}

if let pub = pubKey.value {

if let user = userName.value, let reg = regKey.value {
do {
print("Name: \(user)\n Key: \(reg)")
if try verifyRegKey(pub, userName: user, regKey: reg) {
print("Registration is VALID")
} else {
print("Registration is INVALID")
exit(1)
}
} catch {
print("ERROR: Unable to verify registration key -- \(error)", &errStream)
exit(EX_DATAERR)

if let user = userName.value, let reg = regKey.value {
do {
print("Name: \(user)\n Key: \(reg)")
if try verifyRegKey(pubKeyPath: pub, userName: user, regKey: reg) {
print("Registration is VALID")
} else {
print("Registration is INVALID")
exit(1)
}
} catch {
print("ERROR: Unable to verify registration key -- \(error)", errStream)
exit(EX_DATAERR)
}
} else {
print("ERROR: Specifying a public key means 'verify' and requires both user name and registration key", errStream)
cli.printUsage()
exit(EX_USAGE)
}
} else {
print("ERROR: Specifying a public key means 'verify' and requires both user name and registration key", &errStream)
cli.printUsage()
exit(EX_USAGE)
}


} else if let pvt = pvtKey.value {

if let user = userName.value {
if regKey.value != nil {
print("WARNING: Specifying a private key means 'generate' and doesn't need a registration key", &errStream)
}
do {
if let schema = urlSchema.value {
if let url = try generateRegURL(pvt, userName: user, schema: schema) {
print(url)
} else {
print("ERROR: Unable to generate registration URL")

if let user = userName.value {
if regKey.value != nil {
print("WARNING: Specifying a private key means 'generate' and doesn't need a registration key", errStream)
}
do {
if let schema = urlSchema.value {
if let url = try generateRegURL(pvtKeyPath: pvt, userName: user, schema: schema) {
print(url)
} else {
print("ERROR: Unable to generate registration URL")
}
} else {
let reg = try generateRegKey(pvtKeyPath: pvt, userName: user)
print("Name: \(user)\n Key: \(reg)")
}
} catch {
print("ERROR: Unable to generate registration key -- \(error)", errStream)
exit(EX_DATAERR)
}
} else {
let reg = try generateRegKey(pvt, userName: user)
print("Name: \(user)\n Key: \(reg)")
}
} catch {
print("ERROR: Unable to generate registration key -- \(error)", &errStream)
exit(EX_DATAERR)
} else {
print("ERROR: Specifying a private key means 'verify' and requires a user name", errStream)
cli.printUsage()
exit(EX_USAGE)
}
} else {
print("ERROR: Specifying a private key means 'verify' and requires a user name", &errStream)
cli.printUsage()
exit(EX_USAGE)
}


} else {

if help.value {
cli.printUsage()
} else {
print("ERROR: Either private or public key must be provided", &errStream)
cli.printUsage()
exit(EX_USAGE)
}
if help.value {
cli.printUsage()
} else {
print("ERROR: Either private or public key must be provided", errStream)
cli.printUsage()
exit(EX_USAGE)
}

}
Loading

0 comments on commit d7bcca7

Please sign in to comment.