Skip to content

Commit 6ba2b75

Browse files
authored
feat: create_fcm_provider [messaging] (#132)
* Update createFcmProvider.cpp * create fcm provider function
1 parent dca4773 commit 6ba2b75

File tree

4 files changed

+71
-0
lines changed

4 files changed

+71
-0
lines changed

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,9 @@ getMessages: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/getMessages.cpp
254254
createMessage: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/createMessage.cpp
255255
@mkdir -p ./$(TESTS_DIR)
256256
$(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/createMessage $(SRCS) $(EXAMPLES_DIR)/messaging/messages/createMessage.cpp $(LDFLAGS)
257+
createFcmProvider: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/createFcmProvider.cpp
258+
@mkdir -p ./$(TESTS_DIR)
259+
$(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/createFcmProvider $(SRCS) $(EXAMPLES_DIR)/messaging/messages/createFcmProvider.cpp $(LDFLAGS)
257260
deleteProvider: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/deleteProvider.cpp
258261
@mkdir -p ./$(TESTS_DIR)
259262
$(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/deleteProvider $(SRCS) $(EXAMPLES_DIR)/messaging/messages/deleteProvider.cpp $(LDFLAGS)
@@ -273,6 +276,7 @@ listTargets: $(SRCS) $(EXAMPLES_DIR)/messaging/messages/listTargets.cpp
273276
@mkdir -p ./$(TESTS_DIR)
274277
$(CXX) $(CXXFLAGS) -o ./$(TESTS_DIR)/listTargets $(SRCS) $(EXAMPLES_DIR)/messaging/messages/listTargets.cpp $(LDFLAGS)
275278

279+
276280
# Messaging - Topics
277281
getTopic: $(SRCS) $(EXAMPLES_DIR)/messaging/topics/getTopic.cpp
278282
@mkdir -p ./$(TESTS_DIR)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include "Appwrite.hpp"
2+
#include <filesystem>
3+
#include <fstream>
4+
#include <iostream>
5+
#include <sstream>
6+
int main() {
7+
std::string projectId = "68853010003a3f4fc106";
8+
std::string apiKey = "";
9+
std::string providerId = "68a22c7b00325882e4e5";
10+
std::string name = "";
11+
std::ifstream file("");
12+
std::stringstream buffer;
13+
buffer << file.rdbuf();
14+
std::string service_account_json = buffer.str();
15+
bool enabled = true;
16+
try {
17+
Messaging messaging(projectId, apiKey);
18+
std::string response = messaging.createFcmProvider(
19+
providerId, name, service_account_json, enabled);
20+
std::cout << "FCM Provider Created!\nResponse: " << response << std::endl;
21+
} catch (const AppwriteException &ex) {
22+
std::cerr << "Exception: " << ex.what() << std::endl;
23+
}
24+
return 0;
25+
}

include/classes/Messaging.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,18 @@ class Messaging {
181181
*/
182182
std::string listProviders(Queries &queries);
183183

184+
/**
185+
* @brief Create a new Firebase Cloud Messaging provider.
186+
* @param providerId A unique Id for the provider.
187+
* @param name provider name.
188+
* @param service_account_json FCM service account JSON..
189+
* @param enabled Whether the provider should be active immediately after creation.
190+
* @return JSON response.
191+
*/
192+
std::string createFcmProvider(std::string &providerId, std::string name,
193+
std::string service_account_json,
194+
bool enabled);
195+
184196
/**
185197
* @brief Delete a provider.
186198
* @param providerId ID of the provider

src/services/Messaging.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,36 @@ std::string Messaging::updatePush(const std::string &messageId,
530530
}
531531
}
532532

533+
std::string Messaging::createFcmProvider(std::string &providerId,
534+
std::string name,
535+
std::string service_account_json,
536+
bool enabled) {
537+
if (providerId.empty()) {
538+
throw AppwriteException("Missing required parameter: 'providerId'");
539+
}
540+
if (name.empty()) {
541+
throw AppwriteException("Missing required parameter: 'name'");
542+
}
543+
std::string url = Config::API_BASE_URL + "/messaging/providers/fcm";
544+
std::string payload =
545+
R"({"providerId":")" + Utils::escapeJsonString(providerId) +
546+
R"(","name":")" + Utils::escapeJsonString(name) +
547+
R"(","serviceAccountJSON":)" + service_account_json + R"(,"enabled":)" +
548+
(enabled ? "true" : "false") + R"(})";
549+
std::vector<std::string> headers = Config::getHeaders(projectId);
550+
headers.push_back("X-Appwrite-Key: " + apiKey);
551+
headers.push_back("Content-Type: application/json");
552+
std::string response;
553+
int statusCode = Utils::postRequest(url, payload, headers, response);
554+
if (statusCode == HttpStatus::CREATED) {
555+
return response;
556+
} else {
557+
throw AppwriteException("Error Creating fcm provider. Status code: " +
558+
std::to_string(statusCode) +
559+
"\n\nResponse: " + response);
560+
}
561+
}
562+
533563
std::string Messaging::deleteProvider(const std::string &providerId) {
534564
if (providerId.empty()) {
535565
throw AppwriteException("Missing required parameter: providerId");

0 commit comments

Comments
 (0)