/* GStreamer * Copyright (C) 2020 Julien Isorce * * gstgscommon.h: * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "gstgscommon.h" #include "google/cloud/storage/oauth2/compute_engine_credentials.h" namespace gcs = google::cloud::storage; std::unique_ptr gst_gs_create_client( const gchar* service_account_email, const gchar* service_account_credentials, GError** error) { if (service_account_email || service_account_credentials) { google::cloud::StatusOr> creds; if (service_account_credentials) { creds = gcs::oauth2::CreateServiceAccountCredentialsFromJsonContents( service_account_credentials, {{"https://www.googleapis.com/auth/devstorage.full_control"}}, absl::nullopt); } else { // Meant to be used from a container running in the Cloud. creds = gcs::oauth2::CreateComputeEngineCredentials(service_account_email); } if (!creds) { if (service_account_email) { g_set_error(error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_NOT_AUTHORIZED, "Could not retrieve credentials for the given service " "account %s (%s)", service_account_email, creds.status().message().c_str()); } else { g_set_error(error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_NOT_AUTHORIZED, "Could not retrieve credentials for the given service " "account credentials JSON (%s)", creds.status().message().c_str()); } return nullptr; } gcs::ClientOptions client_options(std::move(creds.value())); return std::make_unique(client_options, gcs::StrictIdempotencyPolicy()); } // Default account. This is meant to retrieve the credentials automatically // using diffrent methods. google::cloud::StatusOr client_options = gcs::ClientOptions::CreateDefaultClientOptions(); if (!client_options) { g_set_error(error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_NOT_AUTHORIZED, "Could not create default client options (%s)", client_options.status().message().c_str()); return nullptr; } return std::make_unique(client_options.value(), gcs::StrictIdempotencyPolicy()); } gboolean gst_gs_get_buffer_date(GstBuffer* buffer, GDateTime* start_date, gchar** buffer_date_str_ptr) { gchar* buffer_date_str = NULL; GstClockTime buffer_timestamp = GST_CLOCK_TIME_NONE; GTimeSpan buffer_timespan = 0; if (!buffer || !start_date) return FALSE; buffer_timestamp = GST_BUFFER_PTS(buffer); // GTimeSpan is in micro seconds. buffer_timespan = GST_TIME_AS_USECONDS(buffer_timestamp); GDateTime* buffer_date = g_date_time_add(start_date, buffer_timespan); if (!buffer_date) return FALSE; buffer_date_str = g_date_time_format_iso8601(buffer_date); g_date_time_unref(buffer_date); if (!buffer_date_str) return FALSE; if (buffer_date_str_ptr) *buffer_date_str_ptr = buffer_date_str; return TRUE; }