newsAdvanced Gtk+ Sequencer - News: GSequencer v3.0.0 has got support for libsoup2.4 XMLRPC

 
 
Latest News
Advanced Gtk+ Sequencer version 6.5.x posted by jkraehemann, Sun 11 Feb 2024 05:06:15 PM UTC
Advanced Gtk+ Sequencer version 6.3.5 posted by jkraehemann, Fri 19 Jan 2024 11:53:24 AM UTC
Advanced Gtk+ Sequencer v6.1.0 released posted by jkraehemann, Thu 28 Sep 2023 04:55:19 AM UTC
Advanced Gtk+ Sequencer v6.0.0 released posted by jkraehemann, Mon 21 Aug 2023 11:48:52 AM UTC
Advanced Gtk+ Sequencer v5.5.0 released posted by jkraehemann, Sat 05 Aug 2023 10:21:52 AM UTC

GSequencer v3.0.0 has got support for libsoup2.4 XMLRPC

Item posted by Joël Krähemann <jkraehemann> on Thu 12 Dec 2019 06:28:37 PM UTC.

Few days ago, I have closed the task "Implement AgsServer and related controllers". I decided to strip the code to very basic implementation. AgsFrontController is all you got with authentication and session support. Read more here:

https://savannah.nongnu.org/task/index.php?14177

Advanced Gtk+ Sequencer dropped native sockets support in favor of GIO's implementation. The XMLRPC server is implemented using libsoup2.4:

https://wiki.gnome.org/Projects/libsoup

The following cookies are responsible for session tracking:

  • ags-srv-login
  • ags-srv-security-token


The AgsPluginController interface


Extending AgsServer is done by implementing AgsPluginController interface. Additionally, you should derive your object from AgsController in order to match :context-path property.

The AgsPluginController::do_request() function is invoked as the context matches to the XMLRPC request's path.


gpointer ags_plugin_controller_do_request(AgsPluginController *plugin_controller,
                                          SoupMessage *msg,
                                          GHashTable *query,
                                          SoupClientContext *client,
                                          GObject *security_context,
                                          gchar *path,
                                          gchar *login,
                                          gchar *security_token);


You might want to set the response of @msg using following function:


void soup_message_set_response(SoupMessage *msg,
                               const char *content_type,
                               SoupMemoryUse resp_use,
                               const char *resp_body,
                               gsize resp_length);


Authentication and session modules


GSequencer provides autentication and session abstraction. These are the provided interfaces:

  • AgsAuthentication
  • AgsPasswordStore


The following singletons match the configured module:

  • AgsAuthenticationManager
  • AgsPasswordStoreManager


libags library provides ready to use implementation using XML backend.

  • AgsXmlAuthentication
  • AgsXmlPasswordStore


Hands on: ags_functional_server_test.c


If you want to see GSequencer's XMLRPC in action, checkout the integration test:

http://git.savannah.nongnu.org/cgit/gsequencer.git/tree/ags/test/server/ags_functional_server_test.c?h=3.0.x

Or just invoke: `./configure --enable-run-functional-tests && make check`

Default configuration directory missing


I consider to require a system configuration directory:

    /etc/gsequencer

This would provide:

  1. ags_authentication.xml
  2. ags_password_store.xml


For its valid content please check:

http://git.savannah.nongnu.org/cgit/gsequencer.git/tree/ags/server/security/ags_authentication.dtd?h=3.0.x
http://git.savannah.nongnu.org/cgit/gsequencer.git/tree/ags/server/security/ags_password_store.dtd?h=3.0.x

Thought, I have to solve howto store realm and salt ...

A possibility would be to put it into AgsConfig.


[server]
realm=ags-test-realm
auto-start=true
any-address=false
enable-ip4=true
ip4-address=127.0.0.1
enable-ip6=false
ip6-address=::1
server-port=8080




by Joël

 

Back to the top

Powered by Savane 3.13-3230.
Corresponding source code