From 6d65d8862ad7d39e55be0adb868c05f194250e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Wagner?= Date: Wed, 12 Jan 2022 18:26:38 +0000 Subject: OAuth2 Pkce Workflow --- rest-extras/Makefile.am | 79 ---------------------------------------------- rest-extras/flickr-proxy.c | 2 +- 2 files changed, 1 insertion(+), 80 deletions(-) delete mode 100644 rest-extras/Makefile.am (limited to 'rest-extras') diff --git a/rest-extras/Makefile.am b/rest-extras/Makefile.am deleted file mode 100644 index c7dd606..0000000 --- a/rest-extras/Makefile.am +++ /dev/null @@ -1,79 +0,0 @@ -CLEANFILES = - -lib_sources = \ - flickr-proxy.c \ - flickr-proxy-call.c \ - flickr-proxy-private.h \ - lastfm-proxy.c \ - lastfm-proxy-call.c \ - lastfm-proxy-private.h \ - youtube-proxy.c \ - youtube-proxy-private.h -lib_headers = \ - flickr-proxy.h \ - flickr-proxy-call.h \ - lastfm-proxy.h \ - lastfm-proxy-call.h \ - youtube-proxy.h - - -lib_LTLIBRARIES = librest-extras-@API_VERSION@.la -librest_extras_@API_VERSION@_la_CFLAGS = $(GLIB_CFLAGS) $(GTHREAD_CFLAGS) \ - $(SOUP_CFLAGS) $(SOUP_GNOME_CFLAGS) \ - $(XML_CFLAGS) $(GCOV_CFLAGS) \ - -I$(top_srcdir) -Wall -DG_LOG_DOMAIN=\"Rest\" -librest_extras_@API_VERSION@_la_LIBADD = $(GLIB_LIBS) $(GTHREAD_LIBS) \ - $(SOUP_LIBS) $(SOUP_GNOME_LIBS) $(XML_LIBS) \ - $(GCOV_LDFLAGS) \ - $(top_builddir)/rest/librest-@API_VERSION@.la -librest_extras_@API_VERSION@_la_LDFLAGS = -no-undefined -librest_extras_@API_VERSION@_la_SOURCES = $(lib_sources) $(lib_headers) -librest_extras_@API_VERSION@_la_HEADERS = $(lib_headers) -librest_extras_@API_VERSION@_ladir = $(includedir)/rest-@API_VERSION@/rest-extras - - -# Test suite -TESTS = test-runner -check_PROGRAMS = test-runner - -test_runner_SOURCES = test-runner.c $(lib_sources) $(lib_headers) -test_runner_CFLAGS = -DBUILD_TESTS $(librest_extras_@API_VERSION@_la_CFLAGS) $(GCOV_CFLAGS) -test_runner_LDFLAGS = $(librest_extras_@API_VERSION@_la_LIBADD) $(GCOV_LIBS) - -# TODO: use gtester - -# intospection --include $(INTROSPECTION_MAKEFILE) - -if HAVE_INTROSPECTION -INTROSPECTION_GIRS = RestExtras-@API_VERSION@.gir - -# need to include ../rest when scanning/compiling -INTROSPECTION_SCANNER_ARGS = --add-include-path=$(top_builddir)/rest --identifier-prefix= -INTROSPECTION_COMPILER_ARGS = --includedir=$(top_builddir)/rest - -REST_EXTRAS_CINCLUDES=$(patsubst %,--c-include='rest/%',$(shell echo $(lib_headers))) -INTROSPECTION_SCANNER_ARGS += $(REST_EXTRAS_CINCLUDES) - -RestExtras-@API_VERSION@.gir: librest-extras-@API_VERSION@.la Makefile - -RestExtras_@API_VERSION_AM@_gir_NAMESPACE = RestExtras -RestExtras_@API_VERSION_AM@_gir_VERSION = @API_VERSION@ -RestExtras_@API_VERSION_AM@_gir_LIBS = librest-extras-@API_VERSION@.la -RestExtras_@API_VERSION_AM@_gir_FILES = \ - $(lib_headers) \ - $(filter-out %private.h, $(lib_sources)) -RestExtras_@API_VERSION_AM@_gir_CFLAGS = -I$(top_srcdir) -RestExtras_@API_VERSION_AM@_gir_INCLUDES = GObject-2.0 libxml2-2.0 -RestExtras_@API_VERSION_AM@_gir_PACKAGES = gobject-2.0 libsoup-2.4 libxml-2.0 -RestExtras_@API_VERSION_AM@_gir_SCANNERFLAGS = --include-uninstalled=$(top_builddir)/rest/Rest-@API_VERSION@.gir --accept-unprefixed --warn-all -RestExtras_@API_VERSION_AM@_gir_EXPORT_PACKAGES = rest-extras-@API_VERSION@ - -girdir = $(datadir)/gir-1.0 -dist_gir_DATA = $(INTROSPECTION_GIRS) - -typelibsdir = $(libdir)/girepository-1.0/ -typelibs_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) - -CLEANFILES += $(dist_gir_DATA) $(typelibs_DATA) -endif # HAVE_INTROSPECTION diff --git a/rest-extras/flickr-proxy.c b/rest-extras/flickr-proxy.c index 7726359..91403d9 100644 --- a/rest-extras/flickr-proxy.c +++ b/rest-extras/flickr-proxy.c @@ -328,7 +328,7 @@ flickr_proxy_build_login_url (FlickrProxy *proxy, NULL, "flickr.com", -1, - "services/auth/", + "/services/auth/", query, NULL); -- cgit v1.2.1 From 6698699242508f40fee8079ecf8e8bbc8a493fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Wagner?= Date: Wed, 22 Dec 2021 23:14:51 +0100 Subject: flickr: modernized --- rest-extras/flickr-proxy-call.c | 73 +++++++++------- rest-extras/flickr-proxy-call.h | 39 ++------- rest-extras/flickr-proxy-private.h | 33 ------- rest-extras/flickr-proxy.c | 172 ++++++++++++++++++++++--------------- rest-extras/flickr-proxy.h | 93 +++++++------------- 5 files changed, 180 insertions(+), 230 deletions(-) delete mode 100644 rest-extras/flickr-proxy-private.h (limited to 'rest-extras') diff --git a/rest-extras/flickr-proxy-call.c b/rest-extras/flickr-proxy-call.c index e7dfa07..fc38ca0 100644 --- a/rest-extras/flickr-proxy-call.c +++ b/rest-extras/flickr-proxy-call.c @@ -4,6 +4,7 @@ * * Authors: Rob Bradford * Ross Burton + * Günther Wagner * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU Lesser General Public License, @@ -24,50 +25,57 @@ #include #include #include "flickr-proxy-call.h" -#include "flickr-proxy-private.h" +#include "flickr-proxy.h" #include "rest/sha1.h" -G_DEFINE_TYPE (FlickrProxyCall, flickr_proxy_call, REST_TYPE_PROXY_CALL) - -#define GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), FLICKR_TYPE_PROXY_CALL, FlickrProxyCallPrivate)) - typedef struct { gboolean upload; } FlickrProxyCallPrivate; +G_DEFINE_TYPE_WITH_PRIVATE (FlickrProxyCall, flickr_proxy_call, REST_TYPE_PROXY_CALL) + enum { PROP_0, - PROP_UPLOAD + PROP_UPLOAD, + N_PROPS }; +static GParamSpec *properties [N_PROPS]; + static void flickr_proxy_call_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { - switch (property_id) { - case PROP_UPLOAD: - GET_PRIVATE (object)->upload = g_value_get_boolean (value); - break; + FlickrProxyCall *self = FLICKR_PROXY_CALL (object); + FlickrProxyCallPrivate *priv = flickr_proxy_call_get_instance_private (self); + + switch (property_id) + { + case PROP_UPLOAD: + priv->upload = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } + } } static gboolean -_prepare (RestProxyCall *call, GError **error) +_prepare (RestProxyCall *call, + GError **error) { + FlickrProxyCall *self = (FlickrProxyCall *)call; + FlickrProxyCallPrivate *priv = flickr_proxy_call_get_instance_private (self); + FlickrProxy *proxy = NULL; - FlickrProxyPrivate *priv; + const gchar *token = NULL; GHashTable *params; char *s; - g_object_get (call, "proxy", &proxy, NULL); - priv = FLICKR_PROXY_GET_PRIVATE (proxy); + g_object_get (self, "proxy", &proxy, NULL); - if (GET_PRIVATE (call)->upload) { + if (priv->upload) { rest_proxy_bind (REST_PROXY(proxy), "up", "upload"); rest_proxy_call_set_function (call, NULL); } else { @@ -79,10 +87,11 @@ _prepare (RestProxyCall *call, GError **error) rest_proxy_call_set_function (call, NULL); } - rest_proxy_call_add_param (call, "api_key", priv->api_key); + rest_proxy_call_add_param (call, "api_key", flickr_proxy_get_api_key (proxy)); + token = flickr_proxy_get_token (proxy); - if (priv->token) - rest_proxy_call_add_param (call, "auth_token", priv->token); + if (token) + rest_proxy_call_add_param (call, "auth_token", token); /* Get the string params as a hash for signing */ params = rest_params_as_string_hash_table (rest_proxy_call_get_params (call)); @@ -100,14 +109,11 @@ _prepare (RestProxyCall *call, GError **error) static void flickr_proxy_call_class_init (FlickrProxyCallClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); RestProxyCallClass *call_class = REST_PROXY_CALL_CLASS (klass); - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - GParamSpec *pspec; - - g_type_class_add_private (klass, sizeof (FlickrProxyCallPrivate)); call_class->prepare = _prepare; - obj_class->set_property = flickr_proxy_call_set_property; + object_class->set_property = flickr_proxy_call_set_property; /** * FlickrProxyCall:upload: @@ -115,16 +121,19 @@ flickr_proxy_call_class_init (FlickrProxyCallClass *klass) * Set if the call should be sent to the photo upload endpoint and not the * general-purpose endpoint. */ - pspec = g_param_spec_boolean ("upload", "upload", "upload", - FALSE, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (obj_class, PROP_UPLOAD, pspec); + properties [PROP_UPLOAD] = + g_param_spec_boolean ("upload", + "upload", + "upload", + FALSE, + (G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_properties (object_class, N_PROPS, properties); } static void flickr_proxy_call_init (FlickrProxyCall *self) { } - -#if BUILD_TESTS -#warning TODO flickr signature test cases -#endif diff --git a/rest-extras/flickr-proxy-call.h b/rest-extras/flickr-proxy-call.h index 195886e..3903631 100644 --- a/rest-extras/flickr-proxy-call.h +++ b/rest-extras/flickr-proxy-call.h @@ -20,49 +20,22 @@ * */ -#ifndef _FLICKR_PROXY_CALL -#define _FLICKR_PROXY_CALL +#pragma once #include G_BEGIN_DECLS -#define FLICKR_TYPE_PROXY_CALL flickr_proxy_call_get_type() +#define FLICKR_TYPE_PROXY_CALL (flickr_proxy_call_get_type()) -#define FLICKR_PROXY_CALL(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLICKR_TYPE_PROXY_CALL, FlickrProxyCall)) +G_DECLARE_DERIVABLE_TYPE (FlickrProxyCall, flickr_proxy_call, FLICKR, PROXY_CALL, RestProxyCall) -#define FLICKR_PROXY_CALL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), FLICKR_TYPE_PROXY_CALL, FlickrProxyCallClass)) - -#define FLICKR_IS_PROXY_CALL(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLICKR_TYPE_PROXY_CALL)) - -#define FLICKR_IS_PROXY_CALL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), FLICKR_TYPE_PROXY_CALL)) - -#define FLICKR_PROXY_CALL_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), FLICKR_TYPE_PROXY_CALL, FlickrProxyCallClass)) - -/** - * FlickrProxyCall: - * - * #FlickrProxyCall has no publicly available members. - */ -typedef struct { - RestProxyCall parent; -} FlickrProxyCall; - -typedef struct { +struct _FlickrProxyCallClass { RestProxyCallClass parent_class; + /*< private >*/ /* padding for future expansion */ gpointer _padding_dummy[8]; -} FlickrProxyCallClass; - -GType flickr_proxy_call_get_type (void); +}; G_END_DECLS - -#endif /* _FLICKR_PROXY_CALL */ - diff --git a/rest-extras/flickr-proxy-private.h b/rest-extras/flickr-proxy-private.h deleted file mode 100644 index 5932946..0000000 --- a/rest-extras/flickr-proxy-private.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * librest - RESTful web services access - * Copyright (c) 2008, 2009, Intel Corporation. - * - * Authors: Rob Bradford - * Ross Burton - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU Lesser General Public License, - * version 2.1, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for - * more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#include "flickr-proxy.h" - -#define FLICKR_PROXY_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), FLICKR_TYPE_PROXY, FlickrProxyPrivate)) - -struct _FlickrProxyPrivate { - char *api_key; - char *shared_secret; - char *token; -}; - diff --git a/rest-extras/flickr-proxy.c b/rest-extras/flickr-proxy.c index 91403d9..7e60fa1 100644 --- a/rest-extras/flickr-proxy.c +++ b/rest-extras/flickr-proxy.c @@ -33,18 +33,26 @@ #include #include #include "flickr-proxy.h" -#include "flickr-proxy-private.h" #include "flickr-proxy-call.h" -G_DEFINE_TYPE (FlickrProxy, flickr_proxy, REST_TYPE_PROXY) +typedef struct { + char *api_key; + char *shared_secret; + char *token; +} FlickrProxyPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (FlickrProxy, flickr_proxy, REST_TYPE_PROXY) enum { PROP_0, PROP_API_KEY, PROP_SHARED_SECRET, PROP_TOKEN, + N_PROPS }; +static GParamSpec *properties [N_PROPS]; + GQuark flickr_proxy_error_quark (void) { @@ -52,22 +60,25 @@ flickr_proxy_error_quark (void) } static RestProxyCall * -_new_call (RestProxy *proxy) +_new_call (RestProxy *self) { RestProxyCall *call; call = g_object_new (FLICKR_TYPE_PROXY_CALL, - "proxy", proxy, + "proxy", self, NULL); return call; } static void -flickr_proxy_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec) +flickr_proxy_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) { - FlickrProxyPrivate *priv = FLICKR_PROXY_GET_PRIVATE (object); + FlickrProxy *self = FLICKR_PROXY (object); + FlickrProxyPrivate *priv = flickr_proxy_get_instance_private (self); switch (property_id) { case PROP_API_KEY: @@ -85,10 +96,13 @@ flickr_proxy_get_property (GObject *object, guint property_id, } static void -flickr_proxy_set_property (GObject *object, guint property_id, - const GValue *value, GParamSpec *pspec) +flickr_proxy_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) { - FlickrProxyPrivate *priv = FLICKR_PROXY_GET_PRIVATE (object); + FlickrProxy *self = FLICKR_PROXY (object); + FlickrProxyPrivate *priv = flickr_proxy_get_instance_private (self); switch (property_id) { case PROP_API_KEY: @@ -114,27 +128,21 @@ flickr_proxy_set_property (GObject *object, guint property_id, static void flickr_proxy_finalize (GObject *object) { - FlickrProxyPrivate *priv = FLICKR_PROXY_GET_PRIVATE (object); + FlickrProxy *self = FLICKR_PROXY (object); + FlickrProxyPrivate *priv = flickr_proxy_get_instance_private (self); - g_free (priv->api_key); - g_free (priv->shared_secret); - g_free (priv->token); + g_clear_pointer (&priv->api_key, g_free); + g_clear_pointer (&priv->shared_secret, g_free); + g_clear_pointer (&priv->token, g_free); G_OBJECT_CLASS (flickr_proxy_parent_class)->finalize (object); } -#ifndef G_PARAM_STATIC_STRINGS -#define G_PARAM_STATIC_STRINGS (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB) -#endif - static void flickr_proxy_class_init (FlickrProxyClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); RestProxyClass *proxy_class = REST_PROXY_CLASS (klass); - GParamSpec *pspec; - - g_type_class_add_private (klass, sizeof (FlickrProxyPrivate)); object_class->get_property = flickr_proxy_get_property; object_class->set_property = flickr_proxy_set_property; @@ -142,37 +150,43 @@ flickr_proxy_class_init (FlickrProxyClass *klass) proxy_class->new_call = _new_call; - pspec = g_param_spec_string ("api-key", "api-key", - "The API key", NULL, - G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_API_KEY, - pspec); - - pspec = g_param_spec_string ("shared-secret", "shared-secret", - "The shared secret", NULL, - G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_SHARED_SECRET, - pspec); - - pspec = g_param_spec_string ("token", "token", - "The request or access token", NULL, - G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_TOKEN, - pspec); + properties [PROP_API_KEY] = + g_param_spec_string ("api-key", + "api-key", + "The API key", + NULL, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + properties [PROP_SHARED_SECRET] = + g_param_spec_string ("shared-secret", + "shared-secret", + "The shared secret", + NULL, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + properties [PROP_TOKEN] = + g_param_spec_string ("token", + "token", + "The request or access token", + NULL, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_properties (object_class, N_PROPS, properties); } static void flickr_proxy_init (FlickrProxy *self) { - self->priv = FLICKR_PROXY_GET_PRIVATE (self); } RestProxy * flickr_proxy_new (const char *api_key, - const char *shared_secret) + const char *shared_secret) { return flickr_proxy_new_with_token (api_key, shared_secret, @@ -203,9 +217,12 @@ flickr_proxy_new_with_token (const char *api_key, * freed. */ const char * -flickr_proxy_get_api_key (FlickrProxy *proxy) +flickr_proxy_get_api_key (FlickrProxy *self) { - FlickrProxyPrivate *priv = FLICKR_PROXY_GET_PRIVATE (proxy); + FlickrProxyPrivate *priv = flickr_proxy_get_instance_private (self); + + g_return_val_if_fail (FLICKR_IS_PROXY (self), NULL); + return priv->api_key; } @@ -219,9 +236,12 @@ flickr_proxy_get_api_key (FlickrProxy *proxy) * freed. */ const char * -flickr_proxy_get_shared_secret (FlickrProxy *proxy) +flickr_proxy_get_shared_secret (FlickrProxy *self) { - FlickrProxyPrivate *priv = FLICKR_PROXY_GET_PRIVATE (proxy); + FlickrProxyPrivate *priv = flickr_proxy_get_instance_private (self); + + g_return_val_if_fail (FLICKR_IS_PROXY (self), NULL); + return priv->shared_secret; } @@ -235,9 +255,12 @@ flickr_proxy_get_shared_secret (FlickrProxy *proxy) * by #FlickrProxy and should not be freed. */ const char * -flickr_proxy_get_token (FlickrProxy *proxy) +flickr_proxy_get_token (FlickrProxy *self) { - FlickrProxyPrivate *priv = FLICKR_PROXY_GET_PRIVATE (proxy); + FlickrProxyPrivate *priv = flickr_proxy_get_instance_private (self); + + g_return_val_if_fail (FLICKR_IS_PROXY (self), NULL); + return priv->token; } @@ -249,31 +272,36 @@ flickr_proxy_get_token (FlickrProxy *proxy) * Set the token. */ void -flickr_proxy_set_token (FlickrProxy *proxy, const char *token) +flickr_proxy_set_token (FlickrProxy *self, + const char *token) { FlickrProxyPrivate *priv; - g_return_if_fail (FLICKR_IS_PROXY (proxy)); - priv = FLICKR_PROXY_GET_PRIVATE (proxy); + g_return_if_fail (FLICKR_IS_PROXY (self)); - if (priv->token) - g_free (priv->token); + priv = flickr_proxy_get_instance_private (self); - priv->token = g_strdup (token); + if (g_strcmp0 (priv->token, token) != 0) + { + g_clear_pointer (&priv->token, g_free); + priv->token = g_strdup (token); + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TOKEN]); + } } char * -flickr_proxy_sign (FlickrProxy *proxy, GHashTable *params) +flickr_proxy_sign (FlickrProxy *self, + GHashTable *params) { FlickrProxyPrivate *priv; GList *keys; char *md5; GChecksum *checksum; - g_return_val_if_fail (FLICKR_IS_PROXY (proxy), NULL); + g_return_val_if_fail (FLICKR_IS_PROXY (self), NULL); g_return_val_if_fail (params, NULL); - priv = FLICKR_PROXY_GET_PRIVATE (proxy); + priv = flickr_proxy_get_instance_private (self); checksum = g_checksum_new (G_CHECKSUM_MD5); g_checksum_update (checksum, (guchar *)priv->shared_secret, -1); @@ -300,26 +328,29 @@ flickr_proxy_sign (FlickrProxy *proxy, GHashTable *params) } char * -flickr_proxy_build_login_url (FlickrProxy *proxy, +flickr_proxy_build_login_url (FlickrProxy *self, const char *frob, const char *perms) { + FlickrProxyPrivate *priv; GUri *uri; GHashTable *params; char *sig, *s; char *query; - g_return_val_if_fail (FLICKR_IS_PROXY (proxy), NULL); + g_return_val_if_fail (FLICKR_IS_PROXY (self), NULL); + + priv = flickr_proxy_get_instance_private (self); params = g_hash_table_new (g_str_hash, g_str_equal); - g_hash_table_insert (params, "api_key", proxy->priv->api_key); + g_hash_table_insert (params, "api_key", priv->api_key); g_hash_table_insert (params, "perms", (gpointer)perms); if (frob) g_hash_table_insert (params, "frob", (gpointer)frob); - sig = flickr_proxy_sign (proxy, params); + sig = flickr_proxy_sign (self, params); g_hash_table_insert (params, "api_sig", sig); query = soup_form_encode_hash (params); @@ -353,7 +384,8 @@ flickr_proxy_build_login_url (FlickrProxy *proxy, * Returns: %TRUE if this response is successful, %FALSE otherwise. */ gboolean -flickr_proxy_is_successful (RestXmlNode *root, GError **error) +flickr_proxy_is_successful (RestXmlNode *root, + GError **error) { RestXmlNode *node; @@ -389,12 +421,12 @@ flickr_proxy_is_successful (RestXmlNode *root, GError **error) * Returns: (type FlickrProxyCall) (transfer full): a new #FlickrProxyCall */ RestProxyCall * -flickr_proxy_new_upload (FlickrProxy *proxy) +flickr_proxy_new_upload (FlickrProxy *self) { - g_return_val_if_fail (FLICKR_IS_PROXY (proxy), NULL); + g_return_val_if_fail (FLICKR_IS_PROXY (self), NULL); return g_object_new (FLICKR_TYPE_PROXY_CALL, - "proxy", proxy, + "proxy", self, "upload", TRUE, NULL); } @@ -417,7 +449,9 @@ flickr_proxy_new_upload (FlickrProxy *proxy) * Returns: (type FlickrProxyCall) (transfer full): a new #FlickrProxyCall */ RestProxyCall * -flickr_proxy_new_upload_for_file (FlickrProxy *proxy, const char *filename, GError **error) +flickr_proxy_new_upload_for_file (FlickrProxy *self, + const char *filename, + GError **error) { GMappedFile *map; GError *err = NULL; @@ -425,7 +459,7 @@ flickr_proxy_new_upload_for_file (FlickrProxy *proxy, const char *filename, GErr RestParam *param; RestProxyCall *call = NULL; - g_return_val_if_fail (FLICKR_IS_PROXY (proxy), NULL); + g_return_val_if_fail (FLICKR_IS_PROXY (self), NULL); g_return_val_if_fail (filename, NULL); /* Open the file */ @@ -443,7 +477,7 @@ flickr_proxy_new_upload_for_file (FlickrProxy *proxy, const char *filename, GErr NULL); /* Make the call */ - call = flickr_proxy_new_upload (proxy); + call = flickr_proxy_new_upload (self); param = rest_param_new_with_owner ("photo", g_mapped_file_get_contents (map), g_mapped_file_get_length (map), diff --git a/rest-extras/flickr-proxy.h b/rest-extras/flickr-proxy.h index 5cff622..bc13149 100644 --- a/rest-extras/flickr-proxy.h +++ b/rest-extras/flickr-proxy.h @@ -4,6 +4,7 @@ * * Authors: Rob Bradford * Ross Burton + * Günther Wagner * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU Lesser General Public License, @@ -20,81 +21,47 @@ * */ -#ifndef _FLICKR_PROXY -#define _FLICKR_PROXY +#pragma once #include #include G_BEGIN_DECLS +#define FLICKR_PROXY_ERROR flickr_proxy_error_quark() #define FLICKR_TYPE_PROXY flickr_proxy_get_type() -#define FLICKR_PROXY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLICKR_TYPE_PROXY, FlickrProxy)) - -#define FLICKR_PROXY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), FLICKR_TYPE_PROXY, FlickrProxyClass)) - -#define FLICKR_IS_PROXY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLICKR_TYPE_PROXY)) - -#define FLICKR_IS_PROXY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), FLICKR_TYPE_PROXY)) +G_DECLARE_DERIVABLE_TYPE (FlickrProxy, flickr_proxy, FLICKR, PROXY, RestProxy) -#define FLICKR_PROXY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), FLICKR_TYPE_PROXY, FlickrProxyClass)) - -typedef struct _FlickrProxyPrivate FlickrProxyPrivate; - -/** - * FlickrProxy: - * - * #FlickrProxy has no publicly available members. - */ -typedef struct { - RestProxy parent; - FlickrProxyPrivate *priv; -} FlickrProxy; - -typedef struct { +struct _FlickrProxyClass { RestProxyClass parent_class; + /*< private >*/ /* padding for future expansion */ gpointer _padding_dummy[8]; -} FlickrProxyClass; - -#define FLICKR_PROXY_ERROR flickr_proxy_error_quark() - -GType flickr_proxy_get_type (void); - -RestProxy* flickr_proxy_new (const char *api_key, - const char *shared_secret); - -RestProxy* flickr_proxy_new_with_token (const char *api_key, - const char *shared_secret, - const char *token); - -const char * flickr_proxy_get_api_key (FlickrProxy *proxy); - -const char * flickr_proxy_get_shared_secret (FlickrProxy *proxy); - -const char * flickr_proxy_get_token (FlickrProxy *proxy); - -void flickr_proxy_set_token (FlickrProxy *proxy, const char *token); - -char * flickr_proxy_sign (FlickrProxy *proxy, GHashTable *params); - -char * flickr_proxy_build_login_url (FlickrProxy *proxy, - const char *frob, - const char *perms); - -gboolean flickr_proxy_is_successful (RestXmlNode *root, GError **error); - -RestProxyCall * flickr_proxy_new_upload (FlickrProxy *proxy); - -RestProxyCall * flickr_proxy_new_upload_for_file (FlickrProxy *proxy, const char *filename, GError **error); +}; + + +RestProxy *flickr_proxy_new (const char *api_key, + const char *shared_secret); +RestProxy *flickr_proxy_new_with_token (const char *api_key, + const char *shared_secret, + const char *token); +const char *flickr_proxy_get_api_key (FlickrProxy *proxy); +const char *flickr_proxy_get_shared_secret (FlickrProxy *proxy); +const char *flickr_proxy_get_token (FlickrProxy *proxy); +void flickr_proxy_set_token (FlickrProxy *proxy, + const char *token); +char *flickr_proxy_sign (FlickrProxy *proxy, + GHashTable *params); +char *flickr_proxy_build_login_url (FlickrProxy *proxy, + const char *frob, + const char *perms); +gboolean flickr_proxy_is_successful (RestXmlNode *root, + GError **error); +RestProxyCall *flickr_proxy_new_upload (FlickrProxy *proxy); +RestProxyCall *flickr_proxy_new_upload_for_file (FlickrProxy *proxy, + const char *filename, + GError **error); G_END_DECLS - -#endif /* _FLICKR_PROXY */ -- cgit v1.2.1 From cbc6358b49229db1e4481add82068f5511c97aaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Wagner?= Date: Wed, 22 Dec 2021 23:16:17 +0100 Subject: lastfm: modernized --- rest-extras/lastfm-proxy-call.c | 16 ++--- rest-extras/lastfm-proxy-call.h | 6 +- rest-extras/lastfm-proxy-private.h | 33 ---------- rest-extras/lastfm-proxy.c | 132 +++++++++++++++++++++++-------------- rest-extras/lastfm-proxy.h | 75 ++++++--------------- 5 files changed, 109 insertions(+), 153 deletions(-) delete mode 100644 rest-extras/lastfm-proxy-private.h (limited to 'rest-extras') diff --git a/rest-extras/lastfm-proxy-call.c b/rest-extras/lastfm-proxy-call.c index 417fa18..dd56715 100644 --- a/rest-extras/lastfm-proxy-call.c +++ b/rest-extras/lastfm-proxy-call.c @@ -25,7 +25,7 @@ #include #include #include "lastfm-proxy-call.h" -#include "lastfm-proxy-private.h" +#include "lastfm-proxy.h" #include "rest/sha1.h" G_DEFINE_TYPE (LastfmProxyCall, lastfm_proxy_call, REST_TYPE_PROXY_CALL) @@ -34,23 +34,23 @@ static gboolean _prepare (RestProxyCall *call, GError **error) { LastfmProxy *proxy = NULL; - LastfmProxyPrivate *priv; GHashTable *params; + const gchar *session_key; char *s; g_object_get (call, "proxy", &proxy, NULL); - priv = LASTFM_PROXY_GET_PRIVATE (proxy); rest_proxy_call_add_params (call, "method", rest_proxy_call_get_function (call), - "api_key", priv->api_key, + "api_key", lastfm_proxy_get_api_key (proxy), NULL); /* Reset function because Lastfm puts the function in the parameters */ rest_proxy_call_set_function (call, NULL); - if (priv->session_key) - rest_proxy_call_add_param (call, "sk", priv->session_key); + session_key = lastfm_proxy_get_session_key (proxy); + if (session_key) + rest_proxy_call_add_param (call, "sk", session_key); params = rest_params_as_string_hash_table (rest_proxy_call_get_params (call)); s = lastfm_proxy_sign (proxy, params); @@ -75,7 +75,3 @@ static void lastfm_proxy_call_init (LastfmProxyCall *self) { } - -#if BUILD_TESTS -#warning TODO lastfm signature test cases -#endif diff --git a/rest-extras/lastfm-proxy-call.h b/rest-extras/lastfm-proxy-call.h index da4c7ad..20e9b8e 100644 --- a/rest-extras/lastfm-proxy-call.h +++ b/rest-extras/lastfm-proxy-call.h @@ -20,8 +20,7 @@ * */ -#ifndef _LASTFM_PROXY_CALL -#define _LASTFM_PROXY_CALL +#pragma once #include @@ -44,6 +43,3 @@ struct _LastfmProxyCallClass { }; G_END_DECLS - -#endif /* _LASTFM_PROXY_CALL */ - diff --git a/rest-extras/lastfm-proxy-private.h b/rest-extras/lastfm-proxy-private.h deleted file mode 100644 index 128f7a9..0000000 --- a/rest-extras/lastfm-proxy-private.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * librest - RESTful web services access - * Copyright (c) 2010 Intel Corporation. - * - * Authors: Rob Bradford - * Ross Burton - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU Lesser General Public License, - * version 2.1, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for - * more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#include "lastfm-proxy.h" - -#define LASTFM_PROXY_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASTFM_TYPE_PROXY, LastfmProxyPrivate)) - -struct _LastfmProxyPrivate { - char *api_key; - char *secret; - char *session_key; -}; - diff --git a/rest-extras/lastfm-proxy.c b/rest-extras/lastfm-proxy.c index b9fc713..7b0dd28 100644 --- a/rest-extras/lastfm-proxy.c +++ b/rest-extras/lastfm-proxy.c @@ -26,18 +26,26 @@ #include #include #include "lastfm-proxy.h" -#include "lastfm-proxy-private.h" #include "lastfm-proxy-call.h" -G_DEFINE_TYPE (LastfmProxy, lastfm_proxy, REST_TYPE_PROXY) +typedef struct { + char *api_key; + char *secret; + char *session_key; +} LastfmProxyPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (LastfmProxy, lastfm_proxy, REST_TYPE_PROXY) enum { PROP_0, PROP_API_KEY, PROP_SECRET, PROP_SESSION_KEY, + N_PROPS, }; +static GParamSpec *properties [N_PROPS]; + GQuark lastfm_proxy_error_quark (void) { @@ -57,10 +65,13 @@ _new_call (RestProxy *proxy) } static void -lastfm_proxy_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec) +lastfm_proxy_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (object); + LastfmProxy *self = LASTFM_PROXY (object); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); switch (property_id) { case PROP_API_KEY: @@ -81,7 +92,8 @@ static void lastfm_proxy_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (object); + LastfmProxy *self = LASTFM_PROXY (object); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); switch (property_id) { case PROP_API_KEY: @@ -107,7 +119,8 @@ lastfm_proxy_set_property (GObject *object, guint property_id, static void lastfm_proxy_finalize (GObject *object) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (object); + LastfmProxy *self = LASTFM_PROXY (object); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); g_free (priv->api_key); g_free (priv->secret); @@ -116,18 +129,11 @@ lastfm_proxy_finalize (GObject *object) G_OBJECT_CLASS (lastfm_proxy_parent_class)->finalize (object); } -#ifndef G_PARAM_STATIC_STRINGS -#define G_PARAM_STATIC_STRINGS (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB) -#endif - static void lastfm_proxy_class_init (LastfmProxyClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); RestProxyClass *proxy_class = REST_PROXY_CLASS (klass); - GParamSpec *pspec; - - g_type_class_add_private (klass, sizeof (LastfmProxyPrivate)); object_class->get_property = lastfm_proxy_get_property; object_class->set_property = lastfm_proxy_set_property; @@ -135,32 +141,38 @@ lastfm_proxy_class_init (LastfmProxyClass *klass) proxy_class->new_call = _new_call; - pspec = g_param_spec_string ("api-key", "api-key", - "The API key", NULL, - G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_API_KEY, - pspec); - - pspec = g_param_spec_string ("secret", "secret", - "The API key secret", NULL, - G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_SECRET, - pspec); - - pspec = g_param_spec_string ("session-key", "session-key", - "The session key", NULL, - G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_SESSION_KEY, - pspec); + properties [PROP_API_KEY] = + g_param_spec_string ("api-key", + "api-key", + "The API key", + NULL, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + properties [PROP_SECRET] = + g_param_spec_string ("secret", + "secret", + "The API key secret", + NULL, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + properties [PROP_SESSION_KEY] = + g_param_spec_string ("session-key", + "session-key", + "The session key", + NULL, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_properties (object_class, N_PROPS, properties); } static void lastfm_proxy_init (LastfmProxy *self) { - self->priv = LASTFM_PROXY_GET_PRIVATE (self); } RestProxy * @@ -196,9 +208,12 @@ lastfm_proxy_new_with_session (const char *api_key, * freed. */ const char * -lastfm_proxy_get_api_key (LastfmProxy *proxy) +lastfm_proxy_get_api_key (LastfmProxy *self) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (proxy); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); + + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); + return priv->api_key; } @@ -212,9 +227,12 @@ lastfm_proxy_get_api_key (LastfmProxy *proxy) * freed. */ const char * -lastfm_proxy_get_secret (LastfmProxy *proxy) +lastfm_proxy_get_secret (LastfmProxy *self) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (proxy); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); + + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); + return priv->secret; } @@ -228,9 +246,12 @@ lastfm_proxy_get_secret (LastfmProxy *proxy) * by #LastfmProxy and should not be freed. */ const char * -lastfm_proxy_get_session_key (LastfmProxy *proxy) +lastfm_proxy_get_session_key (LastfmProxy *self) { - LastfmProxyPrivate *priv = LASTFM_PROXY_GET_PRIVATE (proxy); + LastfmProxyPrivate *priv = lastfm_proxy_get_instance_private (self); + + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); + return priv->session_key; } @@ -242,12 +263,14 @@ lastfm_proxy_get_session_key (LastfmProxy *proxy) * Set the session key. */ void -lastfm_proxy_set_session_key (LastfmProxy *proxy, const char *session_key) +lastfm_proxy_set_session_key (LastfmProxy *self, + const char *session_key) { LastfmProxyPrivate *priv; - g_return_if_fail (LASTFM_IS_PROXY (proxy)); - priv = LASTFM_PROXY_GET_PRIVATE (proxy); + g_return_if_fail (LASTFM_IS_PROXY (self)); + + priv = lastfm_proxy_get_instance_private (self); if (priv->session_key) g_free (priv->session_key); @@ -256,17 +279,18 @@ lastfm_proxy_set_session_key (LastfmProxy *proxy, const char *session_key) } char * -lastfm_proxy_sign (LastfmProxy *proxy, GHashTable *params) +lastfm_proxy_sign (LastfmProxy *self, + GHashTable *params) { LastfmProxyPrivate *priv; GString *s; GList *keys; char *md5; - g_return_val_if_fail (LASTFM_IS_PROXY (proxy), NULL); + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); g_return_val_if_fail (params, NULL); - priv = LASTFM_PROXY_GET_PRIVATE (proxy); + priv = lastfm_proxy_get_instance_private (self); s = g_string_new (NULL); @@ -295,13 +319,18 @@ lastfm_proxy_sign (LastfmProxy *proxy, GHashTable *params) } char * -lastfm_proxy_build_login_url (LastfmProxy *proxy, const char *token) +lastfm_proxy_build_login_url (LastfmProxy *self, + const char *token) { - g_return_val_if_fail (LASTFM_IS_PROXY (proxy), NULL); + LastfmProxyPrivate *priv; + + g_return_val_if_fail (LASTFM_IS_PROXY (self), NULL); g_return_val_if_fail (token, NULL); + priv = lastfm_proxy_get_instance_private (self); + return g_strdup_printf ("http://www.last.fm/api/auth/?api_key=%s&token=%s", - proxy->priv->api_key, + priv->api_key, token); } @@ -316,7 +345,8 @@ lastfm_proxy_build_login_url (LastfmProxy *proxy, const char *token) * Returns: %TRUE if this response is successful, %FALSE otherwise. */ gboolean -lastfm_proxy_is_successful (RestXmlNode *root, GError **error) +lastfm_proxy_is_successful (RestXmlNode *root, + GError **error) { RestXmlNode *node; diff --git a/rest-extras/lastfm-proxy.h b/rest-extras/lastfm-proxy.h index 85e612a..b378882 100644 --- a/rest-extras/lastfm-proxy.h +++ b/rest-extras/lastfm-proxy.h @@ -20,8 +20,7 @@ * */ -#ifndef _LASTFM_PROXY -#define _LASTFM_PROXY +#pragma once #include #include @@ -30,65 +29,33 @@ G_BEGIN_DECLS #define LASTFM_TYPE_PROXY lastfm_proxy_get_type() -#define LASTFM_PROXY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), LASTFM_TYPE_PROXY, LastfmProxy)) +G_DECLARE_DERIVABLE_TYPE (LastfmProxy, lastfm_proxy, LASTFM, PROXY, RestProxy) -#define LASTFM_PROXY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), LASTFM_TYPE_PROXY, LastfmProxyClass)) - -#define LASTFM_IS_PROXY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LASTFM_TYPE_PROXY)) - -#define LASTFM_IS_PROXY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), LASTFM_TYPE_PROXY)) - -#define LASTFM_PROXY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), LASTFM_TYPE_PROXY, LastfmProxyClass)) - -typedef struct _LastfmProxyPrivate LastfmProxyPrivate; - -/** - * LastfmProxy: - * - * #LastfmProxy has no publicly available members. - */ -typedef struct { - RestProxy parent; - LastfmProxyPrivate *priv; -} LastfmProxy; - -typedef struct { +struct _LastfmProxyClass { RestProxyClass parent_class; + /*< private >*/ /* padding for future expansion */ gpointer _padding_dummy[8]; -} LastfmProxyClass; +}; #define LASTFM_PROXY_ERROR lastfm_proxy_error_quark() -GType lastfm_proxy_get_type (void); - -RestProxy* lastfm_proxy_new (const char *api_key, - const char *secret); - -RestProxy* lastfm_proxy_new_with_session (const char *api_key, - const char *secret, - const char *session_key); - -const char * lastfm_proxy_get_api_key (LastfmProxy *proxy); - -const char * lastfm_proxy_get_secret (LastfmProxy *proxy); - -const char * lastfm_proxy_get_session_key (LastfmProxy *proxy); - -void lastfm_proxy_set_session_key (LastfmProxy *proxy, const char *session_key); - -char * lastfm_proxy_sign (LastfmProxy *proxy, GHashTable *params); - -char * lastfm_proxy_build_login_url (LastfmProxy *proxy, const char *token); - -gboolean lastfm_proxy_is_successful (RestXmlNode *root, GError **error); +RestProxy *lastfm_proxy_new (const char *api_key, + const char *secret); +RestProxy *lastfm_proxy_new_with_session (const char *api_key, + const char *secret, + const char *session_key); +const char *lastfm_proxy_get_api_key (LastfmProxy *proxy); +const char *lastfm_proxy_get_secret (LastfmProxy *proxy); +const char *lastfm_proxy_get_session_key (LastfmProxy *proxy); +void lastfm_proxy_set_session_key (LastfmProxy *proxy, + const char *session_key); +char *lastfm_proxy_sign (LastfmProxy *proxy, + GHashTable *params); +char *lastfm_proxy_build_login_url (LastfmProxy *proxy, + const char *token); +gboolean lastfm_proxy_is_successful (RestXmlNode *root, + GError **error); G_END_DECLS - -#endif /* _LASTFM_PROXY */ -- cgit v1.2.1 From e4152dd2f079ee4a0c0d1b468d4a8d31041da1f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Wagner?= Date: Wed, 22 Dec 2021 23:17:24 +0100 Subject: youtube: modernized --- rest-extras/youtube-proxy.c | 79 ++++++++++++++++++++++++++------------------- rest-extras/youtube-proxy.h | 68 +++++++++++--------------------------- 2 files changed, 64 insertions(+), 83 deletions(-) (limited to 'rest-extras') diff --git a/rest-extras/youtube-proxy.c b/rest-extras/youtube-proxy.c index cd598f4..08faca4 100644 --- a/rest-extras/youtube-proxy.c +++ b/rest-extras/youtube-proxy.c @@ -29,9 +29,13 @@ #include "rest/rest-private.h" #include "youtube-proxy.h" -#include "youtube-proxy-private.h" -G_DEFINE_TYPE (YoutubeProxy, youtube_proxy, REST_TYPE_PROXY) +typedef struct { + char *developer_key; + char *user_auth; +} YoutubeProxyPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (YoutubeProxy, youtube_proxy, REST_TYPE_PROXY) #define UPLOAD_URL \ "http://uploads.gdata.youtube.com/feeds/api/users/default/uploads" @@ -40,8 +44,11 @@ enum { PROP_0, PROP_DEVELOPER_KEY, PROP_USER_AUTH, + N_PROPS, }; +static GParamSpec *properties [N_PROPS]; + GQuark youtube_proxy_error_quark (void) { @@ -49,10 +56,13 @@ youtube_proxy_error_quark (void) } static void -youtube_proxy_get_property (GObject *object, guint property_id, - GValue *value, GParamSpec *pspec) +youtube_proxy_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) { - YoutubeProxyPrivate *priv = YOUTUBE_PROXY_GET_PRIVATE (object); + YoutubeProxy *self = YOUTUBE_PROXY (object); + YoutubeProxyPrivate *priv = youtube_proxy_get_instance_private (self); switch (property_id) { case PROP_DEVELOPER_KEY: @@ -67,10 +77,13 @@ youtube_proxy_get_property (GObject *object, guint property_id, } static void -youtube_proxy_set_property (GObject *object, guint property_id, - const GValue *value, GParamSpec *pspec) +youtube_proxy_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) { - YoutubeProxyPrivate *priv = YOUTUBE_PROXY_GET_PRIVATE (object); + YoutubeProxy *self = YOUTUBE_PROXY (object); + YoutubeProxyPrivate *priv = youtube_proxy_get_instance_private (self); switch (property_id) { case PROP_DEVELOPER_KEY: @@ -89,7 +102,8 @@ youtube_proxy_set_property (GObject *object, guint property_id, static void youtube_proxy_finalize (GObject *object) { - YoutubeProxyPrivate *priv = YOUTUBE_PROXY_GET_PRIVATE (object); + YoutubeProxy *self = YOUTUBE_PROXY (object); + YoutubeProxyPrivate *priv = youtube_proxy_get_instance_private (self); g_free (priv->developer_key); g_free (priv->user_auth); @@ -101,36 +115,34 @@ static void youtube_proxy_class_init (YoutubeProxyClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - GParamSpec *pspec; - - g_type_class_add_private (klass, sizeof (YoutubeProxyPrivate)); object_class->get_property = youtube_proxy_get_property; object_class->set_property = youtube_proxy_set_property; object_class->finalize = youtube_proxy_finalize; - pspec = g_param_spec_string ("developer-key", "developer-key", - "The developer API key", NULL, - G_PARAM_READWRITE| - G_PARAM_CONSTRUCT_ONLY| - G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_DEVELOPER_KEY, - pspec); - - pspec = g_param_spec_string ("user-auth", "user-auth", - "The ClientLogin token", NULL, - G_PARAM_READWRITE| - G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, - PROP_USER_AUTH, - pspec); + properties [PROP_DEVELOPER_KEY] = + g_param_spec_string ("developer-key", + "developer-key", + "The developer API key", + NULL, + (G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + properties [PROP_USER_AUTH] = + g_param_spec_string ("user-auth", + "user-auth", + "The ClientLogin token", + NULL, + (G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_properties (object_class, N_PROPS, properties); } static void youtube_proxy_init (YoutubeProxy *self) { - self->priv = YOUTUBE_PROXY_GET_PRIVATE (self); } RestProxy * @@ -151,16 +163,17 @@ youtube_proxy_new_with_auth (const char *developer_key, } void -youtube_proxy_set_user_auth (YoutubeProxy *proxy, +youtube_proxy_set_user_auth (YoutubeProxy *self, const gchar *user_auth) { - YoutubeProxyPrivate *priv = proxy->priv; + YoutubeProxyPrivate *priv = youtube_proxy_get_instance_private (self); priv->user_auth = g_strdup (user_auth); } static gchar * -_construct_upload_atom_xml (GHashTable *fields, gboolean incomplete) +_construct_upload_atom_xml (GHashTable *fields, + gboolean incomplete) { GHashTableIter iter; gpointer key, value; @@ -215,7 +228,7 @@ _set_upload_headers (YoutubeProxy *self, SoupMessageHeaders *headers, const gchar *filename) { - YoutubeProxyPrivate *priv = self->priv; + YoutubeProxyPrivate *priv = youtube_proxy_get_instance_private (self); gchar *user_auth_header; gchar *devkey_header; gchar *basename; diff --git a/rest-extras/youtube-proxy.h b/rest-extras/youtube-proxy.h index 1fe6c20..1215cf4 100644 --- a/rest-extras/youtube-proxy.h +++ b/rest-extras/youtube-proxy.h @@ -20,8 +20,7 @@ * */ -#ifndef _YOUTUBE_PROXY -#define _YOUTUBE_PROXY +#pragma once #include @@ -29,52 +28,18 @@ G_BEGIN_DECLS #define YOUTUBE_TYPE_PROXY youtube_proxy_get_type() -#define YOUTUBE_PROXY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), YOUTUBE_TYPE_PROXY, YoutubeProxy)) +G_DECLARE_DERIVABLE_TYPE (YoutubeProxy, youtube_proxy, YOUTUBE, PROXY, RestProxy) -#define YOUTUBE_PROXY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), YOUTUBE_TYPE_PROXY, YoutubeProxyClass)) - -#define YOUTUBE_IS_PROXY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), YOUTUBE_TYPE_PROXY)) - -#define YOUTUBE_IS_PROXY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), YOUTUBE_TYPE_PROXY)) - -#define YOUTUBE_PROXY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), YOUTUBE_TYPE_PROXY, YoutubeProxyClass)) - -typedef struct _YoutubeProxyPrivate YoutubeProxyPrivate; - -/** - * YoutubeProxy: - * - * #YoutubeProxy has no publicly available members. - */ -typedef struct { - RestProxy parent; - YoutubeProxyPrivate *priv; -} YoutubeProxy; - -typedef struct { +struct _YoutubeProxyClass { RestProxyClass parent_class; + /*< private >*/ /* padding for future expansion */ gpointer _padding_dummy[8]; -} YoutubeProxyClass; +}; #define YOUTUBE_PROXY_ERROR youtube_proxy_error_quark() -GType youtube_proxy_get_type (void); - -RestProxy* youtube_proxy_new (const gchar *developer_key); - -RestProxy* youtube_proxy_new_with_auth (const gchar *developer_key, - const gchar *user_auth); - -void youtube_proxy_set_user_auth (YoutubeProxy *proxy, - const gchar *user_auth); - typedef void (*YoutubeProxyUploadCallback)(YoutubeProxy *proxy, const gchar *payload, gsize total, @@ -83,15 +48,18 @@ typedef void (*YoutubeProxyUploadCallback)(YoutubeProxy *proxy, GObject *weak_object, gpointer user_data); -gboolean youtube_proxy_upload_async (YoutubeProxy *self, - const gchar *filename, - GHashTable *fields, - gboolean incomplete, - YoutubeProxyUploadCallback callback, - GObject *weak_object, - gpointer user_data, - GError **error); +RestProxy *youtube_proxy_new (const gchar *developer_key); +RestProxy *youtube_proxy_new_with_auth (const gchar *developer_key, + const gchar *user_auth); +void youtube_proxy_set_user_auth (YoutubeProxy *proxy, + const gchar *user_auth); +gboolean youtube_proxy_upload_async (YoutubeProxy *self, + const gchar *filename, + GHashTable *fields, + gboolean incomplete, + YoutubeProxyUploadCallback callback, + GObject *weak_object, + gpointer user_data, + GError **error); G_END_DECLS - -#endif /* _YOUTUBE_PROXY */ -- cgit v1.2.1 From b6b20dae6f06a3badc6be09532d735a375b62e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Wagner?= Date: Tue, 28 Dec 2021 16:46:10 +0100 Subject: params: reworked to boxed and list RestParams was implemented as HashTable. Limitations are that it did not preserved the order of individual parameters aswell as duplicates aren't allowed. Reworked it to a GList and introduced reference counting and a boxed type. --- rest-extras/meson.build | 3 +++ 1 file changed, 3 insertions(+) (limited to 'rest-extras') diff --git a/rest-extras/meson.build b/rest-extras/meson.build index 1ad9ee1..cf14ee8 100644 --- a/rest-extras/meson.build +++ b/rest-extras/meson.build @@ -49,9 +49,12 @@ if get_option('introspection') librest_extras_gir = gnome.generate_gir(librest_extras_lib, sources: librest_extras_sources + librest_extras_headers, namespace: 'RestExtras', + symbol_prefix: 'rest_extras', + identifier_prefix: 'RestExtras', nsversion: librest_api_version, includes: [ 'GObject-2.0', 'Gio-2.0', 'Soup-@0@'.format(libsoup_api_version), librest_gir[0] ], extra_args: [ '--accept-unprefixed' ], + dependencies: librest_extras_deps, install: true, ) endif -- cgit v1.2.1