Class: Fastlane::FirebaseManagementApi::Api

Inherits:
Object
  • Object
show all
Defined in:
lib/fastlane/plugin/firebase_management_api/lib/api.rb

Defined Under Namespace

Classes: BadRequestError, LoginError

Instance Method Summary collapse

Constructor Details

#initialize(access_token) ⇒ Api

Returns a new instance of Api.



19
20
21
22
23
24
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 19

def initialize(access_token)
	@base_url = "https://firebase.googleapis.com"
	@authorization_headers = {
		'Authorization' => 'Bearer ' + access_token
	}
end

Instance Method Details

#add_android_app(project_id, package_name, app_name) ⇒ Object



97
98
99
100
101
102
103
104
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 97

def add_android_app(project_id, package_name, app_name)
	parameters = {
		"packageName" => package_name,
		"displayName" => app_name || ""
	}

	request_json("v1beta1/projects/#{project_id}/androidApps", :post, parameters)
end

#add_ios_app(project_id, bundle_id, app_name) ⇒ Object



88
89
90
91
92
93
94
95
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 88

def add_ios_app(project_id, bundle_id, app_name)
	parameters = {
		"bundleId" => bundle_id,
		"displayName" => app_name || ""
	}
	
	request_json("v1beta1/projects/#{project_id}/iosApps", :post, parameters)
end

#android_app_list(project_id) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 73

def android_app_list(project_id)
        UI.verbose "Retrieving app list for project #{project_id}"
        apps = []
        pageToken = nil
        loop do
                url = "v1beta1/projects/#{project_id}/androidApps" + (pageToken ? "?pageToken=#{pageToken}" : "")
                json = request_json(url)
                apps.concat(json["apps"] || [])
                pageToken = json["nextPageToken"]
                break if !pageToken
        end
        UI.verbose "Found #{apps.count} apps"
        apps
end

#download_android_config_file(project_id, app_id) ⇒ Object



139
140
141
142
143
144
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 139

def download_android_config_file(project_id, app_id)
	UI.verbose "Downloading config file"
	json = request_json("v1beta1/projects/#{project_id}/androidApps/#{app_id}/config")
	UI.verbose "Successfuly downloaded #{json["configFilename"]}"
	json
end

#download_ios_config_file(project_id, app_id) ⇒ Object



132
133
134
135
136
137
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 132

def download_ios_config_file(project_id, app_id)
	UI.verbose "Downloading config file"
	json = request_json("v1beta1/projects/#{project_id}/iosApps/#{app_id}/config")
	UI.verbose "Successfuly downloaded #{json["configFilename"]}"
	json
end

#ios_app_list(project_id, params = nil) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 57

def ios_app_list(project_id, params = nil)
        UI.verbose "Retrieving app list for project #{project_id}"

        apps = []
        pageToken = nil
        loop do
                url = "v1beta1/projects/#{project_id}/iosApps" + (pageToken ? "?pageToken=#{pageToken}" : "")
                json = request_json(url)
                apps.concat(json["apps"] || [])
                pageToken = json["nextPageToken"]
                break if !pageToken
        end
        UI.verbose "Found #{apps.count} apps"
        apps
end

#project_listObject



49
50
51
52
53
54
55
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 49

def project_list
	UI.verbose "Retrieving project list"
	json = request_json("v1beta1/projects")
	projects = json["results"] || []
	UI.verbose "Found #{projects.count} projects"
	projects
end

#request_json(path, method = :get, parameters = Hash.new, headers = Hash.new) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 26

def request_json(path, method = :get, parameters = Hash.new, headers = Hash.new)
	begin
		if method == :get then
			response = HTTParty.get("#{@base_url}/#{path}", headers: headers.merge(@authorization_headers), format: :plain)
		elsif method == :post then
			headers['Content-Type'] = 'application/json'
			response = HTTParty.post("#{@base_url}/#{path}", headers: headers.merge(@authorization_headers), body: parameters.to_json, format: :plain)
		end

		case response.code
			when 400...600
				UI.crash! response
			else
				JSON.parse(response)
		end

	rescue HTTParty::Error => e
		UI.crash! e.response.body
	rescue StandardError => e
		UI.crash! e
	end
end

#upload_certificate(project_number, client_id, type, certificate_value, certificate_password) ⇒ Object



118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 118

def upload_certificate(project_number, client_id, type, certificate_value, certificate_password)
	
	prefix = type == :development ? "debug" : "prod"

	parameters = {
		"#{prefix}ApnsCertificate" => { 
			"certificateValue" => certificate_value,
			"apnsPassword" => certificate_password 
		}
	}

	json = request_json("v1/projects/#{project_number}/clients/#{client_id}:setApnsCertificate", :post, parameters)
end

#upload_sha(project_id, app_id, sha_hash, cert_type) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
# File 'lib/fastlane/plugin/firebase_management_api/lib/api.rb', line 106

def upload_sha(project_id, app_id, sha_hash, cert_type)
	UI.verbose "Uploading sha"
	parameters = {
		"shaHash" => sha_hash,
		"certType" => cert_type,
	}

	json = request_json("v1beta1/projects/#{project_id}/androidApps/#{app_id}/sha", :post, parameters)
	UI.verbose "Successfuly uploaded sha"
	json
end