headdesk 0.15.1 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d6af332045568797f79f7cc2c7699439ca7b0cc5f42fe13605ea0ac95129638
4
- data.tar.gz: 7e7877116e24fed277018590c3e21bd4a595b554b5a25cd4b09c584cfd8df3bf
3
+ metadata.gz: 43122fb0ed6467db6c61fd068aefcf8a66134cd07a281f5dd82cc11b416ec96d
4
+ data.tar.gz: ee42b2fd9dc5b4ff5e37435709d97ce2b2cd3a0075471377e6be85dde5d48b7f
5
5
  SHA512:
6
- metadata.gz: 1d974bcff24bc9a68dba5d21a2a92e525c3994b7bc883845caff969851f39aecadd1bc0a8056d8bb3b6901e4223cb1f57c72f6c07017069303d7acced4ecf2be
7
- data.tar.gz: 3135d661e46740d57fec4af8a4694b01368bb47da619fcc2d46a5c75373048b3e97852c7f6b8dd1a5d781e2ebf3a74bc4667cc50261a72b0e41c732dd45463c3
6
+ metadata.gz: b2db44040e759c6d6866adab9012405b790d935f3ccab7b45bbbe722d389f041c8740756a030501f5a6b4b607a05afd8e23cffe2e840d1820388314d228f0b30
7
+ data.tar.gz: ff9a2c645296db69e4b5ca9b0aa1e3361c6e517d0d3e154e6cd83998135ef22b759ae7dc7724923c9b34f534768c8125bb8738fce3ab2645af90ce8d5d40bdd3
data/Gemfile.lock CHANGED
@@ -1,11 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- headdesk (0.15.0)
4
+ headdesk (0.15.1)
5
5
  awesome_print (~> 1.8)
6
6
  gems (~> 1.1)
7
7
  nokogiri (~> 1.10)
8
8
  oily_png (~> 1.2)
9
+ plist (~> 3.5)
9
10
  thor (~> 0.20)
10
11
 
11
12
  GEM
@@ -34,13 +35,14 @@ GEM
34
35
  json (2.1.0)
35
36
  kwalify (0.7.2)
36
37
  mini_portile2 (2.4.0)
37
- nokogiri (1.10.7)
38
+ nokogiri (1.10.8)
38
39
  mini_portile2 (~> 2.4.0)
39
40
  oily_png (1.2.1)
40
41
  chunky_png (~> 1.3.7)
41
42
  parallel (1.13.0)
42
43
  parser (2.5.3.0)
43
44
  ast (~> 2.4.0)
45
+ plist (3.5.0)
44
46
  powerpack (0.1.2)
45
47
  psych (3.1.0)
46
48
  rainbow (3.0.0)
@@ -101,4 +103,4 @@ DEPENDENCIES
101
103
  simplecov (~> 0, >= 0.16.0)
102
104
 
103
105
  BUNDLED WITH
104
- 2.0.1
106
+ 2.1.4
data/headdesk.gemspec CHANGED
@@ -38,5 +38,6 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency 'gems', '~> 1.1'
39
39
  spec.add_dependency 'nokogiri', '~> 1.10'
40
40
  spec.add_dependency 'oily_png', '~> 1.2'
41
+ spec.add_dependency 'plist', '~> 3.5'
41
42
  spec.add_dependency 'thor', '~> 0.20'
42
43
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'headdesk/apk'
4
+ require 'headdesk/ipa'
4
5
 
5
6
  module Headdesk
6
7
  #
@@ -8,7 +9,14 @@ module Headdesk
8
9
  #
9
10
  class Analyze
10
11
  def self.at(path)
11
- Headdesk::Apk.new(path).analyze
12
+ begin
13
+ return Headdesk::Apk.new(path).analyze
14
+ rescue
15
+ end
16
+ begin
17
+ return Headdesk::Ipa.new(path).analyze
18
+ end
19
+ throw CliError.new('Path did not contain an unpacked IPA or APK.')
12
20
  end
13
21
  end
14
22
  end
@@ -11,11 +11,11 @@ module Headdesk
11
11
  attr_reader :report, :status, :apk, :ipa
12
12
 
13
13
  def self.for_apk
14
- APK.all
14
+ APK.all || []
15
15
  end
16
16
 
17
17
  def self.for_ipa
18
- IPA.all
18
+ IPA.all || []
19
19
  end
20
20
 
21
21
  def self.included(klass)
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'plist'
4
+
5
+ require 'headdesk/apk/class'
6
+ require 'headdesk/apk/resources'
7
+ require 'headdesk/check'
8
+ require 'headdesk/report'
9
+
10
+ module Headdesk
11
+ #
12
+ # Representation of an unzipped IPA file
13
+ #
14
+ class Ipa
15
+ attr_reader :info_plist, :url_schemes, :entitlements
16
+
17
+ Entitlements = Struct.new(:application_identifier, :aps_environment, :associated_domains, :team_identifier, :get_task_allow)
18
+
19
+ def initialize(path)
20
+ @path = path
21
+
22
+ apktool_yml = File.join(@path, 'apktool.yml').freeze
23
+ was_unpacked_by_apktool = File.exist?(apktool_yml)
24
+
25
+ @path = File.join(@path, 'unknown') if was_unpacked_by_apktool
26
+ @path = Dir[File.join(@path, 'Payload','*.app')].first
27
+
28
+ info_plist_path = File.join(@path, 'Info.plist').freeze
29
+
30
+ throw CliError.new('Path did not contain Info.plist') unless File.exist?(info_plist_path)
31
+
32
+ @info_plist = Plist.parse_xml(info_plist_path)
33
+
34
+ @url_schemes = []
35
+ @info_plist['CFBundleURLTypes'].each do |url_type|
36
+ url_type['CFBundleURLSchemes'].each do |url_scheme|
37
+ @url_schemes << url_scheme
38
+ end
39
+ end
40
+
41
+ entitlements = Plist.parse_xml(`codesign -d --entitlements :- #{@path}`)
42
+ @entitlements = Entitlements.new(
43
+ entitlements['application-identifier'],
44
+ entitlements['aps-environment'],
45
+ entitlements['com.apple.developer.associated-domains'],
46
+ entitlements['com.apple.developer.team-identifier'],
47
+ entitlements['get-task-allow']
48
+ )
49
+ end
50
+
51
+ def analyze
52
+ report = Headdesk::IPAReport.new(self)
53
+
54
+ Headdesk::Check.for_ipa.each do |check_type|
55
+ check = check_type.new(self)
56
+ report << check.process
57
+ end
58
+
59
+ # TODO: Associated domains
60
+ report
61
+ end
62
+ end
63
+ end
@@ -92,4 +92,33 @@ module Headdesk
92
92
  )
93
93
  end
94
94
  end
95
+
96
+ #
97
+ # Report from an IPA analysis
98
+ #
99
+ class IPAReport < Report
100
+ def initialize(ipa)
101
+ super()
102
+ @bundle_id = ipa.info_plist['CFBundleIdentifier']
103
+ @url_schemes = ipa.url_schemes
104
+ @entitlements = ipa.entitlements
105
+ end
106
+
107
+ def describe
108
+ <<~DESCRIPTION
109
+ URL Schemes: #{@url_schemes}
110
+ Team Id: #{@entitlements.team_identifier}
111
+ Associated Domains: #{@entitlements.associated_domains}
112
+ DESCRIPTION
113
+ end
114
+
115
+ def to_h
116
+ super.merge(
117
+ ipa: true,
118
+ url_schemes: @url_schemes,
119
+ team_id: @entitlements.team_identifier,
120
+ associated_domains: @entitlements.associated_domains
121
+ )
122
+ end
123
+ end
95
124
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Headdesk
4
- VERSION = '0.15.1'
4
+ VERSION = '0.16.0'
5
5
  APKTOOL_VERSION = '2.3.4'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: headdesk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.1
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pat Wilson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-07 00:00:00.000000000 Z
11
+ date: 2020-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -176,6 +176,20 @@ dependencies:
176
176
  - - "~>"
177
177
  - !ruby/object:Gem::Version
178
178
  version: '1.2'
179
+ - !ruby/object:Gem::Dependency
180
+ name: plist
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - "~>"
184
+ - !ruby/object:Gem::Version
185
+ version: '3.5'
186
+ type: :runtime
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '3.5'
179
193
  - !ruby/object:Gem::Dependency
180
194
  name: thor
181
195
  requirement: !ruby/object:Gem::Requirement
@@ -247,6 +261,7 @@ files:
247
261
  - lib/headdesk/data/facebook_sdk_versions.yaml
248
262
  - lib/headdesk/descriptionator.rb
249
263
  - lib/headdesk/descriptionator/resources.rb
264
+ - lib/headdesk/ipa.rb
250
265
  - lib/headdesk/report.rb
251
266
  - lib/headdesk/version.rb
252
267
  - lib/headdesk/versions.rb