| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PERIDOT_LIB_FIREBASE_AUTH_TESTING_CREDENTIALS_H_ |
| #define PERIDOT_LIB_FIREBASE_AUTH_TESTING_CREDENTIALS_H_ |
| |
| #include <string> |
| |
| #include <lib/fxl/strings/string_view.h> |
| #include <openssl/pem.h> |
| #include <rapidjson/document.h> |
| |
| namespace service_account { |
| |
| // Credentials to access a Google cloud service. |
| // |
| // A Firebase service account with admin access to the project is automatically |
| // created for every Firebase project. |
| // |
| // In order to download the JSON credential file corresponding to this account, |
| // visit `Settings > Service accounts > Firebase admin SDK` in the Firebase |
| // Console and click on the 'Generate new private key' button. The content of |
| // this JSON file must be pass to the |Parse| method of this class. |
| class Credentials { |
| public: |
| Credentials(std::string project_id, std::string client_email, |
| std::string client_id, bssl::UniquePtr<EVP_PKEY> private_key); |
| |
| const std::string& project_id() { return project_id_; } |
| const std::string& client_email() { return client_email_; } |
| const std::string& client_id() { return client_id_; } |
| const bssl::UniquePtr<EVP_PKEY>& private_key() { return private_key_; } |
| |
| // Clone the current credentials. |
| std::unique_ptr<Credentials> Clone(); |
| |
| // Loads the service account credentials. |
| // |
| // This method must be called before this class is usable. |json| must be the |
| // content of the service account configuration file that can be retrieved |
| // from the firebase admin console (see the class-level comment). |
| // |
| // These methods will return an empty unique_ptr if the json content is |
| // invalid. |
| static std::unique_ptr<Credentials> Parse(fxl::StringView json); |
| static std::unique_ptr<Credentials> Parse(const rapidjson::Value& json); |
| |
| private: |
| std::string project_id_; |
| std::string client_email_; |
| std::string client_id_; |
| bssl::UniquePtr<EVP_PKEY> private_key_; |
| }; |
| |
| } // namespace service_account |
| |
| #endif // PERIDOT_LIB_FIREBASE_AUTH_TESTING_CREDENTIALS_H_ |