{"action":"created","comment":{"url":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/comments/201311764","pull_request_review_id":135783392,"id":201311764,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMTMxMTc2NA==","diff_hunk":"@@ -0,0 +1,254 @@\n+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */\n+/*\n+ * This library is free software; you can redistribute it and/or\n+ * modify it under the terms of the GNU Lesser General Public\n+ * License as published by the Free Software Foundation; either\n+ * version 2 of the License, or (at your option) any later version.\n+ *\n+ * This library is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+ * Lesser General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU Lesser General Public\n+ * License along with this library; if not, write to the\n+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n+ * Boston, MA 02110-1301 USA.\n+ *\n+ * Copyright 2018 Javier Arteaga <jarteaga@jbeta.is>\n+ */\n+\n+#include \"nm-default.h\"\n+\n+#include \"nm-device-wireguard.h\"\n+#include \"nm-object-private.h\"\n+\n+G_DEFINE_TYPE (NMDeviceWireguard, nm_device_wireguard, NM_TYPE_DEVICE)\n+\n+#define NM_DEVICE_WIREGUARD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_WIREGUARD, NMDeviceWireguardPrivate))\n+\n+typedef struct {\n+\tguchar *private_key;\n+\tguchar *public_key;\n+\tguint16 listen_port;\n+\tguint32 fwmark;\n+} NMDeviceWireguardPrivate;\n+\n+NM_GOBJECT_PROPERTIES_DEFINE_BASE (\n+\tPROP_PRIVATE_KEY,\n+\tPROP_PUBLIC_KEY,\n+\tPROP_LISTEN_PORT,\n+\tPROP_FWMARK,\n+);\n+\n+/**\n+ * nm_device_wireguard_get_private_key:\n+ * @device: a #NMDeviceWireguard\n+ *\n+ * Gets the private key for this interface\n+ *\n+ * Returns: pointer to the 32-byte private key\n+ *\n+ * Since: 1.14\n+ **/\n+const guchar*\n+nm_device_wireguard_get_private_key (NMDeviceWireguard *device)\n+{\n+\tg_return_val_if_fail (NM_IS_DEVICE_WIREGUARD (device), 0);\n+\n+\treturn NM_DEVICE_WIREGUARD_GET_PRIVATE (device)->private_key;\n+}\n+\n+/**\n+ * nm_device_wireguard_get_public_key:\n+ * @device: a #NMDeviceWireguard\n+ *\n+ * Gets the public key for this interface\n+ *\n+ * Returns: pointer to the 32-byte public key\n+ *\n+ * Since: 1.14\n+ **/\n+const guchar*\n+nm_device_wireguard_get_public_key (NMDeviceWireguard *device)\n+{\n+\tg_return_val_if_fail (NM_IS_DEVICE_WIREGUARD (device), 0);\n+\n+\treturn NM_DEVICE_WIREGUARD_GET_PRIVATE (device)->public_key;\n+}\n+\n+/**\n+ * nm_device_wireguard_get_listen_port:\n+ * @device: a #NMDeviceWireguard\n+ *\n+ * Gets the local UDP port this interface listens on\n+ *\n+ * Returns: UDP listen port\n+ *\n+ * Since: 1.14\n+ **/\n+guint\n+nm_device_wireguard_get_listen_port (NMDeviceWireguard *device)\n+{\n+\tg_return_val_if_fail (NM_IS_DEVICE_WIREGUARD (device), 0);\n+\n+\treturn NM_DEVICE_WIREGUARD_GET_PRIVATE (device)->listen_port;\n+}\n+\n+/**\n+ * nm_device_wireguard_get_fwmark:\n+ * @device: a #NMDeviceWireguard\n+ *\n+ * Gets the firewall mark (fwmark) byte, if this interface sets one\n+ *\n+ * Returns: 0 if fwmark not in use, fwmark byte value otherwise\n+ *\n+ * Since: 1.14\n+ **/\n+guint\n+nm_device_wireguard_get_fwmark (NMDeviceWireguard *device)\n+{\n+\tg_return_val_if_fail (NM_IS_DEVICE_WIREGUARD (device), 0);\n+\n+\treturn NM_DEVICE_WIREGUARD_GET_PRIVATE (device)->fwmark;\n+}\n+\n+/***********************************************************/\n+\n+static void\n+nm_device_wireguard_init (NMDeviceWireguard *device)\n+{\n+}\n+\n+static void\n+init_dbus (NMObject *object)\n+{\n+\tNMDeviceWireguardPrivate *priv = NM_DEVICE_WIREGUARD_GET_PRIVATE (object);\n+\tconst NMPropertiesInfo property_info[] = {\n+\t\t{ NM_DEVICE_WIREGUARD_PRIVATE_KEY, &priv->private_key },\n+\t\t{ NM_DEVICE_WIREGUARD_PUBLIC_KEY,  &priv->public_key },\n+\t\t{ NM_DEVICE_WIREGUARD_LISTEN_PORT, &priv->listen_port },\n+\t\t{ NM_DEVICE_WIREGUARD_FWMARK,      &priv->fwmark },\n+\t\t{ NULL }\n+\t};\n+\n+\tNM_OBJECT_CLASS (nm_device_wireguard_parent_class)->init_dbus (object);\n+\n+\t_nm_object_register_properties (object,\n+\t                                NM_DBUS_INTERFACE_DEVICE_WIREGUARD,\n+\t                                property_info);\n+}\n+\n+static void\n+finalize (GObject *object)\n+{\n+\tG_OBJECT_CLASS (nm_device_wireguard_parent_class)->finalize (object);\n+}\n+\n+static void\n+get_property (GObject *object,\n+              guint prop_id,\n+              GValue *value,\n+              GParamSpec *pspec)\n+{\n+\tNMDeviceWireguard *device = NM_DEVICE_WIREGUARD (object);\n+\tNMDeviceWireguardPrivate *priv = NM_DEVICE_WIREGUARD_GET_PRIVATE (object);\n+\tgchar *b64;\n+\n+\tswitch (prop_id) {\n+\tcase PROP_PRIVATE_KEY:\n+\t\tb64 = g_base64_encode (priv->private_key, sizeof (priv->private_key));\n+\t\tg_value_set_string (value, b64);\n+\t\tg_free (b64);\n+\t\tbreak;\n+\tcase PROP_PUBLIC_KEY:\n+\t\tb64 = g_base64_encode (priv->public_key, sizeof (priv->public_key));\n+\t\tg_value_set_string (value, b64);\n+\t\tg_free (b64);\n+\t\tbreak;\n+\tcase PROP_LISTEN_PORT:\n+\t\tg_value_set_uint (value, nm_device_wireguard_get_listen_port (device));\n+\t\tbreak;\n+\tcase PROP_FWMARK:\n+\t\tg_value_set_uint (value, nm_device_wireguard_get_fwmark (device));\n+\t\tbreak;\n+\tdefault:\n+\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);\n+\t\tbreak;\n+\t}\n+}\n+\n+static void\n+nm_device_wireguard_class_init (NMDeviceWireguardClass *wireguard_class)\n+{\n+\tGObjectClass *object_class = G_OBJECT_CLASS (wireguard_class);\n+\tNMObjectClass *nm_object_class = NM_OBJECT_CLASS (wireguard_class);\n+\n+\tg_type_class_add_private (wireguard_class, sizeof (NMDeviceWireguardPrivate));\n+\n+\tobject_class->finalize = finalize;\n+\tobject_class->get_property = get_property;\n+\n+\tnm_object_class->init_dbus = init_dbus;\n+\n+\t/**\n+\t * NMDeviceWireguard:private_key:\n+\t *\n+\t * 32-byte private key.\n+\t * Set to all zeros to purge an existing key.\n+\t *\n+\t * Since: 1.14\n+\t **/\n+\tobj_properties[PROP_PRIVATE_KEY] =\n+\t    g_param_spec_value_array (NM_DEVICE_WIREGUARD_PRIVATE_KEY,\n+\t                              _(\"Private key\"),\n+\t                              _(\"32-byte private key. Set to all zeros to purge an existing key.\"),\n+\t                              NULL,\n+\t                              G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);\n+\n+\t/**\n+\t * NMDeviceWireguard:public_key:\n+\t *\n+\t * 32-byte public key, derived from the current private key.\n+\t *\n+\t * Since: 1.14\n+\t **/\n+\tobj_properties[PROP_PUBLIC_KEY] =\n+\t    g_param_spec_value_array (NM_DEVICE_WIREGUARD_PUBLIC_KEY,\n+\t                              _(\"Public key\"),\n+\t                              _(\"32-byte public key, derived from the current private key.\"),\n+\t                              NULL,\n+\t                              G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);\n+\n+\t/**\n+\t * NMDeviceWireguard:listen-port:\n+\t *\n+\t * Local UDP listen port.\n+\t * Set to 0 to allow a random port to be chosen (default).\n+\t *\n+\t * Since: 1.14\n+\t **/\n+\tobj_properties[PROP_LISTEN_PORT] =\n+\t    g_param_spec_uint (NM_DEVICE_WIREGUARD_LISTEN_PORT,\n+\t                       _(\"Listen port\"),","path":"libnm/nm-device-wireguard.c","position":233,"original_position":233,"commit_id":"980e0ccf68465fe3d6862dc9f3fb8877645863f8","original_commit_id":"980e0ccf68465fe3d6862dc9f3fb8877645863f8","user":{"login":"lkundrak","id":92695,"node_id":"MDQ6VXNlcjkyNjk1","avatar_url":"https://avatars2.githubusercontent.com/u/92695?v=4","gravatar_id":"","url":"https://api.github.com/users/lkundrak","html_url":"https://github.com/lkundrak","followers_url":"https://api.github.com/users/lkundrak/followers","following_url":"https://api.github.com/users/lkundrak/following{/other_user}","gists_url":"https://api.github.com/users/lkundrak/gists{/gist_id}","starred_url":"https://api.github.com/users/lkundrak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lkundrak/subscriptions","organizations_url":"https://api.github.com/users/lkundrak/orgs","repos_url":"https://api.github.com/users/lkundrak/repos","events_url":"https://api.github.com/users/lkundrak/events{/privacy}","received_events_url":"https://api.github.com/users/lkundrak/received_events","type":"User","site_admin":false},"body":"In general, we leave these blank. We don't use them anywhere really and a translatable string just adds work for translators.","created_at":"2018-07-10T11:47:04Z","updated_at":"2018-07-10T11:57:14Z","html_url":"https://github.com/NetworkManager/NetworkManager/pull/162#discussion_r201311764","pull_request_url":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/162","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/comments/201311764"},"html":{"href":"https://github.com/NetworkManager/NetworkManager/pull/162#discussion_r201311764"},"pull_request":{"href":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/162"}}},"pull_request":{"url":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/162","id":200234639,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAwMjM0NjM5","html_url":"https://github.com/NetworkManager/NetworkManager/pull/162","diff_url":"https://github.com/NetworkManager/NetworkManager/pull/162.diff","patch_url":"https://github.com/NetworkManager/NetworkManager/pull/162.patch","issue_url":"https://api.github.com/repos/NetworkManager/NetworkManager/issues/162","number":162,"state":"open","locked":false,"title":"core,libnm: introduce NMDeviceWireguard","user":{"login":"jbeta","id":8122741,"node_id":"MDQ6VXNlcjgxMjI3NDE=","avatar_url":"https://avatars3.githubusercontent.com/u/8122741?v=4","gravatar_id":"","url":"https://api.github.com/users/jbeta","html_url":"https://github.com/jbeta","followers_url":"https://api.github.com/users/jbeta/followers","following_url":"https://api.github.com/users/jbeta/following{/other_user}","gists_url":"https://api.github.com/users/jbeta/gists{/gist_id}","starred_url":"https://api.github.com/users/jbeta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jbeta/subscriptions","organizations_url":"https://api.github.com/users/jbeta/orgs","repos_url":"https://api.github.com/users/jbeta/repos","events_url":"https://api.github.com/users/jbeta/events{/privacy}","received_events_url":"https://api.github.com/users/jbeta/received_events","type":"User","site_admin":false},"body":"For now, the device only exposes partial link status (not including\r\npeers). It cannot create new links.\r\n\r\nThis PR is mostly sanity check / request for comments. I'm also looking for guidance on how to model Peers/AllowedIPs on the D-Bus interface: would these be object paths to separate instances, a complex `a(ss...qta(...))` D-Bus signature that maps to a `NMWireguardPeer` array, neither...?","created_at":"2018-07-09T22:16:28Z","updated_at":"2018-07-10T11:57:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c7738fd9a0e276f53d1e435bcb38866bc6b39def","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/162/commits","review_comments_url":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/162/comments","review_comment_url":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/comments{/number}","comments_url":"https://api.github.com/repos/NetworkManager/NetworkManager/issues/162/comments","statuses_url":"https://api.github.com/repos/NetworkManager/NetworkManager/statuses/980e0ccf68465fe3d6862dc9f3fb8877645863f8","head":{"label":"jbeta:wireguard-device-basic","ref":"wireguard-device-basic","sha":"980e0ccf68465fe3d6862dc9f3fb8877645863f8","user":{"login":"jbeta","id":8122741,"node_id":"MDQ6VXNlcjgxMjI3NDE=","avatar_url":"https://avatars3.githubusercontent.com/u/8122741?v=4","gravatar_id":"","url":"https://api.github.com/users/jbeta","html_url":"https://github.com/jbeta","followers_url":"https://api.github.com/users/jbeta/followers","following_url":"https://api.github.com/users/jbeta/following{/other_user}","gists_url":"https://api.github.com/users/jbeta/gists{/gist_id}","starred_url":"https://api.github.com/users/jbeta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jbeta/subscriptions","organizations_url":"https://api.github.com/users/jbeta/orgs","repos_url":"https://api.github.com/users/jbeta/repos","events_url":"https://api.github.com/users/jbeta/events{/privacy}","received_events_url":"https://api.github.com/users/jbeta/received_events","type":"User","site_admin":false},"repo":{"id":138027056,"node_id":"MDEwOlJlcG9zaXRvcnkxMzgwMjcwNTY=","name":"NetworkManager","full_name":"jbeta/NetworkManager","owner":{"login":"jbeta","id":8122741,"node_id":"MDQ6VXNlcjgxMjI3NDE=","avatar_url":"https://avatars3.githubusercontent.com/u/8122741?v=4","gravatar_id":"","url":"https://api.github.com/users/jbeta","html_url":"https://github.com/jbeta","followers_url":"https://api.github.com/users/jbeta/followers","following_url":"https://api.github.com/users/jbeta/following{/other_user}","gists_url":"https://api.github.com/users/jbeta/gists{/gist_id}","starred_url":"https://api.github.com/users/jbeta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jbeta/subscriptions","organizations_url":"https://api.github.com/users/jbeta/orgs","repos_url":"https://api.github.com/users/jbeta/repos","events_url":"https://api.github.com/users/jbeta/events{/privacy}","received_events_url":"https://api.github.com/users/jbeta/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jbeta/NetworkManager","description":"Mirror of the freedesktop.org repository. Feel free to do the pull requests!","fork":true,"url":"https://api.github.com/repos/jbeta/NetworkManager","forks_url":"https://api.github.com/repos/jbeta/NetworkManager/forks","keys_url":"https://api.github.com/repos/jbeta/NetworkManager/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jbeta/NetworkManager/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jbeta/NetworkManager/teams","hooks_url":"https://api.github.com/repos/jbeta/NetworkManager/hooks","issue_events_url":"https://api.github.com/repos/jbeta/NetworkManager/issues/events{/number}","events_url":"https://api.github.com/repos/jbeta/NetworkManager/events","assignees_url":"https://api.github.com/repos/jbeta/NetworkManager/assignees{/user}","branches_url":"https://api.github.com/repos/jbeta/NetworkManager/branches{/branch}","tags_url":"https://api.github.com/repos/jbeta/NetworkManager/tags","blobs_url":"https://api.github.com/repos/jbeta/NetworkManager/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jbeta/NetworkManager/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jbeta/NetworkManager/git/refs{/sha}","trees_url":"https://api.github.com/repos/jbeta/NetworkManager/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jbeta/NetworkManager/statuses/{sha}","languages_url":"https://api.github.com/repos/jbeta/NetworkManager/languages","stargazers_url":"https://api.github.com/repos/jbeta/NetworkManager/stargazers","contributors_url":"https://api.github.com/repos/jbeta/NetworkManager/contributors","subscribers_url":"https://api.github.com/repos/jbeta/NetworkManager/subscribers","subscription_url":"https://api.github.com/repos/jbeta/NetworkManager/subscription","commits_url":"https://api.github.com/repos/jbeta/NetworkManager/commits{/sha}","git_commits_url":"https://api.github.com/repos/jbeta/NetworkManager/git/commits{/sha}","comments_url":"https://api.github.com/repos/jbeta/NetworkManager/comments{/number}","issue_comment_url":"https://api.github.com/repos/jbeta/NetworkManager/issues/comments{/number}","contents_url":"https://api.github.com/repos/jbeta/NetworkManager/contents/{+path}","compare_url":"https://api.github.com/repos/jbeta/NetworkManager/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jbeta/NetworkManager/merges","archive_url":"https://api.github.com/repos/jbeta/NetworkManager/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jbeta/NetworkManager/downloads","issues_url":"https://api.github.com/repos/jbeta/NetworkManager/issues{/number}","pulls_url":"https://api.github.com/repos/jbeta/NetworkManager/pulls{/number}","milestones_url":"https://api.github.com/repos/jbeta/NetworkManager/milestones{/number}","notifications_url":"https://api.github.com/repos/jbeta/NetworkManager/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jbeta/NetworkManager/labels{/name}","releases_url":"https://api.github.com/repos/jbeta/NetworkManager/releases{/id}","deployments_url":"https://api.github.com/repos/jbeta/NetworkManager/deployments","created_at":"2018-06-20T12:01:04Z","updated_at":"2018-07-01T12:55:06Z","pushed_at":"2018-07-09T22:28:44Z","git_url":"git://github.com/jbeta/NetworkManager.git","ssh_url":"git@github.com:jbeta/NetworkManager.git","clone_url":"https://github.com/jbeta/NetworkManager.git","svn_url":"https://github.com/jbeta/NetworkManager","homepage":"http://cgit.freedesktop.org/NetworkManager/NetworkManager/","size":106549,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"wireguard-platform"}},"base":{"label":"NetworkManager:master","ref":"master","sha":"73fa1b54ef98d70402ea91e88fd15298eb151fb7","user":{"login":"NetworkManager","id":14775807,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0Nzc1ODA3","avatar_url":"https://avatars2.githubusercontent.com/u/14775807?v=4","gravatar_id":"","url":"https://api.github.com/users/NetworkManager","html_url":"https://github.com/NetworkManager","followers_url":"https://api.github.com/users/NetworkManager/followers","following_url":"https://api.github.com/users/NetworkManager/following{/other_user}","gists_url":"https://api.github.com/users/NetworkManager/gists{/gist_id}","starred_url":"https://api.github.com/users/NetworkManager/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NetworkManager/subscriptions","organizations_url":"https://api.github.com/users/NetworkManager/orgs","repos_url":"https://api.github.com/users/NetworkManager/repos","events_url":"https://api.github.com/users/NetworkManager/events{/privacy}","received_events_url":"https://api.github.com/users/NetworkManager/received_events","type":"Organization","site_admin":false},"repo":{"id":42934521,"node_id":"MDEwOlJlcG9zaXRvcnk0MjkzNDUyMQ==","name":"NetworkManager","full_name":"NetworkManager/NetworkManager","owner":{"login":"NetworkManager","id":14775807,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0Nzc1ODA3","avatar_url":"https://avatars2.githubusercontent.com/u/14775807?v=4","gravatar_id":"","url":"https://api.github.com/users/NetworkManager","html_url":"https://github.com/NetworkManager","followers_url":"https://api.github.com/users/NetworkManager/followers","following_url":"https://api.github.com/users/NetworkManager/following{/other_user}","gists_url":"https://api.github.com/users/NetworkManager/gists{/gist_id}","starred_url":"https://api.github.com/users/NetworkManager/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NetworkManager/subscriptions","organizations_url":"https://api.github.com/users/NetworkManager/orgs","repos_url":"https://api.github.com/users/NetworkManager/repos","events_url":"https://api.github.com/users/NetworkManager/events{/privacy}","received_events_url":"https://api.github.com/users/NetworkManager/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/NetworkManager/NetworkManager","description":"Mirror of the freedesktop.org repository. Feel free to do the pull requests!","fork":false,"url":"https://api.github.com/repos/NetworkManager/NetworkManager","forks_url":"https://api.github.com/repos/NetworkManager/NetworkManager/forks","keys_url":"https://api.github.com/repos/NetworkManager/NetworkManager/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NetworkManager/NetworkManager/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NetworkManager/NetworkManager/teams","hooks_url":"https://api.github.com/repos/NetworkManager/NetworkManager/hooks","issue_events_url":"https://api.github.com/repos/NetworkManager/NetworkManager/issues/events{/number}","events_url":"https://api.github.com/repos/NetworkManager/NetworkManager/events","assignees_url":"https://api.github.com/repos/NetworkManager/NetworkManager/assignees{/user}","branches_url":"https://api.github.com/repos/NetworkManager/NetworkManager/branches{/branch}","tags_url":"https://api.github.com/repos/NetworkManager/NetworkManager/tags","blobs_url":"https://api.github.com/repos/NetworkManager/NetworkManager/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NetworkManager/NetworkManager/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NetworkManager/NetworkManager/git/refs{/sha}","trees_url":"https://api.github.com/repos/NetworkManager/NetworkManager/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NetworkManager/NetworkManager/statuses/{sha}","languages_url":"https://api.github.com/repos/NetworkManager/NetworkManager/languages","stargazers_url":"https://api.github.com/repos/NetworkManager/NetworkManager/stargazers","contributors_url":"https://api.github.com/repos/NetworkManager/NetworkManager/contributors","subscribers_url":"https://api.github.com/repos/NetworkManager/NetworkManager/subscribers","subscription_url":"https://api.github.com/repos/NetworkManager/NetworkManager/subscription","commits_url":"https://api.github.com/repos/NetworkManager/NetworkManager/commits{/sha}","git_commits_url":"https://api.github.com/repos/NetworkManager/NetworkManager/git/commits{/sha}","comments_url":"https://api.github.com/repos/NetworkManager/NetworkManager/comments{/number}","issue_comment_url":"https://api.github.com/repos/NetworkManager/NetworkManager/issues/comments{/number}","contents_url":"https://api.github.com/repos/NetworkManager/NetworkManager/contents/{+path}","compare_url":"https://api.github.com/repos/NetworkManager/NetworkManager/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NetworkManager/NetworkManager/merges","archive_url":"https://api.github.com/repos/NetworkManager/NetworkManager/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NetworkManager/NetworkManager/downloads","issues_url":"https://api.github.com/repos/NetworkManager/NetworkManager/issues{/number}","pulls_url":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls{/number}","milestones_url":"https://api.github.com/repos/NetworkManager/NetworkManager/milestones{/number}","notifications_url":"https://api.github.com/repos/NetworkManager/NetworkManager/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NetworkManager/NetworkManager/labels{/name}","releases_url":"https://api.github.com/repos/NetworkManager/NetworkManager/releases{/id}","deployments_url":"https://api.github.com/repos/NetworkManager/NetworkManager/deployments","created_at":"2015-09-22T13:12:35Z","updated_at":"2018-07-10T11:40:09Z","pushed_at":"2018-07-10T11:56:34Z","git_url":"git://github.com/NetworkManager/NetworkManager.git","ssh_url":"git@github.com:NetworkManager/NetworkManager.git","clone_url":"https://github.com/NetworkManager/NetworkManager.git","svn_url":"https://github.com/NetworkManager/NetworkManager","homepage":"http://cgit.freedesktop.org/NetworkManager/NetworkManager/","size":107346,"stargazers_count":53,"watchers_count":53,"language":"C","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":66,"mirror_url":null,"archived":false,"open_issues_count":9,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":66,"open_issues":9,"watchers":53,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/162"},"html":{"href":"https://github.com/NetworkManager/NetworkManager/pull/162"},"issue":{"href":"https://api.github.com/repos/NetworkManager/NetworkManager/issues/162"},"comments":{"href":"https://api.github.com/repos/NetworkManager/NetworkManager/issues/162/comments"},"review_comments":{"href":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/162/comments"},"review_comment":{"href":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/NetworkManager/NetworkManager/pulls/162/commits"},"statuses":{"href":"https://api.github.com/repos/NetworkManager/NetworkManager/statuses/980e0ccf68465fe3d6862dc9f3fb8877645863f8"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"lkundrak"}}