mobile-secrets 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/mobile-secrets.rb +20 -10
- data/lib/resources/SecretsSwift.erb +1 -0
- data/lib/resources/SecretsSwiftEmpty.erb +31 -0
- data/lib/src/secrets_handler.rb +7 -5
- data/lib/src/source_renderer.rb +11 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0f4f08928281f7ec09b0f307fde69ac6a240fc006cdb398741b94b94906952f6
|
|
4
|
+
data.tar.gz: 2b28b5fccdd4b442bf229733eaad00e170baee9e4c5505a925761f947929bda8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2f7805f87c8cf0713394b29e4f40da1654661ea736640de9fb59f95b8aff7e2928b5941a67f993af709c3b31cb62f4d1f1fbcbca88bd856303b05ddb9966ed13
|
|
7
|
+
data.tar.gz: 693fabe5ec237be1fcaf50ca841b60df85dccde3d017bf97e059cffe8ad6b216e8656be7ebef97688fb6e25318e93bfd36cbc09b2752fbd69ba42d39be1f72a3
|
data/lib/mobile-secrets.rb
CHANGED
|
@@ -20,15 +20,16 @@ module MobileSecrets
|
|
|
20
20
|
|
|
21
21
|
def options
|
|
22
22
|
opt = ""
|
|
23
|
-
opt << "--init-gpg PATH \t\tInitialize GPG in the directory.\n"
|
|
24
|
-
opt << "--create-template \t\tCreates a template yml file to configure the MobileSecrets\n"
|
|
25
|
-
opt << "--import SECRETS_PATH \t\tAdds MobileSecrets to GPG secrets\n"
|
|
26
|
-
opt << "--export PATH \
|
|
27
|
-
opt << "--encrypt-file FILE PASSWORD \tEncrypt a single file with AES\n"
|
|
28
|
-
opt << "--
|
|
23
|
+
opt << "--init-gpg PATH \t\t\tInitialize GPG in the directory.\n"
|
|
24
|
+
opt << "--create-template \t\t\tCreates a template yml file to configure the MobileSecrets\n"
|
|
25
|
+
opt << "--import SECRETS_PATH \t\t\tAdds MobileSecrets to GPG secrets\n"
|
|
26
|
+
opt << "--export PATH opt: ENCRYPTED_FILE_PATH \tCreates source file with obfuscated secrets at given PATH\n"
|
|
27
|
+
opt << "--encrypt-file FILE PASSWORD \t\tEncrypt a single file with AES\n"
|
|
28
|
+
opt << "--empty PATH \t\t\t\tGenerates a Secrets file without any data in it\n"
|
|
29
|
+
opt << "--usage \t\t\t\tManual for using MobileSecrets.\n\n"
|
|
29
30
|
opt << "Examples:\n"
|
|
30
31
|
opt << "--import \"./MobileSecrets.yml\"\n"
|
|
31
|
-
opt << "--export \"./Project/Src
|
|
32
|
+
opt << "--export \"./Project/Src\\n"
|
|
32
33
|
opt << "--init-gpg \".\""
|
|
33
34
|
opt
|
|
34
35
|
end
|
|
@@ -49,22 +50,31 @@ module MobileSecrets
|
|
|
49
50
|
FileUtils.cp("#{__dir__}/../lib/resources/example.yml", "#{Dir.pwd}#{File::SEPARATOR}MobileSecrets.yml")
|
|
50
51
|
when "--export"
|
|
51
52
|
return print_options if argv_1 == nil
|
|
53
|
+
encrypted_file_path = argv_2 ||= "secrets.gpg"
|
|
52
54
|
|
|
53
55
|
secrets_handler = MobileSecrets::SecretsHandler.new
|
|
54
|
-
secrets_handler.export_secrets argv_1
|
|
56
|
+
secrets_handler.export_secrets argv_1, argv_2
|
|
55
57
|
when "--init-gpg"
|
|
56
58
|
return print_options if argv_1 == nil
|
|
57
59
|
|
|
58
60
|
Dotgpg::Cli.new.init(argv_1)
|
|
59
61
|
when "--import"
|
|
60
62
|
return print_options if argv_1 == nil
|
|
61
|
-
|
|
63
|
+
gpg_file = argv_2 ||= "secrets.gpg"
|
|
62
64
|
file = IO.read argv_1
|
|
63
|
-
MobileSecrets::SecretsHandler.new.encrypt
|
|
65
|
+
MobileSecrets::SecretsHandler.new.encrypt gpg_file, file, nil
|
|
64
66
|
when "--encrypt-file"
|
|
65
67
|
file = argv_1
|
|
66
68
|
password = argv_2
|
|
67
69
|
MobileSecrets::SecretsHandler.new.encrypt_file password, file, "#{file}.enc"
|
|
70
|
+
when "--empty"
|
|
71
|
+
return print_options if argv_1 == nil
|
|
72
|
+
file_path = argv_1
|
|
73
|
+
|
|
74
|
+
MobileSecrets::SourceRenderer.new("swift").render_empty_template "#{file_path}/secrets.swift"
|
|
75
|
+
when "--edit"
|
|
76
|
+
return print_options if argv_1 == nil
|
|
77
|
+
exec("dotgpg edit #{argv_1}")
|
|
68
78
|
when "--usage"
|
|
69
79
|
puts usage
|
|
70
80
|
else
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Autogenerated file by Mobile Secrets
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import Foundation
|
|
6
|
+
|
|
7
|
+
// swiftlint:disable all
|
|
8
|
+
class Secrets {
|
|
9
|
+
static let standard = Secrets()
|
|
10
|
+
private let bytes: [[UInt8]] = [[0]]
|
|
11
|
+
|
|
12
|
+
private init() {}
|
|
13
|
+
|
|
14
|
+
func string(forKey key: String, password: String? = nil) -> String? {
|
|
15
|
+
let pwdBytes = password == nil ? bytes[0] : password?.map({ c in c.asciiValue ?? 0 })
|
|
16
|
+
guard let index = bytes.firstIndex(where: { String(data: Data($0), encoding: .utf8) == key }),
|
|
17
|
+
let pwd = pwdBytes,
|
|
18
|
+
let value = decrypt(bytes[index + 1], password: pwd) else { return nil }
|
|
19
|
+
|
|
20
|
+
return String(data: Data(value), encoding: .utf8)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private func decrypt(_ input: [UInt8], password: [UInt8]) -> [UInt8]? {
|
|
24
|
+
guard !password.isEmpty else { return nil }
|
|
25
|
+
var output = [UInt8]()
|
|
26
|
+
for byte in input.enumerated() {
|
|
27
|
+
output.append(byte.element ^ password[byte.offset % password.count])
|
|
28
|
+
}
|
|
29
|
+
return output
|
|
30
|
+
}
|
|
31
|
+
}
|
data/lib/src/secrets_handler.rb
CHANGED
|
@@ -8,12 +8,13 @@ require_relative '../src/source_renderer'
|
|
|
8
8
|
module MobileSecrets
|
|
9
9
|
class SecretsHandler
|
|
10
10
|
|
|
11
|
-
def export_secrets path
|
|
12
|
-
decrypted_config = decrypt_secrets()
|
|
11
|
+
def export_secrets path, from_encrypted_file_name
|
|
12
|
+
decrypted_config = decrypt_secrets(from_encrypted_file_name)
|
|
13
13
|
file_names_bytes, secrets_bytes = process_yaml_config decrypted_config
|
|
14
14
|
|
|
15
15
|
renderer = MobileSecrets::SourceRenderer.new "swift"
|
|
16
16
|
renderer.render_template secrets_bytes, file_names_bytes, "#{path}/secrets.swift"
|
|
17
|
+
decrypted_config
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
def process_yaml_config yaml_string
|
|
@@ -51,6 +52,7 @@ module MobileSecrets
|
|
|
51
52
|
|
|
52
53
|
def encrypt_file password, file, output_file_path
|
|
53
54
|
encryptor = FileHandler.new password
|
|
55
|
+
abort("Configuration contains file #{file} that cannot be found! Please check your mobile-secrets configuration or add the file into directory.") unless File.exist? file
|
|
54
56
|
encrypted_content = encryptor.encrypt file
|
|
55
57
|
|
|
56
58
|
File.open(output_file_path, "wb") { |f| f.write encrypted_content }
|
|
@@ -58,10 +60,10 @@ module MobileSecrets
|
|
|
58
60
|
|
|
59
61
|
private
|
|
60
62
|
|
|
61
|
-
def decrypt_secrets
|
|
62
|
-
gpg = Dotgpg::Dir.
|
|
63
|
+
def decrypt_secrets encrypted_file_name
|
|
64
|
+
gpg = Dotgpg::Dir.closest encrypted_file_name
|
|
63
65
|
output = StringIO.new
|
|
64
|
-
gpg.decrypt "#{Dir.pwd}
|
|
66
|
+
gpg.decrypt "#{Dir.pwd}/#{encrypted_file_name}", output
|
|
65
67
|
output.string
|
|
66
68
|
end
|
|
67
69
|
|
data/lib/src/source_renderer.rb
CHANGED
|
@@ -20,6 +20,17 @@ module MobileSecrets
|
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
|
+
|
|
24
|
+
def render_empty_template output_file_path
|
|
25
|
+
template = File.read("#{__dir__}/../resources/SecretsSwiftEmpty.erb")
|
|
26
|
+
|
|
27
|
+
case @source_type
|
|
28
|
+
when "swift"
|
|
29
|
+
File.open(output_file_path, "w") do |file|
|
|
30
|
+
file.puts template
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
23
34
|
|
|
24
35
|
end
|
|
25
36
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mobile-secrets
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Cyril Cermak
|
|
@@ -36,6 +36,7 @@ files:
|
|
|
36
36
|
- bin/mobile-secrets
|
|
37
37
|
- lib/mobile-secrets.rb
|
|
38
38
|
- lib/resources/SecretsSwift.erb
|
|
39
|
+
- lib/resources/SecretsSwiftEmpty.erb
|
|
39
40
|
- lib/resources/example.yml
|
|
40
41
|
- lib/src/file_handler.rb
|
|
41
42
|
- lib/src/obfuscator.rb
|
|
@@ -60,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
60
61
|
- !ruby/object:Gem::Version
|
|
61
62
|
version: '0'
|
|
62
63
|
requirements: []
|
|
63
|
-
rubygems_version: 3.0.
|
|
64
|
+
rubygems_version: 3.0.8
|
|
64
65
|
signing_key:
|
|
65
66
|
specification_version: 4
|
|
66
67
|
summary: mobile-secrets tool for handling your mobile secrets
|