{"action":"created","comment":{"url":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/comments/225929890","pull_request_review_id":165630803,"id":225929890,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNTkyOTg5MA==","diff_hunk":"@@ -451,3 +483,510 @@ epc_get_app_filter_finish (GAsyncResult  *result,\n \n   return g_task_propagate_pointer (G_TASK (result), error);\n }\n+\n+static void set_bus_cb              (GObject         *obj,\n+                                     GAsyncResult    *result,\n+                                     gpointer         user_data);\n+static void set_app_filter          (GDBusConnection *connection,\n+                                     GTask           *task);\n+static void set_app_filter_cb       (GObject         *obj,\n+                                     GAsyncResult    *result,\n+                                     gpointer         user_data);\n+static void set_oars_filter_cb      (GObject         *obj,\n+                                     GAsyncResult    *result,\n+                                     gpointer         user_data);\n+static void set_app_filter_complete (GDBusConnection *connection,\n+                                     GTask           *task);\n+\n+typedef struct\n+{\n+  uid_t user_id;\n+  EpcAppFilter *app_filter;  /* (owned) */\n+  gboolean allow_interactive_authorization;\n+\n+  GAsyncResult *set_app_filter_result;  /* (nullable) (owned) */\n+  GAsyncResult *set_oars_filter_result;  /* (nullable) (owned) */\n+} SetAppFilterData;\n+\n+static void\n+set_app_filter_data_free (SetAppFilterData *data)\n+{\n+  epc_app_filter_unref (data->app_filter);\n+  g_clear_object (&data->set_app_filter_result);\n+  g_clear_object (&data->set_oars_filter_result);\n+  g_free (data);\n+}\n+\n+G_DEFINE_AUTOPTR_CLEANUP_FUNC (SetAppFilterData, set_app_filter_data_free)\n+\n+/**\n+ * epc_set_app_filter_async:\n+ * @connection: (nullable): a #GDBusConnection to the system bus, or %NULL to\n+ *    use the default\n+ * @user_id: ID of the user to set the filter for, typically coming from getuid()\n+ * @app_filter: (transfer none): the app filter to set for the user\n+ * @allow_interactive_authorization: %TRUE to allow interactive polkit\n+ *    authorization dialogues to be displayed during the call; %FALSE otherwise\n+ * @callback: a #GAsyncReadyCallback\n+ * @cancellable: (nullable): a #GCancellable, or %NULL\n+ * @user_data: user data to pass to @callback\n+ *\n+ * Asynchronously set the app filter settings for the given @user_id to the\n+ * given @app_filter instance. This will set all fields of the app filter.\n+ *\n+ * @connection should be a connection to the system bus, where accounts-service\n+ * runs. It’s provided mostly for testing purposes, or to allow an existing\n+ * connection to be re-used. Pass %NULL to use the default connection.\n+ *\n+ * On failure, an #EpcAppFilterError, a #GDBusError or a #GIOError will be\n+ * returned. The user’s app filter settings will be left in an undefined state.\n+ *\n+ * Since: 0.1.0\n+ */\n+void\n+epc_set_app_filter_async (GDBusConnection     *connection,\n+                          uid_t                user_id,\n+                          EpcAppFilter        *app_filter,\n+                          gboolean             allow_interactive_authorization,\n+                          GCancellable        *cancellable,\n+                          GAsyncReadyCallback  callback,\n+                          gpointer             user_data)\n+{\n+  g_autoptr(GDBusConnection) connection_owned = NULL;\n+  g_autoptr(GTask) task = NULL;\n+  g_autoptr(SetAppFilterData) data = NULL;\n+\n+  g_return_if_fail (connection == NULL || G_IS_DBUS_CONNECTION (connection));\n+  g_return_if_fail (app_filter != NULL);\n+  g_return_if_fail (app_filter->ref_count >= 1);\n+  g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));\n+\n+  task = g_task_new (NULL, cancellable, callback, user_data);\n+  g_task_set_source_tag (task, epc_set_app_filter_async);\n+\n+  data = g_new0 (SetAppFilterData, 1);\n+  data->user_id = user_id;\n+  data->app_filter = epc_app_filter_ref (app_filter);\n+  data->allow_interactive_authorization = allow_interactive_authorization;\n+  g_task_set_task_data (task, g_steal_pointer (&data),\n+                        (GDestroyNotify) set_app_filter_data_free);\n+\n+  if (connection == NULL)\n+    g_bus_get (G_BUS_TYPE_SYSTEM, cancellable,\n+               set_bus_cb, g_steal_pointer (&task));\n+  else\n+    set_app_filter (connection, g_steal_pointer (&task));\n+}\n+\n+static void\n+set_bus_cb (GObject      *obj,\n+            GAsyncResult *result,\n+            gpointer      user_data)\n+{\n+  g_autoptr(GTask) task = G_TASK (user_data);\n+  g_autoptr(GDBusConnection) connection = NULL;\n+  g_autoptr(GError) local_error = NULL;\n+\n+  connection = g_bus_get_finish (result, &local_error);\n+\n+  if (local_error != NULL)\n+    g_task_return_error (task, g_steal_pointer (&local_error));\n+  else\n+    set_app_filter (connection, g_steal_pointer (&task));\n+}\n+\n+static void\n+set_app_filter (GDBusConnection *connection,\n+                GTask           *task)\n+{\n+  g_autofree gchar *object_path = NULL;\n+  g_autoptr(GVariant) app_filter_variant = NULL;\n+  g_autoptr(GVariant) oars_filter_variant = NULL;\n+  GCancellable *cancellable;\n+\n+  SetAppFilterData *data = g_task_get_task_data (task);\n+  cancellable = g_task_get_cancellable (task);\n+  object_path = g_strdup_printf (\"/org/freedesktop/Accounts/User%u\",\n+                                 data->user_id);\n+\n+  app_filter_variant = _epc_app_filter_build_app_filter_variant (data->app_filter);\n+  oars_filter_variant = g_variant_new (\"(s@a{ss})\", \"oars-1.1\",\n+                                       data->app_filter->oars_ratings);\n+\n+  g_dbus_connection_call (connection,\n+                          \"org.freedesktop.Accounts\",\n+                          object_path,\n+                          \"org.freedesktop.DBus.Properties\",\n+                          \"Set\",\n+                          g_variant_new (\"(ssv)\",\n+                                         \"com.endlessm.ParentalControls.AppFilter\",\n+                                         \"app-filter\",\n+                                         g_steal_pointer (&app_filter_variant)),\n+                          G_VARIANT_TYPE (\"()\"),\n+                          data->allow_interactive_authorization\n+                            ? G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION\n+                            : G_DBUS_CALL_FLAGS_NONE,\n+                          -1,  /* timeout, ms */\n+                          cancellable,\n+                          set_app_filter_cb,\n+                          g_object_ref (task));\n+  g_dbus_connection_call (connection,\n+                          \"org.freedesktop.Accounts\",\n+                          object_path,\n+                          \"org.freedesktop.DBus.Properties\",\n+                          \"Set\",\n+                          g_variant_new (\"(ssv)\",\n+                                         \"com.endlessm.ParentalControls.AppFilter\",\n+                                         \"oars-filter\",\n+                                         g_steal_pointer (&oars_filter_variant)),\n+                          G_VARIANT_TYPE (\"()\"),\n+                          data->allow_interactive_authorization\n+                            ? G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION\n+                            : G_DBUS_CALL_FLAGS_NONE,\n+                          -1,  /* timeout, ms */\n+                          cancellable,\n+                          set_oars_filter_cb,\n+                          g_object_ref (task));\n+}\n+\n+static void\n+set_app_filter_cb (GObject      *obj,\n+                   GAsyncResult *result,\n+                   gpointer      user_data)\n+{\n+  GDBusConnection *connection = G_DBUS_CONNECTION (obj);\n+  g_autoptr(GTask) task = G_TASK (user_data);\n+\n+  SetAppFilterData *data = g_task_get_task_data (task);\n+  g_assert (data->set_app_filter_result == NULL);\n+  data->set_app_filter_result = g_object_ref (result);\n+  set_app_filter_complete (connection, task);\n+}\n+\n+static void\n+set_oars_filter_cb (GObject      *obj,\n+                    GAsyncResult *result,\n+                    gpointer      user_data)\n+{\n+  GDBusConnection *connection = G_DBUS_CONNECTION (obj);\n+  g_autoptr(GTask) task = G_TASK (user_data);\n+\n+  SetAppFilterData *data = g_task_get_task_data (task);\n+  g_assert (data->set_oars_filter_result == NULL);\n+  data->set_oars_filter_result = g_object_ref (result);\n+  set_app_filter_complete (connection, task);\n+}\n+\n+static void\n+set_app_filter_complete (GDBusConnection *connection,\n+                         GTask           *task)\n+{\n+  g_autoptr(GVariant) app_filter_result_variant = NULL;\n+  g_autoptr(GVariant) oars_filter_result_variant = NULL;\n+  g_autoptr(GError) app_filter_error = NULL;\n+  g_autoptr(GError) oars_filter_error = NULL;\n+\n+  SetAppFilterData *data = g_task_get_task_data (task);\n+\n+  if (data->set_app_filter_result == NULL ||\n+      data->set_oars_filter_result == NULL)\n+    return;\n+\n+  app_filter_result_variant = g_dbus_connection_call_finish (connection,\n+                                                             data->set_app_filter_result,\n+                                                             &app_filter_error);\n+  oars_filter_result_variant = g_dbus_connection_call_finish (connection,\n+                                                              data->set_oars_filter_result,\n+                                                              &oars_filter_error);\n+\n+  if (app_filter_error != NULL)\n+    {\n+      g_task_return_error (task, bus_error_to_app_filter_error (app_filter_error,\n+                                                                data->user_id));\n+      return;\n+    }\n+  if (oars_filter_error != NULL)\n+    {\n+      g_task_return_error (task, bus_error_to_app_filter_error (oars_filter_error,\n+                                                                data->user_id));\n+      return;\n+    }\n+\n+  g_task_return_boolean (task, TRUE);\n+}\n+\n+/**\n+ * epc_set_app_filter_finish:\n+ * @result: a #GAsyncResult\n+ * @error: return location for a #GError, or %NULL\n+ *\n+ * Finish an asynchronous operation to set the app filter for a user, started\n+ * with epc_set_app_filter_async().\n+ *\n+ * Returns: %TRUE on success, %FALSE otherwise\n+ * Since: 0.1.0\n+ */\n+gboolean\n+epc_set_app_filter_finish (GAsyncResult  *result,\n+                           GError       **error)\n+{\n+  g_return_val_if_fail (g_task_is_valid (result, NULL), FALSE);\n+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);\n+\n+  return g_task_propagate_boolean (G_TASK (result), error);\n+}\n+\n+/*\n+ * Actual implementation of #EpcAppFilterBuilder.\n+ *\n+ * All members are %NULL if un-initialised, cleared, or ended.\n+ */\n+typedef struct\n+{\n+  GPtrArray *paths_blacklist;  /* (nullable) (owned) (element-type filename) */\n+  GHashTable *oars;  /* (nullable) (owned) (element-type utf8 EpcAppFilterOarsValue) */\n+} EpcAppFilterBuilderReal;\n+\n+G_DEFINE_BOXED_TYPE (EpcAppFilterBuilder, epc_app_filter_builder,\n+                     epc_app_filter_builder_copy, epc_app_filter_builder_free)\n+\n+/**\n+ * epc_app_filter_builder_init:\n+ * @builder: an uninitialised #EpcAppFilterBuilder\n+ *\n+ * Initialise the given @builder so it can be used to construct a new\n+ * #EpcAppFilter. @builder must have been allocated on the stack, and must not\n+ * already be initialised.\n+ *\n+ * Construct the #EpcAppFilter by calling methods on @builder, followed by\n+ * epc_app_filter_builder_end(). To abort construction, use\n+ * epc_app_filter_builder_clear().\n+ *\n+ * Since: 0.1.0\n+ */\n+void\n+epc_app_filter_builder_init (EpcAppFilterBuilder *builder)\n+{\n+  EpcAppFilterBuilder local_builder = EPC_APP_FILTER_BUILDER_INIT ();\n+  EpcAppFilterBuilderReal *_builder = (EpcAppFilterBuilderReal *) builder;\n+\n+  g_return_if_fail (_builder != NULL);\n+  g_return_if_fail (_builder->paths_blacklist == NULL);\n+\n+  memcpy (builder, &local_builder, sizeof (local_builder));\n+}\n+\n+/**\n+ * epc_app_filter_builder_clear:\n+ * @builder: an #EpcAppFilterBuilder\n+ *\n+ * Clear @builder, freeing any internal state in it. This will not free the\n+ * top-level storage for @builder itself, which is assumed to be allocated on\n+ * the stack.\n+ *\n+ * If called on an already-cleared #EpcAppFilterBuilder, this function is\n+ * idempotent.\n+ *\n+ * Since: 0.1.0\n+ */\n+void\n+epc_app_filter_builder_clear (EpcAppFilterBuilder *builder)\n+{\n+  EpcAppFilterBuilderReal *_builder = (EpcAppFilterBuilderReal *) builder;\n+\n+  g_return_if_fail (_builder != NULL);\n+\n+  g_clear_pointer (&_builder->paths_blacklist, g_ptr_array_unref);\n+  g_clear_pointer (&_builder->oars, g_hash_table_unref);\n+}\n+\n+/**\n+ * epc_app_filter_builder_new:\n+ *\n+ * Construct a new #EpcAppFilterBuilder on the heap. This is intended for\n+ * language bindings. The returned builder must eventually be freed with\n+ * epc_app_filter_builder_free(), but can be cleared zero or more times with\n+ * epc_app_filter_builder_clear() first.\n+ *\n+ * Returns: (transfer full): a new heap-allocated #EpcAppFilterBuilder\n+ * Since: 0.1.0\n+ */\n+EpcAppFilterBuilder *\n+epc_app_filter_builder_new (void)\n+{\n+  g_autoptr(EpcAppFilterBuilder) builder = NULL;\n+\n+  builder = g_new0 (EpcAppFilterBuilder, 1);\n+  epc_app_filter_builder_init (builder);\n+\n+  return g_steal_pointer (&builder);\n+}\n+\n+/**\n+ * epc_app_filter_builder_copy:\n+ * @builder: an #EpcAppFilterBuilder\n+ *\n+ * Copy the given @builder to a newly-allocated #EpcAppFilterBuilder on the\n+ * heap.\n+ *\n+ * Returns: (transfer full): a copy of @builder\n+ * Since: 0.1.0\n+ */\n+EpcAppFilterBuilder *\n+epc_app_filter_builder_copy (EpcAppFilterBuilder *builder)\n+{\n+  EpcAppFilterBuilderReal *_builder = (EpcAppFilterBuilderReal *) builder;\n+  g_autoptr(EpcAppFilterBuilder) copy = NULL;\n+  EpcAppFilterBuilderReal *_copy;\n+\n+  g_return_val_if_fail (builder != NULL, NULL);\n+\n+  copy = epc_app_filter_builder_new ();\n+  _copy = (EpcAppFilterBuilderReal *) copy;\n+\n+  _copy->paths_blacklist = g_ptr_array_ref (_builder->paths_blacklist);\n+  _copy->oars = g_hash_table_ref (_builder->oars);","path":"libeos-parental-controls/app-filter.c","position":440,"original_position":440,"commit_id":"02dfdac221f0760fd53a068b55e680d778a5bbd2","original_commit_id":"02dfdac221f0760fd53a068b55e680d778a5bbd2","user":{"login":"GeorgesStavracas","id":3518204,"node_id":"MDQ6VXNlcjM1MTgyMDQ=","avatar_url":"https://avatars1.githubusercontent.com/u/3518204?v=4","gravatar_id":"","url":"https://api.github.com/users/GeorgesStavracas","html_url":"https://github.com/GeorgesStavracas","followers_url":"https://api.github.com/users/GeorgesStavracas/followers","following_url":"https://api.github.com/users/GeorgesStavracas/following{/other_user}","gists_url":"https://api.github.com/users/GeorgesStavracas/gists{/gist_id}","starred_url":"https://api.github.com/users/GeorgesStavracas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GeorgesStavracas/subscriptions","organizations_url":"https://api.github.com/users/GeorgesStavracas/orgs","repos_url":"https://api.github.com/users/GeorgesStavracas/repos","events_url":"https://api.github.com/users/GeorgesStavracas/events{/privacy}","received_events_url":"https://api.github.com/users/GeorgesStavracas/received_events","type":"User","site_admin":false},"body":"I guess the problem here is of documentation, more than code, though.","created_at":"2018-10-17T13:34:35Z","updated_at":"2018-10-17T13:35:55Z","html_url":"https://github.com/endlessm/eos-parental-controls/pull/6#discussion_r225929890","pull_request_url":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/6","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/comments/225929890"},"html":{"href":"https://github.com/endlessm/eos-parental-controls/pull/6#discussion_r225929890"},"pull_request":{"href":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/6"}},"in_reply_to_id":225929067},"pull_request":{"url":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/6","id":222341757,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIyMzQxNzU3","html_url":"https://github.com/endlessm/eos-parental-controls/pull/6","diff_url":"https://github.com/endlessm/eos-parental-controls/pull/6.diff","patch_url":"https://github.com/endlessm/eos-parental-controls/pull/6.patch","issue_url":"https://api.github.com/repos/endlessm/eos-parental-controls/issues/6","number":6,"state":"open","locked":false,"title":"T24025 Add setter support to the library","user":{"login":"pwithnall","id":53172,"node_id":"MDQ6VXNlcjUzMTcy","avatar_url":"https://avatars2.githubusercontent.com/u/53172?v=4","gravatar_id":"","url":"https://api.github.com/users/pwithnall","html_url":"https://github.com/pwithnall","followers_url":"https://api.github.com/users/pwithnall/followers","following_url":"https://api.github.com/users/pwithnall/following{/other_user}","gists_url":"https://api.github.com/users/pwithnall/gists{/gist_id}","starred_url":"https://api.github.com/users/pwithnall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pwithnall/subscriptions","organizations_url":"https://api.github.com/users/pwithnall/orgs","repos_url":"https://api.github.com/users/pwithnall/repos","events_url":"https://api.github.com/users/pwithnall/events{/privacy}","received_events_url":"https://api.github.com/users/pwithnall/received_events","type":"User","site_admin":false},"body":"https://phabricator.endlessm.com/T24025","created_at":"2018-10-12T03:50:06Z","updated_at":"2018-10-17T13:35:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c81de5844c21df90bb6584271853c0316048ab77","assignee":{"login":"pwithnall","id":53172,"node_id":"MDQ6VXNlcjUzMTcy","avatar_url":"https://avatars2.githubusercontent.com/u/53172?v=4","gravatar_id":"","url":"https://api.github.com/users/pwithnall","html_url":"https://github.com/pwithnall","followers_url":"https://api.github.com/users/pwithnall/followers","following_url":"https://api.github.com/users/pwithnall/following{/other_user}","gists_url":"https://api.github.com/users/pwithnall/gists{/gist_id}","starred_url":"https://api.github.com/users/pwithnall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pwithnall/subscriptions","organizations_url":"https://api.github.com/users/pwithnall/orgs","repos_url":"https://api.github.com/users/pwithnall/repos","events_url":"https://api.github.com/users/pwithnall/events{/privacy}","received_events_url":"https://api.github.com/users/pwithnall/received_events","type":"User","site_admin":false},"assignees":[{"login":"pwithnall","id":53172,"node_id":"MDQ6VXNlcjUzMTcy","avatar_url":"https://avatars2.githubusercontent.com/u/53172?v=4","gravatar_id":"","url":"https://api.github.com/users/pwithnall","html_url":"https://github.com/pwithnall","followers_url":"https://api.github.com/users/pwithnall/followers","following_url":"https://api.github.com/users/pwithnall/following{/other_user}","gists_url":"https://api.github.com/users/pwithnall/gists{/gist_id}","starred_url":"https://api.github.com/users/pwithnall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pwithnall/subscriptions","organizations_url":"https://api.github.com/users/pwithnall/orgs","repos_url":"https://api.github.com/users/pwithnall/repos","events_url":"https://api.github.com/users/pwithnall/events{/privacy}","received_events_url":"https://api.github.com/users/pwithnall/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"wjt","id":86760,"node_id":"MDQ6VXNlcjg2NzYw","avatar_url":"https://avatars2.githubusercontent.com/u/86760?v=4","gravatar_id":"","url":"https://api.github.com/users/wjt","html_url":"https://github.com/wjt","followers_url":"https://api.github.com/users/wjt/followers","following_url":"https://api.github.com/users/wjt/following{/other_user}","gists_url":"https://api.github.com/users/wjt/gists{/gist_id}","starred_url":"https://api.github.com/users/wjt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wjt/subscriptions","organizations_url":"https://api.github.com/users/wjt/orgs","repos_url":"https://api.github.com/users/wjt/repos","events_url":"https://api.github.com/users/wjt/events{/privacy}","received_events_url":"https://api.github.com/users/wjt/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/6/commits","review_comments_url":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/6/comments","review_comment_url":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/comments{/number}","comments_url":"https://api.github.com/repos/endlessm/eos-parental-controls/issues/6/comments","statuses_url":"https://api.github.com/repos/endlessm/eos-parental-controls/statuses/02dfdac221f0760fd53a068b55e680d778a5bbd2","head":{"label":"endlessm:T24025-setters","ref":"T24025-setters","sha":"02dfdac221f0760fd53a068b55e680d778a5bbd2","user":{"login":"endlessm","id":1930958,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MzA5NTg=","avatar_url":"https://avatars1.githubusercontent.com/u/1930958?v=4","gravatar_id":"","url":"https://api.github.com/users/endlessm","html_url":"https://github.com/endlessm","followers_url":"https://api.github.com/users/endlessm/followers","following_url":"https://api.github.com/users/endlessm/following{/other_user}","gists_url":"https://api.github.com/users/endlessm/gists{/gist_id}","starred_url":"https://api.github.com/users/endlessm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endlessm/subscriptions","organizations_url":"https://api.github.com/users/endlessm/orgs","repos_url":"https://api.github.com/users/endlessm/repos","events_url":"https://api.github.com/users/endlessm/events{/privacy}","received_events_url":"https://api.github.com/users/endlessm/received_events","type":"Organization","site_admin":false},"repo":{"id":149811239,"node_id":"MDEwOlJlcG9zaXRvcnkxNDk4MTEyMzk=","name":"eos-parental-controls","full_name":"endlessm/eos-parental-controls","private":false,"owner":{"login":"endlessm","id":1930958,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MzA5NTg=","avatar_url":"https://avatars1.githubusercontent.com/u/1930958?v=4","gravatar_id":"","url":"https://api.github.com/users/endlessm","html_url":"https://github.com/endlessm","followers_url":"https://api.github.com/users/endlessm/followers","following_url":"https://api.github.com/users/endlessm/following{/other_user}","gists_url":"https://api.github.com/users/endlessm/gists{/gist_id}","starred_url":"https://api.github.com/users/endlessm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endlessm/subscriptions","organizations_url":"https://api.github.com/users/endlessm/orgs","repos_url":"https://api.github.com/users/endlessm/repos","events_url":"https://api.github.com/users/endlessm/events{/privacy}","received_events_url":"https://api.github.com/users/endlessm/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/endlessm/eos-parental-controls","description":"Storage and enforcement of parental controls for non-administrative users","fork":false,"url":"https://api.github.com/repos/endlessm/eos-parental-controls","forks_url":"https://api.github.com/repos/endlessm/eos-parental-controls/forks","keys_url":"https://api.github.com/repos/endlessm/eos-parental-controls/keys{/key_id}","collaborators_url":"https://api.github.com/repos/endlessm/eos-parental-controls/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/endlessm/eos-parental-controls/teams","hooks_url":"https://api.github.com/repos/endlessm/eos-parental-controls/hooks","issue_events_url":"https://api.github.com/repos/endlessm/eos-parental-controls/issues/events{/number}","events_url":"https://api.github.com/repos/endlessm/eos-parental-controls/events","assignees_url":"https://api.github.com/repos/endlessm/eos-parental-controls/assignees{/user}","branches_url":"https://api.github.com/repos/endlessm/eos-parental-controls/branches{/branch}","tags_url":"https://api.github.com/repos/endlessm/eos-parental-controls/tags","blobs_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/refs{/sha}","trees_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/trees{/sha}","statuses_url":"https://api.github.com/repos/endlessm/eos-parental-controls/statuses/{sha}","languages_url":"https://api.github.com/repos/endlessm/eos-parental-controls/languages","stargazers_url":"https://api.github.com/repos/endlessm/eos-parental-controls/stargazers","contributors_url":"https://api.github.com/repos/endlessm/eos-parental-controls/contributors","subscribers_url":"https://api.github.com/repos/endlessm/eos-parental-controls/subscribers","subscription_url":"https://api.github.com/repos/endlessm/eos-parental-controls/subscription","commits_url":"https://api.github.com/repos/endlessm/eos-parental-controls/commits{/sha}","git_commits_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/commits{/sha}","comments_url":"https://api.github.com/repos/endlessm/eos-parental-controls/comments{/number}","issue_comment_url":"https://api.github.com/repos/endlessm/eos-parental-controls/issues/comments{/number}","contents_url":"https://api.github.com/repos/endlessm/eos-parental-controls/contents/{+path}","compare_url":"https://api.github.com/repos/endlessm/eos-parental-controls/compare/{base}...{head}","merges_url":"https://api.github.com/repos/endlessm/eos-parental-controls/merges","archive_url":"https://api.github.com/repos/endlessm/eos-parental-controls/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/endlessm/eos-parental-controls/downloads","issues_url":"https://api.github.com/repos/endlessm/eos-parental-controls/issues{/number}","pulls_url":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls{/number}","milestones_url":"https://api.github.com/repos/endlessm/eos-parental-controls/milestones{/number}","notifications_url":"https://api.github.com/repos/endlessm/eos-parental-controls/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/endlessm/eos-parental-controls/labels{/name}","releases_url":"https://api.github.com/repos/endlessm/eos-parental-controls/releases{/id}","deployments_url":"https://api.github.com/repos/endlessm/eos-parental-controls/deployments","created_at":"2018-09-21T19:54:19Z","updated_at":"2018-10-12T12:19:29Z","pushed_at":"2018-10-12T12:19:32Z","git_url":"git://github.com/endlessm/eos-parental-controls.git","ssh_url":"git@github.com:endlessm/eos-parental-controls.git","clone_url":"https://github.com/endlessm/eos-parental-controls.git","svn_url":"https://github.com/endlessm/eos-parental-controls","homepage":null,"size":53,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1","node_id":"MDc6TGljZW5zZTEx"},"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"base":{"label":"endlessm:master","ref":"master","sha":"ebb892092f8a1f6f1ceb862b8050189d71b95d08","user":{"login":"endlessm","id":1930958,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MzA5NTg=","avatar_url":"https://avatars1.githubusercontent.com/u/1930958?v=4","gravatar_id":"","url":"https://api.github.com/users/endlessm","html_url":"https://github.com/endlessm","followers_url":"https://api.github.com/users/endlessm/followers","following_url":"https://api.github.com/users/endlessm/following{/other_user}","gists_url":"https://api.github.com/users/endlessm/gists{/gist_id}","starred_url":"https://api.github.com/users/endlessm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endlessm/subscriptions","organizations_url":"https://api.github.com/users/endlessm/orgs","repos_url":"https://api.github.com/users/endlessm/repos","events_url":"https://api.github.com/users/endlessm/events{/privacy}","received_events_url":"https://api.github.com/users/endlessm/received_events","type":"Organization","site_admin":false},"repo":{"id":149811239,"node_id":"MDEwOlJlcG9zaXRvcnkxNDk4MTEyMzk=","name":"eos-parental-controls","full_name":"endlessm/eos-parental-controls","private":false,"owner":{"login":"endlessm","id":1930958,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MzA5NTg=","avatar_url":"https://avatars1.githubusercontent.com/u/1930958?v=4","gravatar_id":"","url":"https://api.github.com/users/endlessm","html_url":"https://github.com/endlessm","followers_url":"https://api.github.com/users/endlessm/followers","following_url":"https://api.github.com/users/endlessm/following{/other_user}","gists_url":"https://api.github.com/users/endlessm/gists{/gist_id}","starred_url":"https://api.github.com/users/endlessm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endlessm/subscriptions","organizations_url":"https://api.github.com/users/endlessm/orgs","repos_url":"https://api.github.com/users/endlessm/repos","events_url":"https://api.github.com/users/endlessm/events{/privacy}","received_events_url":"https://api.github.com/users/endlessm/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/endlessm/eos-parental-controls","description":"Storage and enforcement of parental controls for non-administrative users","fork":false,"url":"https://api.github.com/repos/endlessm/eos-parental-controls","forks_url":"https://api.github.com/repos/endlessm/eos-parental-controls/forks","keys_url":"https://api.github.com/repos/endlessm/eos-parental-controls/keys{/key_id}","collaborators_url":"https://api.github.com/repos/endlessm/eos-parental-controls/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/endlessm/eos-parental-controls/teams","hooks_url":"https://api.github.com/repos/endlessm/eos-parental-controls/hooks","issue_events_url":"https://api.github.com/repos/endlessm/eos-parental-controls/issues/events{/number}","events_url":"https://api.github.com/repos/endlessm/eos-parental-controls/events","assignees_url":"https://api.github.com/repos/endlessm/eos-parental-controls/assignees{/user}","branches_url":"https://api.github.com/repos/endlessm/eos-parental-controls/branches{/branch}","tags_url":"https://api.github.com/repos/endlessm/eos-parental-controls/tags","blobs_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/refs{/sha}","trees_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/trees{/sha}","statuses_url":"https://api.github.com/repos/endlessm/eos-parental-controls/statuses/{sha}","languages_url":"https://api.github.com/repos/endlessm/eos-parental-controls/languages","stargazers_url":"https://api.github.com/repos/endlessm/eos-parental-controls/stargazers","contributors_url":"https://api.github.com/repos/endlessm/eos-parental-controls/contributors","subscribers_url":"https://api.github.com/repos/endlessm/eos-parental-controls/subscribers","subscription_url":"https://api.github.com/repos/endlessm/eos-parental-controls/subscription","commits_url":"https://api.github.com/repos/endlessm/eos-parental-controls/commits{/sha}","git_commits_url":"https://api.github.com/repos/endlessm/eos-parental-controls/git/commits{/sha}","comments_url":"https://api.github.com/repos/endlessm/eos-parental-controls/comments{/number}","issue_comment_url":"https://api.github.com/repos/endlessm/eos-parental-controls/issues/comments{/number}","contents_url":"https://api.github.com/repos/endlessm/eos-parental-controls/contents/{+path}","compare_url":"https://api.github.com/repos/endlessm/eos-parental-controls/compare/{base}...{head}","merges_url":"https://api.github.com/repos/endlessm/eos-parental-controls/merges","archive_url":"https://api.github.com/repos/endlessm/eos-parental-controls/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/endlessm/eos-parental-controls/downloads","issues_url":"https://api.github.com/repos/endlessm/eos-parental-controls/issues{/number}","pulls_url":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls{/number}","milestones_url":"https://api.github.com/repos/endlessm/eos-parental-controls/milestones{/number}","notifications_url":"https://api.github.com/repos/endlessm/eos-parental-controls/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/endlessm/eos-parental-controls/labels{/name}","releases_url":"https://api.github.com/repos/endlessm/eos-parental-controls/releases{/id}","deployments_url":"https://api.github.com/repos/endlessm/eos-parental-controls/deployments","created_at":"2018-09-21T19:54:19Z","updated_at":"2018-10-12T12:19:29Z","pushed_at":"2018-10-12T12:19:32Z","git_url":"git://github.com/endlessm/eos-parental-controls.git","ssh_url":"git@github.com:endlessm/eos-parental-controls.git","clone_url":"https://github.com/endlessm/eos-parental-controls.git","svn_url":"https://github.com/endlessm/eos-parental-controls","homepage":null,"size":53,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1","node_id":"MDc6TGljZW5zZTEx"},"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/6"},"html":{"href":"https://github.com/endlessm/eos-parental-controls/pull/6"},"issue":{"href":"https://api.github.com/repos/endlessm/eos-parental-controls/issues/6"},"comments":{"href":"https://api.github.com/repos/endlessm/eos-parental-controls/issues/6/comments"},"review_comments":{"href":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/6/comments"},"review_comment":{"href":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/endlessm/eos-parental-controls/pulls/6/commits"},"statuses":{"href":"https://api.github.com/repos/endlessm/eos-parental-controls/statuses/02dfdac221f0760fd53a068b55e680d778a5bbd2"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"GeorgesStavracas"}}