summary refs log tree commit diff
path: root/examples/python/gi/nm-keyfile.py
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2021-02-11 18:11:46 +0100
committerMichael Biebl <biebl@debian.org>2021-02-11 18:11:46 +0100
commit80ec1decc49c72efec2a8b87c06245c92c0ab807 (patch)
treee3b229aa94e8dcf0590f2317664176e7b8f7607b /examples/python/gi/nm-keyfile.py
parent65f86e8f56267192d42f2b629fc6b0c99fb9cd0c (diff)
New upstream version 1.29.90 upstream/1.29.90
Diffstat (limited to 'examples/python/gi/nm-keyfile.py')
-rwxr-xr-xexamples/python/gi/nm-keyfile.py139
1 files changed, 139 insertions, 0 deletions
diff --git a/examples/python/gi/nm-keyfile.py b/examples/python/gi/nm-keyfile.py
new file mode 100755
index 00000000..3a467d43
--- /dev/null
+++ b/examples/python/gi/nm-keyfile.py
@@ -0,0 +1,139 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+import sys
+import os
+
+import gi
+
+gi.require_version("NM", "1.0")
+from gi.repository import NM, GLib
+
+###############################################################################
+
+
+def kf_load_from_file(filename):
+    kf = GLib.KeyFile.new()
+    kf.load_from_file(filename, GLib.KeyFileFlags.NONE)
+    return kf
+
+
+def kf_to_string(kf):
+    d, l = kf.to_data()
+    return d
+
+
+def debug(message):
+    if os.getenv("DEBUG") == "1":
+        print(">>> %s" % (message))
+
+
+###############################################################################
+
+filename = sys.argv[1]
+base_dir = os.path.dirname(os.path.realpath(filename))
+
+kf = kf_load_from_file(filename)
+
+print('> keyfile "%s":' % (filename))
+print(">>\n%s\n<<" % (kf_to_string(kf)))
+
+###############################################################################
+
+
+def kf_handler_read(keyfile, connection, handler_type, handler_data, user_data):
+    kf_handler_read_cnt = globals().get("kf_handler_read_cnt", 0) + 1
+    globals()["kf_handler_read_cnt"] = kf_handler_read_cnt
+
+    [kf_group, kf_key, cur_setting, cur_property] = handler_data.get_context()
+
+    debug("kf_handler_read(%s): keyfile=%r" % (kf_handler_read_cnt, keyfile))
+    debug("kf_handler_read(%s): connection=%r" % (kf_handler_read_cnt, connection))
+    debug("kf_handler_read(%s): handler-type=%r" % (kf_handler_read_cnt, handler_type))
+    debug("kf_handler_read(%s): handler-data=%r" % (kf_handler_read_cnt, handler_data))
+    debug("kf_handler_read(%s): user-data=%r" % (kf_handler_read_cnt, user_data))
+    debug("kf_handler_read(%s): kf-group=%r" % (kf_handler_read_cnt, kf_group))
+    debug("kf_handler_read(%s): kf-key=%r" % (kf_handler_read_cnt, kf_key))
+    debug("kf_handler_read(%s): kf-setting=%r" % (kf_handler_read_cnt, cur_setting))
+    debug("kf_handler_read(%s): kf-property=%r" % (kf_handler_read_cnt, cur_property))
+
+    if handler_type == NM.KeyfileHandlerType.WARN:
+        [message, severity] = handler_data.warn_get()
+        debug('parse-warning: <%s> = "%s"' % (severity, message))
+        print("> warning: %s" % (message))
+        return False
+
+    if handler_type == NM.KeyfileHandlerType.WRITE_CERT:
+        # just to show how to abort the parsing. This event won't happen
+        # for read.
+        handler_data.fail_with_error(
+            GLib.GError.new_literal(
+                NM.ConnectionError.quark(), "hallo1", NM.ConnectionError.MISSINGPROPERTY
+            )
+        )
+
+    # don't handle unknown handler types.
+    return False
+
+
+try:
+    print("parse keyfile...")
+    c = NM.keyfile_read(kf, base_dir, NM.KeyfileHandlerFlags.NONE, kf_handler_read, 42)
+except Exception as e:
+    print("parsing failed: %r" % (e))
+    raise
+
+verify_failure = None
+try:
+    c.verify()
+except Exception as e:
+    verify_failure = e.message
+
+print(
+    'parsing succeeded: "%s" (%s)%s'
+    % (
+        c.get_id(),
+        c.get_uuid(),
+        " (invalid: " + verify_failure + ")" if verify_failure is not None else "",
+    )
+)
+
+
+###############################################################################
+
+
+def kf_handler_write(connection, keyfile, handler_type, handler_data, user_data):
+    kf_handler_write_cnt = globals().get("kf_handler_write_cnt", 0) + 1
+    globals()["kf_handler_write_cnt"] = kf_handler_write_cnt
+
+    [kf_group, kf_key, cur_setting, cur_property] = handler_data.get_context()
+
+    debug("kf_handler_write(%s): keyfile=%r" % (kf_handler_write_cnt, keyfile))
+    debug("kf_handler_write(%s): connection=%r" % (kf_handler_write_cnt, connection))
+    debug(
+        "kf_handler_write(%s): handler-type=%r" % (kf_handler_write_cnt, handler_type)
+    )
+    debug(
+        "kf_handler_write(%s): handler-data=%r" % (kf_handler_write_cnt, handler_data)
+    )
+    debug("kf_handler_write(%s): user-data=%r" % (kf_handler_write_cnt, user_data))
+    debug("kf_handler_write(%s): kf-group=%r" % (kf_handler_write_cnt, kf_group))
+    debug("kf_handler_write(%s): kf-key=%r" % (kf_handler_write_cnt, kf_key))
+    debug("kf_handler_write(%s): kf-setting=%r" % (kf_handler_write_cnt, cur_setting))
+    debug("kf_handler_write(%s): kf-property=%r" % (kf_handler_write_cnt, cur_property))
+
+    if handler_type == NM.KeyfileHandlerType.WRITE_CERT:
+        return False
+    return False
+
+
+try:
+    print("")
+    print("write keyfile...")
+    kf2 = NM.keyfile_write(c, NM.KeyfileHandlerFlags.NONE, kf_handler_write, 43)
+except Exception as e:
+    print("write failed: %r" % (e))
+    raise
+
+print("persisted again:")
+print(">>\n%s\n<<" % (kf_to_string(kf2)))