fastlane-plugin-firebase_management 1.0.2 → 1.1.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: 404070b44bafc2d2f983b13a4fa5bfba0eb5def830f66cad096c5fa57ca31021
4
- data.tar.gz: 994ad2f5533c6cde536087c34bf7919b61e09be431d7bd6878bded2c8905ec7f
3
+ metadata.gz: 3adaab65a73979fa08b173d84889365da61fdb15f548ad5b83e7d54fc18979fd
4
+ data.tar.gz: 3782786d5e38e74ac69f07625d07119b726ac43d6e4953843d745440f9f8b7f3
5
5
  SHA512:
6
- metadata.gz: 9c9ea8fb8317338d3480af2a8580fed3b0d1889880630deecd37b9efb862200194661f4e99a094faea98d9a5a12cb65e15ee000c30e70943b61a229c6707535d
7
- data.tar.gz: d864b0348120c4b3d3ec812820fc06bb52b2ae5db7cb0f4c9286f967ab4982be1e442ec40115dd91f81b02c99b07c3a22afe0effb363aff785453467b7ba96c6
6
+ metadata.gz: 433f1186d577d4482340978e34f2cb312ddc0a4da523909e20d1c55f96de19a3781d251dc19b2b02017486f99ed374286d7d6df03696d83a3a88e6ffdc1675e0
7
+ data.tar.gz: 5b01e928ebc18d00836f7995b206b51ad67d2908be74b91209b4a327de939122f4187daddce288fe0a7423f80bec3b45de1ef8a9e9e66872ef27b7289f91baa5
@@ -6,7 +6,15 @@ module Fastlane
6
6
  manager = FirebaseManagement::Manager.new
7
7
 
8
8
  # login
9
- api = manager.login(params[:service_account_json_path])
9
+ api = nil
10
+ if params[:service_account_json_path] != nil then
11
+ api = manager.serviceAccountLogin(params[:service_account_json_path])
12
+ elsif params[:email] != nil && params[:client_secret_json_path] != nil then
13
+ api = manager.userLogin(params[:email], params[:client_secret_json_path])
14
+ else
15
+ UI.error "You must define service_account_json_path or email with client_secret_json_path."
16
+ return nil
17
+ end
10
18
 
11
19
  # select project
12
20
  project_id = params[:project_id] || manager.select_project(nil)["projectId"]
@@ -88,10 +96,20 @@ module Fastlane
88
96
 
89
97
  def self.available_options
90
98
  [
99
+ FastlaneCore::ConfigItem.new(key: :email,
100
+ env_name: "FIREBASE_EMAIL",
101
+ description: "User's email to identify stored credentials",
102
+ optional: true),
103
+
104
+ FastlaneCore::ConfigItem.new(key: :client_secret_json_path,
105
+ env_name: "FIREBASE_CLIENT_SECRET_JSON_PATH",
106
+ description: "Path to client secret json file",
107
+ optional: true),
108
+
91
109
  FastlaneCore::ConfigItem.new(key: :service_account_json_path,
92
110
  env_name: "FIREBASE_SERVICE_ACCOUNT_JSON_PATH",
93
111
  description: "Path to service account json key",
94
- optional: false),
112
+ optional: true),
95
113
 
96
114
  FastlaneCore::ConfigItem.new(key: :project_id,
97
115
  env_name: "FIREBASE_PROJECT_ID",
@@ -6,7 +6,15 @@ module Fastlane
6
6
  manager = FirebaseManagement::Manager.new
7
7
 
8
8
  # login
9
- api = manager.login(params[:service_account_json_path])
9
+ api = nil
10
+ if params[:service_account_json_path] != nil then
11
+ api = manager.serviceAccountLogin(params[:service_account_json_path])
12
+ elsif params[:email] != nil && params[:client_secret_json_path] != nil then
13
+ api = manager.userLogin(params[:email], params[:client_secret_json_path])
14
+ else
15
+ UI.error "You must define service_account_json_path or email with client_secret_json_path."
16
+ return nil
17
+ end
10
18
 
11
19
  # select project
12
20
  project_id = params[:project_id] || manager.select_project(nil)["projectId"]
@@ -56,18 +64,31 @@ module Fastlane
56
64
 
57
65
  def self.available_options
58
66
  [
67
+ FastlaneCore::ConfigItem.new(key: :email,
68
+ env_name: "FIREBASE_EMAIL",
69
+ description: "User's email to identify stored credentials",
70
+ optional: true),
71
+
72
+ FastlaneCore::ConfigItem.new(key: :client_secret_json_path,
73
+ env_name: "FIREBASE_CLIENT_SECRET_JSON_PATH",
74
+ description: "Path to client secret json file",
75
+ optional: true),
76
+
59
77
  FastlaneCore::ConfigItem.new(key: :service_account_json_path,
60
78
  env_name: "FIREBASE_SERVICE_ACCOUNT_JSON_PATH",
61
79
  description: "Path to service account json key",
62
- optional: false),
80
+ optional: true),
81
+
63
82
  FastlaneCore::ConfigItem.new(key: :project_id,
64
83
  env_name: "FIREBASE_PROJECT_ID",
65
84
  description: "Project id",
66
85
  optional: true),
86
+
67
87
  FastlaneCore::ConfigItem.new(key: :app_id,
68
88
  env_name: "FIREBASE_APP_ID",
69
89
  description: "Project app id",
70
90
  optional: true),
91
+
71
92
  FastlaneCore::ConfigItem.new(key: :type,
72
93
  env_name: "FIREBASE_TYPE",
73
94
  description: "Type of client (ios, android)",
@@ -81,6 +102,7 @@ module Fastlane
81
102
  description: "Path for the downloaded config",
82
103
  optional: false,
83
104
  default_value: "./"),
105
+
84
106
  FastlaneCore::ConfigItem.new(key: :output_name,
85
107
  env_name: "FIREBASE_OUTPUT_NAME",
86
108
  description: "Name of the downloaded file",
@@ -6,23 +6,24 @@ module Fastlane
6
6
  manager = FirebaseManagement::Manager.new
7
7
 
8
8
  # login
9
- api = manager.login(params[:service_account_json_path])
9
+ api = nil
10
+ if params[:service_account_json_path] != nil then
11
+ api = manager.serviceAccountLogin(params[:service_account_json_path])
12
+ elsif params[:email] != nil && params[:client_secret_json_path] != nil then
13
+ api = manager.userLogin(params[:email], params[:client_secret_json_path])
14
+ else
15
+ UI.error "You must define service_account_json_path or email with client_secret_json_path."
16
+ return nil
17
+ end
10
18
 
11
19
  # download list of projects
12
20
  projects = api.project_list()
13
21
 
14
- # download list of apps for each project
15
- projects.map! { |project|
16
- project["iosApps"] = api.ios_app_list(project["projectId"])
17
- project["androidApps"] = api.android_app_list(project["projectId"])
18
- project
19
- }
20
-
21
22
  # create formatted output
22
23
  projects.each_with_index { |p, i|
23
24
  UI.message "#{i+1}. #{p["displayName"]} (#{p["projectId"]})"
24
25
 
25
- ios_apps = p["iosApps"] || []
26
+ ios_apps = api.ios_app_list(p["projectId"])
26
27
  if !ios_apps.empty? then
27
28
  UI.message " iOS"
28
29
  ios_apps.sort {|left, right| left["appId"] <=> right["appId"] }.each_with_index { |app, j|
@@ -30,7 +31,7 @@ module Fastlane
30
31
  }
31
32
  end
32
33
 
33
- android_apps = p["androidApps"] || []
34
+ android_apps = api.android_app_list(p["projectId"])
34
35
  if !android_apps.empty? then
35
36
  UI.message " Android"
36
37
  android_apps.sort {|left, right| left["appId"] <=> right["appId"] }.each_with_index { |app, j|
@@ -61,10 +62,20 @@ module Fastlane
61
62
 
62
63
  def self.available_options
63
64
  [
65
+ FastlaneCore::ConfigItem.new(key: :email,
66
+ env_name: "FIREBASE_EMAIL",
67
+ description: "User's email to identify stored credentials",
68
+ optional: true),
69
+
70
+ FastlaneCore::ConfigItem.new(key: :client_secret_json_path,
71
+ env_name: "FIREBASE_CLIENT_SECRET_JSON_PATH",
72
+ description: "Path to client secret json file",
73
+ optional: true),
74
+
64
75
  FastlaneCore::ConfigItem.new(key: :service_account_json_path,
65
- env_name: "FIREBASE_SERVICE_ACCOUNT_JSON_PATH",
66
- description: "Path to service account json key",
67
- optional: false
76
+ env_name: "FIREBASE_SERVICE_ACCOUNT_JSON_PATH",
77
+ description: "Path to service account json key",
78
+ optional: true
68
79
  )
69
80
  ]
70
81
  end
@@ -16,17 +16,8 @@ module Fastlane
16
16
  require 'googleauth'
17
17
  require 'httparty'
18
18
 
19
- def initialize(jsonPath)
19
+ def initialize(access_token)
20
20
  @base_url = "https://firebase.googleapis.com"
21
-
22
- scope = 'https://www.googleapis.com/auth/firebase https://www.googleapis.com/auth/cloud-platform'
23
-
24
- authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
25
- json_key_io: File.open(jsonPath),
26
- scope: scope
27
- )
28
-
29
- access_token = authorizer.fetch_access_token!["access_token"]
30
21
  @authorization_headers = {
31
22
  'Authorization' => 'Bearer ' + access_token
32
23
  }
@@ -2,14 +2,49 @@ module Fastlane
2
2
  module FirebaseManagement
3
3
  class Manager
4
4
 
5
- def login(jsonPath)
6
- begin
7
- #Api instance
8
- @api = FirebaseManagement::Api.new(jsonPath)
9
- @api
10
- rescue StandardError => e
11
- UI.crash! e
5
+ require 'googleauth'
6
+ require 'googleauth/stores/file_token_store'
7
+
8
+ def userLogin(email, client_secrets_path)
9
+
10
+ system 'mkdir -p ~/.google'
11
+
12
+ oob_uri = "urn:ietf:wg:oauth:2.0:oob"
13
+
14
+ scopes = [
15
+ 'https://www.googleapis.com/auth/firebase',
16
+ 'https://www.googleapis.com/auth/cloud-platform'
17
+ ]
18
+ client_id = Google::Auth::ClientId.from_file(client_secrets_path)
19
+ token_store = Google::Auth::Stores::FileTokenStore.new(:file => File.expand_path("~/.google/tokens.yaml"))
20
+ authorizer = Google::Auth::UserAuthorizer.new(client_id, scopes, token_store)
21
+
22
+ credentials = authorizer.get_credentials(email)
23
+ if credentials.nil?
24
+ url = authorizer.get_authorization_url(base_url: oob_uri)
25
+ UI.message "Open #{url} in your browser and enter the resulting code."
26
+
27
+ code = Fastlane::Actions::PromptAction.run(text: "Code: ")
28
+
29
+ credentials = authorizer.get_and_store_credentials_from_code(user_id: email, code: code, base_url: oob_uri)
12
30
  end
31
+
32
+ token = credentials.fetch_access_token!["access_token"]
33
+ @api = FirebaseManagement::Api.new(token)
34
+ @api
35
+ end
36
+
37
+ def serviceAccountLogin(jsonPath)
38
+ scope = 'https://www.googleapis.com/auth/firebase https://www.googleapis.com/auth/cloud-platform'
39
+
40
+ authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
41
+ json_key_io: File.open(jsonPath),
42
+ scope: scope
43
+ )
44
+
45
+ token = authorizer.fetch_access_token!["access_token"]
46
+ @api = FirebaseManagement::Api.new(token)
47
+ @api
13
48
  end
14
49
 
15
50
  def select_project(project_id)
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module FirebaseManagement
3
- VERSION = "1.0.2"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-firebase_management
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ackee