pem 0.3.0 → 0.3.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8fc19714bc242012832215934e264482b7975d74
4
- data.tar.gz: 400fe9cf403ec11b531ae781398d91452e2e4a5c
3
+ metadata.gz: 5113d3a0b7c34285b2ae53df264b7ff74c14d631
4
+ data.tar.gz: 25849e4e7815c1756c4cc3be3d09269a1199e920
5
5
  SHA512:
6
- metadata.gz: 6c027708274cd3614282aff3451340fccf8bcea5e2f785b4f0f9e62597d7d0f2ca3e153743672907eec56184259656b471e023c315ea47d3eb188febcb9d6156
7
- data.tar.gz: ec63a4e73973e37c7da00d698d3894e576c194a5781da3b7ac77730fce4a39bf62cf5b33ce3aeb84f1c37dc973a75a502c6adf907818e8a0f83487e8d1198412
6
+ metadata.gz: f385fe1bdfa680067687e8431345d315a5b6df8f67f3a7323551c190d3b15ba1ff4bccc9399e9fc75b303f4b9937a7a21406a2a7034da224327f93f64944a70d
7
+ data.tar.gz: 8551602780f0c56612f4b76a64e0628215bea5a75078b5f99f6056f13afa44a25890fb2f6ec8f16e5aa5df373094fc3ac3dfeab1a03cab093fc4120aa4e7e3e1
data/README.md CHANGED
@@ -109,7 +109,7 @@ There are 2 actions involved:
109
109
 
110
110
 
111
111
  ## How is my password stored?
112
- ```PEM``` uses the password manager from [```Deliver```](https://github.com/KrauseFx/deliver#can-i-trust-deliver). Take a look the [Deliver README](https://github.com/KrauseFx/deliver#can-i-trust-deliver) for more information.
112
+ ```PEM``` uses the [password manager](https://github.com/KrauseFx/CredentialsManager) from `fastlane`. Take a look the [CredentialsManager README](https://github.com/KrauseFx/CredentialsManager) for more information.
113
113
 
114
114
  # Tips
115
115
 
@@ -129,7 +129,7 @@ It will show you the ```pem``` files like this:
129
129
 
130
130
 
131
131
  # Need help?
132
- - If there is a technical problem with ```PEM```, submit an issue. Run ```pem --trace``` to get the stacktrace.
132
+ - If there is a technical problem with ```PEM```, submit an issue.
133
133
  - I'm available for contract work - drop me an email: pem@krausefx.com
134
134
 
135
135
  # License
data/bin/pem CHANGED
@@ -3,61 +3,69 @@
3
3
  $:.push File.expand_path("../../lib", __FILE__)
4
4
 
5
5
  require 'pem'
6
- require 'commander/import'
6
+ require 'commander'
7
7
  require 'credentials_manager/password_manager'
8
8
  require 'credentials_manager/appfile_config'
9
9
 
10
10
  HighLine.track_eof = false
11
11
 
12
+ class PemApplication
13
+ include Commander::Methods
12
14
 
13
- # Commander
14
- program :version, PEM::VERSION
15
- program :description, 'CLI for \'PEM\' - Automatically generate and renew your push notification profiles'
16
- program :help, 'Author', 'Felix Krause <pem@krausefx.com>'
17
- program :help, 'Website', 'http://fastlane.tools'
18
- program :help, 'GitHub', 'https://github.com/krausefx/PEM'
19
- program :help_formatter, :compact
15
+ def run
16
+ program :version, PEM::VERSION
17
+ program :description, 'CLI for \'PEM\' - Automatically generate and renew your push notification profiles'
18
+ program :help, 'Author', 'Felix Krause <pem@krausefx.com>'
19
+ program :help, 'Website', 'http://fastlane.tools'
20
+ program :help, 'GitHub', 'https://github.com/krausefx/PEM'
21
+ program :help_formatter, :compact
20
22
 
21
- global_option('--verbose') { $verbose = true }
23
+ always_trace!
22
24
 
25
+ global_option '--development', 'Renew the development push certificate instead of the production one'
26
+ global_option '-u', '--username STRING', 'Your Apple ID username'
27
+ global_option '-a', '--identifier STRING', String, 'The bundle identifier of your app'
23
28
 
24
- command :renew do |c|
25
- c.syntax = 'pem renew'
26
- c.description = 'Renews the certificate (in case it expired) and returns the path to the generated pem file'
29
+ command :renew do |c|
30
+ c.syntax = 'pem renew'
31
+ c.description = 'Renews the certificate (in case it expired) and shows the path to the generated pem file'
27
32
 
28
- c.option '-a', '--identifier STRING', String, 'The bundle identifier of your app'
29
- c.option '-u', '--username STRING', String, 'Your Apple ID username'
30
- c.option '--development', 'Renew the development push certificate instead of the production one'
33
+ c.action do |args, options|
34
+ app = app_identifier(options)
35
+ username(options)
31
36
 
32
- c.action do |args, options|
33
- app = app_identifier(options)
34
- username(options)
37
+ path = PEM::CertManager.new.run(app, !options.development)
35
38
 
36
- path = PEM::CertManager.new.run(app, !options.development)
37
-
38
- if path
39
- file_name = File.basename(path)
40
- output = "./#{file_name}"
41
- FileUtils.mv(path, output)
42
- puts output.green
39
+ if path
40
+ file_name = File.basename(path)
41
+ output = "./#{file_name}"
42
+ FileUtils.mv(path, output)
43
+ puts output.green
44
+ end
45
+ end
43
46
  end
47
+
48
+ default_command :renew
49
+
50
+ run!
44
51
  end
45
- end
46
52
 
47
- default_command :renew
53
+ def username(options)
54
+ user = options.username
55
+ user ||= ENV["PEM_USERNAME"]
56
+ user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
57
+
58
+ CredentialsManager::PasswordManager.shared_manager(user) if user
59
+ end
48
60
 
49
- def username(options)
50
- user = options.username
51
- user ||= ENV["PEM_USERNAME"]
52
- user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
53
-
54
- CredentialsManager::PasswordManager.shared_manager(user) if user
55
- end
61
+ def app_identifier(options)
62
+ value = options.identifier
63
+ value ||= ENV["PEM_APP_IDENTIFIER"]
64
+ value ||= CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)
65
+ value ||= ask("App Identifier (Bundle ID, e.g. com.krausefx.app): ")
66
+ return value
67
+ end
56
68
 
57
- def app_identifier(options)
58
- value = options.identifier
59
- value ||= ENV["PEM_APP_IDENTIFIER"]
60
- value ||= CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)
61
- value ||= ask("App Identifier (Bundle ID, e.g. com.krausefx.app): ")
62
- return value
63
69
  end
70
+
71
+ PemApplication.new.run
@@ -68,7 +68,7 @@ module PEM
68
68
  user ||= CredentialsManager::PasswordManager.shared_manager.username
69
69
  password ||= CredentialsManager::PasswordManager.shared_manager.password
70
70
 
71
- result = visit DEVELOPER_CENTER_URL
71
+ result = visit APP_IDS_URL
72
72
  raise "Could not open Developer Center" unless result['status'] == 'success'
73
73
 
74
74
  wait_for_elements(".button.blue").first.click
@@ -86,37 +86,17 @@ module PEM
86
86
  all(".button.large.blue.signin-button").first.click
87
87
 
88
88
  begin
89
- if page.has_content?"Select Your Team" # If the user is not on multiple teams
90
- team_id = ENV["PEM_TEAM_ID"]
91
- unless team_id
92
- Helper.log.info "You can store you preferred team using the environment variable `PEM_TEAM_ID`".green
93
- Helper.log.info "Your ID belongs to the following teams:".green
94
-
95
- teams = find("select").all('option') # Grab all the teams data
96
- teams.each_with_index do |val, index|
97
- team_text = val.text
98
- description_text = val.value
99
- description_text = " (#{description_text})" unless description_text.empty? # Include the team description if any
100
- Helper.log.info "\t#{index + 1}. #{team_text}#{description_text}".green # Print the team index and team name
101
- end
102
-
103
- team_index = ask("Please select the team number you would like to access: ".green)
104
- team_id = teams[team_index.to_i - 1].value # Select the desired team
105
- end
106
- within 'select' do
107
- find("option[value='#{team_id}']").select_option
89
+ if page.has_content?"Select Team" # If the user is not on multiple teams
90
+ select_team
108
91
  end
109
-
110
- all("#saveTeamSelection_saveTeamSelection").first.click
111
- end
112
92
  rescue => ex
113
93
  Helper.log.debug ex
114
94
  raise DeveloperCenterLoginError.new("Error loggin in user #{user}. User is on multiple teams and we were unable to correctly retrieve them.")
115
95
  end
116
96
 
117
97
  begin
118
-
119
- wait_for_elements('#aprerelease')
98
+ visit APP_IDS_URL
99
+ wait_for_elements('.ios.bundles.gridList')
120
100
  rescue => ex
121
101
  Helper.log.debug ex
122
102
  raise DeveloperCenterLoginError.new("Error logging in user #{user} with the given password. Make sure you entered them correctly.")
@@ -130,6 +110,49 @@ module PEM
130
110
  end
131
111
  end
132
112
 
113
+ def select_team
114
+ team_id = ENV["PEM_TEAM_ID"]
115
+ team_id = nil if team_id.to_s.length == 0
116
+
117
+ unless team_id
118
+ Helper.log.info "You can store you preferred team using the environment variable `PEM_TEAM_ID`".green
119
+ Helper.log.info "Your ID belongs to the following teams:".green
120
+ end
121
+
122
+ available_options = []
123
+
124
+ teams = find("div.input").all('.team-value') # Grab all the teams data
125
+ teams.each_with_index do |val, index|
126
+ current_team_id = '"' + val.find("input").value + '"'
127
+ team_text = val.find(".label-primary").text
128
+ description_text = val.find(".label-secondary").text
129
+ description_text = "(#{description_text})" unless description_text.empty? # Include the team description if any
130
+ index_text = (index + 1).to_s + "."
131
+
132
+ available_options << [index_text, current_team_id, team_text, description_text].join(" ")
133
+ end
134
+
135
+ unless team_id
136
+ puts available_options.join("\n").green
137
+ team_index = ask("Please select the team number you would like to access: ".green)
138
+ team_id = teams[team_index.to_i - 1].find(".radio").value
139
+ end
140
+
141
+ team_button = first(:xpath, "//input[@type='radio' and @value='#{team_id}']") # Select the desired team
142
+ if team_button
143
+ team_button.click
144
+ else
145
+ Helper.log.fatal "Could not find given Team. Available options: ".red
146
+ puts available_options.join("\n").yellow
147
+ raise DeveloperCenterLoginError.new("Error finding given team #{team_id}.".red)
148
+ end
149
+
150
+ all(".button.large.blue.submit").first.click
151
+
152
+ result = visit APP_IDS_URL
153
+ raise "Could not open Developer Center" unless result['status'] == 'success'
154
+ end
155
+
133
156
  # This method will enable push for the given app
134
157
  # and download the cer file in any case, no matter if it existed before or not
135
158
  # @return the path to the push file
@@ -160,6 +183,7 @@ module PEM
160
183
  def open_app_page(app_identifier)
161
184
  begin
162
185
  visit APP_IDS_URL
186
+ sleep 5
163
187
 
164
188
  apps = all(:xpath, "//td[@title='#{app_identifier}']")
165
189
  if apps.count == 1
@@ -264,7 +288,6 @@ module PEM
264
288
 
265
289
  counter += 1
266
290
  if counter > 100
267
- Helper.log.debug page.html
268
291
  Helper.log.debug caller
269
292
  raise DeveloperCenterGeneralError.new("Couldn't find element '#{name}' after waiting for quite some time")
270
293
  end
data/lib/pem/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module PEM
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-15 00:00:00.000000000 Z
11
+ date: 2015-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json