Merge branch 'rename' into 'master'

Rename project

See merge request pwithnall/malcontent!1
This commit is contained in:
Philip Withnall 2019-02-27 10:22:19 +00:00
commit e000f2ab6c
33 changed files with 692 additions and 838 deletions

48
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,48 @@
image: debian:unstable
before_script:
- apt update -qq
- apt install -y -qq build-essential meson pkg-config gtk-doc-tools
libxml2-utils gobject-introspection
libgirepository1.0-dev libglib2.0-dev
gettext libdbus-1-dev libpolkit-gobject-1-dev git
policykit-1 lcov
- export LANG=C.UTF-8
stages:
- build
- deploy
cache:
paths:
- _ccache/
debian-unstable:
stage: build
except:
- tags
script:
- git submodule update --init
- meson --buildtype debug --werror -Db_coverage=true -Ddocumentation=true _build .
- meson test -C _build
- ninja -C _build coverage
coverage: '/^\s+lines\.+:\s+([\d.]+\%)\s+/'
artifacts:
when: always
name: "malcontent-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
paths:
- "_build/meson-logs"
# FIXME: Run gtkdoc-check when we can. See:
# https://github.com/mesonbuild/meson/issues/3580
pages:
stage: deploy
only:
- master
script:
- mkdir -p public/
- mv _build/meson-logs/coveragereport/ public/coverage/
artifacts:
paths:
- public

View File

@ -1,8 +1,8 @@
eos-parental-controls malcontent
===================== ==========
eos-parental-controls implements support for restricting the abilities of malcontent implements support for restricting the abilities of
non-administrator accounts on an Endless OS system. Typically, when this is non-administrator accounts on a Linux system. Typically, when this is
used, a non-administrator account will be for a child using the system; and the used, a non-administrator account will be for a child using the system; and the
administrator accounts will be for the parents. administrator accounts will be for the parents.
@ -13,7 +13,7 @@ accessing and applying the app filter.
All the library APIs are currently unstable and are likely to change wildly. All the library APIs are currently unstable and are likely to change wildly.
Dependencies Dependencies
============ ------------
• accounts-service • accounts-service
• dbus-daemon • dbus-daemon
@ -22,17 +22,12 @@ Dependencies
• gobject-2.0 ≥ 2.54 • gobject-2.0 ≥ 2.54
Licensing Licensing
========= ---------
All code in this project is licensed under LGPL-2.1+. See debian/copyright and All code in this project is licensed under LGPL-2.1+. See COPYING for more details.
COPYING for more details.
Bugs Bugs
==== ----
Bug reports and patches should be filed in GitHub. Bug reports and patches should be filed in
[GitLab](https://gitlab.freedesktop.org/pwithnall/malcontent).
Contact
=======
https://github.com/endlessm/eos-parental-controls

5
debian/changelog vendored
View File

@ -1,5 +0,0 @@
eos-parental-controls (0) UNRELEASED; urgency=low
* Initial release (Closes: T23859)
-- Philip Withnall <withnall@endlessm.com> Fri, 05 Oct 2018 23:36:00 +0100

1
debian/compat vendored
View File

@ -1 +0,0 @@
10

94
debian/control vendored
View File

@ -1,94 +0,0 @@
Source: eos-parental-controls
Section: misc
Priority: optional
Maintainer: Philip Withnall <withnall@endlessm.com>
Standards-Version: 4.1.2
Build-Depends:
debhelper (>= 10),
gir1.2-glib-2.0,
gobject-introspection (>= 1.30.0),
gtk-doc-tools,
libaccountsservice-dev,
libdbus-1-dev,
libgirepository1.0-dev (>= 1.30.0),
libglib2.0-dev (>= 2.54.2),
meson,
policykit-1,
python3-gi,
Package: eos-parental-controls-data
Section: misc
Architecture: all
Depends:
accountsservice,
policykit-1,
${misc:Depends},
Description: Parental Controls - architecture independent files
This package contains the architecture-independent data files.
Package: eos-parental-controls-tools
Section: misc
Architecture: any
Multi-arch: same
Depends:
eos-parental-controls-data (= ${source:Version}),
gir1.2-eos-parental-controls-0,
gir1.2-glib-2.0,
python3,
python3-gi,
${misc:Depends},
Description: Parental Controls Tools
This package contains tools for querying and updating the parental controls
settings for users.
Package: gir1.2-eos-parental-controls-0
Section: introspection
Architecture: any
Multi-arch: same
Depends:
${gir:Depends},
${misc:Depends},
Description: Parental Controls Library - introspection bindings
This package contains a library for accessing the parental controls settings
for users.
.
This package contains a machine-readable API description for
libeos-parental-controls for use by the client tools and other clients.
Package: libeos-parental-controls-0
Section: misc
Architecture: any
Depends:
eos-parental-controls-data (= ${source:Version}),
${misc:Depends},
${shlibs:Depends},
Description: Parental Controls Library
This package contains a library for accessing the parental controls settings
for users.
Package: libeos-parental-controls-0-dev
Section: libdevel
Architecture: any
Multi-arch: same
Depends:
libglib2.0-dev,
libeos-parental-controls-0 (= ${binary:Version}),
${misc:Depends},
Description: Parental Controls Library - library development
This package contains a library for accessing the parental controls settings
for users.
.
This package contains development files for clients.
Package: libeos-parental-controls-0-tests
Section: misc
Architecture: any
Depends:
${misc:Depends},
${shlibs:Depends},
Description: Parental Controls Library - tests
This package contains a library for accessing the parental controls settings
for users.
.
This package contains unit tests for the client APIs used to access the
parental controls.

20
debian/copyright vendored
View File

@ -1,20 +0,0 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: eos-parental-controls
Upstream-Contact: Philip Withnall <withnall@endlessm.com>
Source: github.com/endlessm/eos-parental-controls
Disclaimer: Not part of the Debian distribution.
Copyright: Copyright 2018 Endless Mobile, Inc.
License: LGPL-2.1+
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
.
This library is distributed in the hope that 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 library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

1
debian/docs vendored
View File

@ -1 +0,0 @@
README

View File

@ -1,4 +0,0 @@
usr/share/accountsservice/interfaces/com.endlessm.ParentalControls.AppFilter.xml
usr/share/dbus-1/interfaces/com.endlessm.ParentalControls.AppFilter.xml
usr/share/polkit-1/actions/com.endlessm.ParentalControls.policy
usr/share/polkit-1/rules.d/com.endlessm.ParentalControls.rules

View File

@ -1,2 +0,0 @@
usr/bin/eos-parental-controls-client
usr/share/man/man8/eos-parental-controls-client.8*

6
debian/gbp.conf vendored
View File

@ -1,6 +0,0 @@
[DEFAULT]
debian-tag = Version_%(version)s
debian-branch = master
[dch]
ignore-branch = True

View File

@ -1 +0,0 @@
usr/lib/*/girepository-1.0/EosParentalControls-0.*

View File

@ -1,3 +0,0 @@
usr/include/eos-parental-controls-0
usr/lib/*/pkgconfig/eos-parental-controls-0.pc
usr/share/gir-1.0/EosParentalControls-0.gir

View File

@ -1,2 +0,0 @@
usr/lib/*/installed-tests/libeos-parental-controls-0
usr/share/installed-tests/libeos-parental-controls-0

View File

@ -1 +0,0 @@
usr/lib/*/libeos-parental-controls-0.so*

17
debian/rules vendored
View File

@ -1,17 +0,0 @@
#!/usr/bin/make -f
# -*- makefile -*-
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export LC_ALL=C.UTF-8
override_dh_auto_configure:
dh_auto_configure \
-- \
-Dinstalled_tests=true \
$(NULL)
override_dh_missing:
dh_missing --fail-missing
%:
dh $@ --with gir --parallel

View File

@ -1 +0,0 @@
3.0 (native)

View File

@ -1,4 +0,0 @@
Tests: gnome-desktop-testing
Depends:
gnome-desktop-testing,
libeos-parental-controls-0-tests,

View File

@ -1,27 +0,0 @@
#!/bin/sh
# Run the eos-parental-controls installed-tests which do not require root
# privileges.
# Copyright © 2017, 2018 Endless Mobile, Inc.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that 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 library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
set -e
exec 2>&1
exec gnome-desktop-testing-runner \
libeos-parental-controls-0 \
--

View File

@ -1,11 +0,0 @@
# Python program
install_data('eos-parental-controls-client.py',
install_dir: bindir,
install_mode: 'rwxr-xr-x',
rename: ['eos-parental-controls-client'],
)
# Documentation
install_man('docs/eos-parental-controls-client.8')
# TODO subdir('tests')

View File

@ -1,8 +0,0 @@
<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns="http://usefulinc.com/ns/doap#">
<name xml:lang="en">eos-parental-controls</name>
<shortdesc xml:lang="en">eos-parental-controls provides restrictions for children on EOS</shortdesc>
<description xml:lang="en">eos-parental-controls implements support for restricting the abilities of non-administrator accounts on an Endless OS system.</description>
<homepage rdf:resource="https://github.com/endlessm/eos-parental-controls"/>
<license rdf:resource="http://usefulinc.com/doap/licenses/lgpl"/>
<download-page rdf:resource="https://github.com/endlessm/eos-parental-controls"/>
</Project>

View File

@ -1,62 +0,0 @@
libeos_parental_controls_api_version = '0'
libeos_parental_controls_api_name = 'eos-parental-controls-' + libeos_parental_controls_api_version
libeos_parental_controls_sources = [
'app-filter.c',
]
libeos_parental_controls_headers = [
'app-filter.h',
]
libeos_parental_controls_public_deps = [
dependency('gio-2.0', version: '>= 2.44'),
dependency('glib-2.0', version: '>= 2.54.2'),
dependency('gobject-2.0', version: '>= 2.54'),
]
libeos_parental_controls_private_deps = [
dependency('gio-unix-2.0', version: '>= 2.36'),
]
# FIXME: Would be good to use subdir here: https://github.com/mesonbuild/meson/issues/2969
libeos_parental_controls_include_subdir = join_paths(libeos_parental_controls_api_name, 'libeos-parental-controls')
libeos_parental_controls = library(libeos_parental_controls_api_name,
libeos_parental_controls_sources + libeos_parental_controls_headers,
dependencies: libeos_parental_controls_public_deps + libeos_parental_controls_private_deps,
include_directories: root_inc,
install: true,
version: meson.project_version(),
soversion: libeos_parental_controls_api_version,
)
libeos_parental_controls_dep = declare_dependency(
link_with: libeos_parental_controls,
include_directories: root_inc,
)
# Public library bits.
install_headers(libeos_parental_controls_headers,
subdir: libeos_parental_controls_include_subdir,
)
pkgconfig.generate(
libraries: [ libeos_parental_controls ],
subdirs: libeos_parental_controls_api_name,
version: meson.project_version(),
name: 'libeos-parental-controls',
filebase: libeos_parental_controls_api_name,
description: 'Library providing access to parental control settings.',
requires: libeos_parental_controls_public_deps,
requires_private: libeos_parental_controls_private_deps,
)
gnome.generate_gir(libeos_parental_controls,
sources: libeos_parental_controls_sources + libeos_parental_controls_headers,
nsversion: libeos_parental_controls_api_version,
namespace: 'EosParentalControls',
symbol_prefix: 'epc_',
identifier_prefix: 'Epc',
export_packages: 'libeos-parental-controls',
includes: ['GObject-2.0', 'Gio-2.0'],
install: true,
)
subdir('tests')

View File

@ -29,57 +29,57 @@
G_BEGIN_DECLS G_BEGIN_DECLS
/** /**
* EpcAppFilterError: * MctAppFilterError:
* @EPC_APP_FILTER_ERROR_INVALID_USER: Given user ID doesnt exist * @MCT_APP_FILTER_ERROR_INVALID_USER: Given user ID doesnt exist
* @EPC_APP_FILTER_ERROR_PERMISSION_DENIED: Not authorized to query the app * @MCT_APP_FILTER_ERROR_PERMISSION_DENIED: Not authorized to query the app
* filter for the given user * filter for the given user
* @EPC_APP_FILTER_ERROR_INVALID_DATA: The data stored in the app filter for * @MCT_APP_FILTER_ERROR_INVALID_DATA: The data stored in the app filter for
* a user is inconsistent or invalid * a user is inconsistent or invalid
* *
* Errors which can be returned by epc_get_app_filter_async(). * Errors which can be returned by mct_get_app_filter_async().
* *
* Since: 0.1.0 * Since: 0.2.0
*/ */
typedef enum typedef enum
{ {
EPC_APP_FILTER_ERROR_INVALID_USER, MCT_APP_FILTER_ERROR_INVALID_USER,
EPC_APP_FILTER_ERROR_PERMISSION_DENIED, MCT_APP_FILTER_ERROR_PERMISSION_DENIED,
EPC_APP_FILTER_ERROR_INVALID_DATA, MCT_APP_FILTER_ERROR_INVALID_DATA,
} EpcAppFilterError; } MctAppFilterError;
GQuark epc_app_filter_error_quark (void); GQuark mct_app_filter_error_quark (void);
#define EPC_APP_FILTER_ERROR epc_app_filter_error_quark () #define MCT_APP_FILTER_ERROR mct_app_filter_error_quark ()
/** /**
* EpcAppFilterOarsValue: * MctAppFilterOarsValue:
* @EPC_APP_FILTER_OARS_VALUE_UNKNOWN: Unknown value for the given * @MCT_APP_FILTER_OARS_VALUE_UNKNOWN: Unknown value for the given
* section. * section.
* @EPC_APP_FILTER_OARS_VALUE_NONE: No rating for the given section. * @MCT_APP_FILTER_OARS_VALUE_NONE: No rating for the given section.
* @EPC_APP_FILTER_OARS_VALUE_MILD: Mild rating for the given section. * @MCT_APP_FILTER_OARS_VALUE_MILD: Mild rating for the given section.
* @EPC_APP_FILTER_OARS_VALUE_MODERATE: Moderate rating for the given * @MCT_APP_FILTER_OARS_VALUE_MODERATE: Moderate rating for the given
* section. * section.
* @EPC_APP_FILTER_OARS_VALUE_INTENSE: Intense rating for the given * @MCT_APP_FILTER_OARS_VALUE_INTENSE: Intense rating for the given
* section. * section.
* *
* Rating values of the intensity of a given section in an app or game. * Rating values of the intensity of a given section in an app or game.
* These are directly equivalent to the values in the #AsContentRatingValue * These are directly equivalent to the values in the #AsContentRatingValue
* enumeration in libappstream. * enumeration in libappstream.
* *
* Since: 0.1.0 * Since: 0.2.0
*/ */
typedef enum typedef enum
{ {
EPC_APP_FILTER_OARS_VALUE_UNKNOWN, MCT_APP_FILTER_OARS_VALUE_UNKNOWN,
EPC_APP_FILTER_OARS_VALUE_NONE, MCT_APP_FILTER_OARS_VALUE_NONE,
EPC_APP_FILTER_OARS_VALUE_MILD, MCT_APP_FILTER_OARS_VALUE_MILD,
EPC_APP_FILTER_OARS_VALUE_MODERATE, MCT_APP_FILTER_OARS_VALUE_MODERATE,
EPC_APP_FILTER_OARS_VALUE_INTENSE, MCT_APP_FILTER_OARS_VALUE_INTENSE,
} EpcAppFilterOarsValue; } MctAppFilterOarsValue;
/** /**
* EpcAppFilter: * MctAppFilter:
* *
* #EpcAppFilter is an opaque, immutable structure which contains a snapshot of * #MctAppFilter is an opaque, immutable structure which contains a snapshot of
* the app filtering settings for a user at a given time. This includes a list * the app filtering settings for a user at a given time. This includes a list
* of apps which are explicitly banned or allowed to be run by that user. * of apps which are explicitly banned or allowed to be run by that user.
* *
@ -87,72 +87,72 @@ typedef enum
* are read-only for non-administrative users. The precise policy is set using * are read-only for non-administrative users. The precise policy is set using
* polkit. * polkit.
* *
* Since: 0.1.0 * Since: 0.2.0
*/ */
typedef struct _EpcAppFilter EpcAppFilter; typedef struct _MctAppFilter MctAppFilter;
GType epc_app_filter_get_type (void); GType mct_app_filter_get_type (void);
EpcAppFilter *epc_app_filter_ref (EpcAppFilter *filter); MctAppFilter *mct_app_filter_ref (MctAppFilter *filter);
void epc_app_filter_unref (EpcAppFilter *filter); void mct_app_filter_unref (MctAppFilter *filter);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (EpcAppFilter, epc_app_filter_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC (MctAppFilter, mct_app_filter_unref)
uid_t epc_app_filter_get_user_id (EpcAppFilter *filter); uid_t mct_app_filter_get_user_id (MctAppFilter *filter);
gboolean epc_app_filter_is_path_allowed (EpcAppFilter *filter, gboolean mct_app_filter_is_path_allowed (MctAppFilter *filter,
const gchar *path); const gchar *path);
gboolean epc_app_filter_is_flatpak_ref_allowed (EpcAppFilter *filter, gboolean mct_app_filter_is_flatpak_ref_allowed (MctAppFilter *filter,
const gchar *app_ref); const gchar *app_ref);
gboolean epc_app_filter_is_flatpak_app_allowed (EpcAppFilter *filter, gboolean mct_app_filter_is_flatpak_app_allowed (MctAppFilter *filter,
const gchar *app_id); const gchar *app_id);
gboolean epc_app_filter_is_appinfo_allowed (EpcAppFilter *filter, gboolean mct_app_filter_is_appinfo_allowed (MctAppFilter *filter,
GAppInfo *app_info); GAppInfo *app_info);
const gchar **epc_app_filter_get_oars_sections (EpcAppFilter *filter); const gchar **mct_app_filter_get_oars_sections (MctAppFilter *filter);
EpcAppFilterOarsValue epc_app_filter_get_oars_value (EpcAppFilter *filter, MctAppFilterOarsValue mct_app_filter_get_oars_value (MctAppFilter *filter,
const gchar *oars_section); const gchar *oars_section);
gboolean epc_app_filter_is_user_installation_allowed (EpcAppFilter *filter); gboolean mct_app_filter_is_user_installation_allowed (MctAppFilter *filter);
gboolean epc_app_filter_is_system_installation_allowed (EpcAppFilter *filter); gboolean mct_app_filter_is_system_installation_allowed (MctAppFilter *filter);
EpcAppFilter *epc_get_app_filter (GDBusConnection *connection, MctAppFilter *mct_get_app_filter (GDBusConnection *connection,
uid_t user_id, uid_t user_id,
gboolean allow_interactive_authorization, gboolean allow_interactive_authorization,
GCancellable *cancellable, GCancellable *cancellable,
GError **error); GError **error);
void epc_get_app_filter_async (GDBusConnection *connection, void mct_get_app_filter_async (GDBusConnection *connection,
uid_t user_id, uid_t user_id,
gboolean allow_interactive_authorization, gboolean allow_interactive_authorization,
GCancellable *cancellable, GCancellable *cancellable,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data); gpointer user_data);
EpcAppFilter *epc_get_app_filter_finish (GAsyncResult *result, MctAppFilter *mct_get_app_filter_finish (GAsyncResult *result,
GError **error); GError **error);
gboolean epc_set_app_filter (GDBusConnection *connection, gboolean mct_set_app_filter (GDBusConnection *connection,
uid_t user_id, uid_t user_id,
EpcAppFilter *app_filter, MctAppFilter *app_filter,
gboolean allow_interactive_authorization, gboolean allow_interactive_authorization,
GCancellable *cancellable, GCancellable *cancellable,
GError **error); GError **error);
void epc_set_app_filter_async (GDBusConnection *connection, void mct_set_app_filter_async (GDBusConnection *connection,
uid_t user_id, uid_t user_id,
EpcAppFilter *app_filter, MctAppFilter *app_filter,
gboolean allow_interactive_authorization, gboolean allow_interactive_authorization,
GCancellable *cancellable, GCancellable *cancellable,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data); gpointer user_data);
gboolean epc_set_app_filter_finish (GAsyncResult *result, gboolean mct_set_app_filter_finish (GAsyncResult *result,
GError **error); GError **error);
/** /**
* EpcAppFilterBuilder: * MctAppFilterBuilder:
* *
* #EpcAppFilterBuilder is a stack-allocated mutable structure used to build an * #MctAppFilterBuilder is a stack-allocated mutable structure used to build an
* #EpcAppFilter instance. Use epc_app_filter_builder_init(), various method * #MctAppFilter instance. Use mct_app_filter_builder_init(), various method
* calls to set properties of the app filter, and then * calls to set properties of the app filter, and then
* epc_app_filter_builder_end(), to construct an #EpcAppFilter. * mct_app_filter_builder_end(), to construct an #MctAppFilter.
* *
* Since: 0.1.0 * Since: 0.2.0
*/ */
typedef struct typedef struct
{ {
@ -163,24 +163,24 @@ typedef struct
gboolean b1; gboolean b1;
gpointer p2; gpointer p2;
gpointer p3; gpointer p3;
} EpcAppFilterBuilder; } MctAppFilterBuilder;
GType epc_app_filter_builder_get_type (void); GType mct_app_filter_builder_get_type (void);
/** /**
* EPC_APP_FILTER_BUILDER_INIT: * MCT_APP_FILTER_BUILDER_INIT:
* *
* Initialise a stack-allocated #EpcAppFilterBuilder instance at declaration * Initialise a stack-allocated #MctAppFilterBuilder instance at declaration
* time. * time.
* *
* This is typically used with g_auto(): * This is typically used with g_auto():
* |[ * |[
* g_auto(EpcAppFilterBuilder) builder = EPC_APP_FILTER_BUILDER_INIT (); * g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT ();
* ]| * ]|
* *
* Since: 0.1.0 * Since: 0.2.0
*/ */
#define EPC_APP_FILTER_BUILDER_INIT() \ #define MCT_APP_FILTER_BUILDER_INIT() \
{ \ { \
g_ptr_array_new_with_free_func (g_free), \ g_ptr_array_new_with_free_func (g_free), \
g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL), \ g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL), \
@ -188,31 +188,31 @@ GType epc_app_filter_builder_get_type (void);
FALSE, \ FALSE, \
} }
void epc_app_filter_builder_init (EpcAppFilterBuilder *builder); void mct_app_filter_builder_init (MctAppFilterBuilder *builder);
void epc_app_filter_builder_clear (EpcAppFilterBuilder *builder); void mct_app_filter_builder_clear (MctAppFilterBuilder *builder);
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC (EpcAppFilterBuilder, G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC (MctAppFilterBuilder,
epc_app_filter_builder_clear) mct_app_filter_builder_clear)
EpcAppFilterBuilder *epc_app_filter_builder_new (void); MctAppFilterBuilder *mct_app_filter_builder_new (void);
EpcAppFilterBuilder *epc_app_filter_builder_copy (EpcAppFilterBuilder *builder); MctAppFilterBuilder *mct_app_filter_builder_copy (MctAppFilterBuilder *builder);
void epc_app_filter_builder_free (EpcAppFilterBuilder *builder); void mct_app_filter_builder_free (MctAppFilterBuilder *builder);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (EpcAppFilterBuilder, epc_app_filter_builder_free) G_DEFINE_AUTOPTR_CLEANUP_FUNC (MctAppFilterBuilder, mct_app_filter_builder_free)
EpcAppFilter *epc_app_filter_builder_end (EpcAppFilterBuilder *builder); MctAppFilter *mct_app_filter_builder_end (MctAppFilterBuilder *builder);
void epc_app_filter_builder_blacklist_path (EpcAppFilterBuilder *builder, void mct_app_filter_builder_blacklist_path (MctAppFilterBuilder *builder,
const gchar *path); const gchar *path);
void epc_app_filter_builder_blacklist_flatpak_ref (EpcAppFilterBuilder *builder, void mct_app_filter_builder_blacklist_flatpak_ref (MctAppFilterBuilder *builder,
const gchar *app_ref); const gchar *app_ref);
void epc_app_filter_builder_set_oars_value (EpcAppFilterBuilder *builder, void mct_app_filter_builder_set_oars_value (MctAppFilterBuilder *builder,
const gchar *oars_section, const gchar *oars_section,
EpcAppFilterOarsValue value); MctAppFilterOarsValue value);
void epc_app_filter_builder_set_allow_user_installation (EpcAppFilterBuilder *builder, void mct_app_filter_builder_set_allow_user_installation (MctAppFilterBuilder *builder,
gboolean allow_user_installation); gboolean allow_user_installation);
void epc_app_filter_builder_set_allow_system_installation (EpcAppFilterBuilder *builder, void mct_app_filter_builder_set_allow_system_installation (MctAppFilterBuilder *builder,
gboolean allow_system_installation); gboolean allow_system_installation);
G_END_DECLS G_END_DECLS

62
libmalcontent/meson.build Normal file
View File

@ -0,0 +1,62 @@
libmalcontent_api_version = '0'
libmalcontent_api_name = 'malcontent-' + libmalcontent_api_version
libmalcontent_sources = [
'app-filter.c',
]
libmalcontent_headers = [
'app-filter.h',
]
libmalcontent_public_deps = [
dependency('gio-2.0', version: '>= 2.44'),
dependency('glib-2.0', version: '>= 2.54.2'),
dependency('gobject-2.0', version: '>= 2.54'),
]
libmalcontent_private_deps = [
dependency('gio-unix-2.0', version: '>= 2.36'),
]
# FIXME: Would be good to use subdir here: https://github.com/mesonbuild/meson/issues/2969
libmalcontent_include_subdir = join_paths(libmalcontent_api_name, 'libmalcontent')
libmalcontent = library(libmalcontent_api_name,
libmalcontent_sources + libmalcontent_headers,
dependencies: libmalcontent_public_deps + libmalcontent_private_deps,
include_directories: root_inc,
install: true,
version: meson.project_version(),
soversion: libmalcontent_api_version,
)
libmalcontent_dep = declare_dependency(
link_with: libmalcontent,
include_directories: root_inc,
)
# Public library bits.
install_headers(libmalcontent_headers,
subdir: libmalcontent_include_subdir,
)
pkgconfig.generate(
libraries: [ libmalcontent ],
subdirs: libmalcontent_api_name,
version: meson.project_version(),
name: 'libmalcontent',
filebase: libmalcontent_api_name,
description: 'Library providing access to parental control settings.',
requires: libmalcontent_public_deps,
requires_private: libmalcontent_private_deps,
)
gnome.generate_gir(libmalcontent,
sources: libmalcontent_sources + libmalcontent_headers,
nsversion: libmalcontent_api_version,
namespace: 'Malcontent',
symbol_prefix: 'mct_',
identifier_prefix: 'Mct',
export_packages: 'libmalcontent',
includes: ['GObject-2.0', 'Gio-2.0'],
install: true,
)
subdir('tests')

View File

@ -25,7 +25,7 @@
#include <glib.h> #include <glib.h>
#include <gio/gdesktopappinfo.h> #include <gio/gdesktopappinfo.h>
#include <gio/gio.h> #include <gio/gio.h>
#include <libeos-parental-controls/app-filter.h> #include <libmalcontent/app-filter.h>
#include <libglib-testing/dbus-queue.h> #include <libglib-testing/dbus-queue.h>
#include <locale.h> #include <locale.h>
#include <string.h> #include <string.h>
@ -71,53 +71,53 @@ assert_strv_equal (const gchar * const *strv_a,
static void static void
test_app_filter_error_quark (void) test_app_filter_error_quark (void)
{ {
g_assert_cmpint (epc_app_filter_error_quark (), !=, 0); g_assert_cmpint (mct_app_filter_error_quark (), !=, 0);
} }
/* Test that the #GType definitions for various types work. */ /* Test that the #GType definitions for various types work. */
static void static void
test_app_filter_types (void) test_app_filter_types (void)
{ {
g_type_ensure (epc_app_filter_get_type ()); g_type_ensure (mct_app_filter_get_type ());
g_type_ensure (epc_app_filter_builder_get_type ()); g_type_ensure (mct_app_filter_builder_get_type ());
} }
/* Test that ref() and unref() work on an #EpcAppFilter. */ /* Test that ref() and unref() work on an #MctAppFilter. */
static void static void
test_app_filter_refs (void) test_app_filter_refs (void)
{ {
g_auto(EpcAppFilterBuilder) builder = EPC_APP_FILTER_BUILDER_INIT (); g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT ();
g_autoptr(EpcAppFilter) filter = NULL; g_autoptr(MctAppFilter) filter = NULL;
/* Use an empty #EpcAppFilter. */ /* Use an empty #MctAppFilter. */
filter = epc_app_filter_builder_end (&builder); filter = mct_app_filter_builder_end (&builder);
g_assert_nonnull (filter); g_assert_nonnull (filter);
/* Call is_path_allowed() to check that the filter hasnt been finalised. */ /* Call is_path_allowed() to check that the filter hasnt been finalised. */
g_assert_true (epc_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false"));
epc_app_filter_ref (filter); mct_app_filter_ref (filter);
g_assert_true (epc_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false"));
epc_app_filter_unref (filter); mct_app_filter_unref (filter);
g_assert_true (epc_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false"));
/* Final ref is dropped by g_autoptr(). */ /* Final ref is dropped by g_autoptr(). */
} }
/* Fixture for tests which use an #EpcAppFilterBuilder. The builder can either /* Fixture for tests which use an #MctAppFilterBuilder. The builder can either
* be heap- or stack-allocated. @builder will always be a valid pointer to it. * be heap- or stack-allocated. @builder will always be a valid pointer to it.
*/ */
typedef struct typedef struct
{ {
EpcAppFilterBuilder *builder; MctAppFilterBuilder *builder;
EpcAppFilterBuilder stack_builder; MctAppFilterBuilder stack_builder;
} BuilderFixture; } BuilderFixture;
static void static void
builder_set_up_stack (BuilderFixture *fixture, builder_set_up_stack (BuilderFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
epc_app_filter_builder_init (&fixture->stack_builder); mct_app_filter_builder_init (&fixture->stack_builder);
fixture->builder = &fixture->stack_builder; fixture->builder = &fixture->stack_builder;
} }
@ -125,7 +125,7 @@ static void
builder_tear_down_stack (BuilderFixture *fixture, builder_tear_down_stack (BuilderFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
epc_app_filter_builder_clear (&fixture->stack_builder); mct_app_filter_builder_clear (&fixture->stack_builder);
fixture->builder = NULL; fixture->builder = NULL;
} }
@ -133,7 +133,7 @@ static void
builder_set_up_stack2 (BuilderFixture *fixture, builder_set_up_stack2 (BuilderFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
EpcAppFilterBuilder local_builder = EPC_APP_FILTER_BUILDER_INIT (); MctAppFilterBuilder local_builder = MCT_APP_FILTER_BUILDER_INIT ();
memcpy (&fixture->stack_builder, &local_builder, sizeof (local_builder)); memcpy (&fixture->stack_builder, &local_builder, sizeof (local_builder));
fixture->builder = &fixture->stack_builder; fixture->builder = &fixture->stack_builder;
} }
@ -142,7 +142,7 @@ static void
builder_tear_down_stack2 (BuilderFixture *fixture, builder_tear_down_stack2 (BuilderFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
epc_app_filter_builder_clear (&fixture->stack_builder); mct_app_filter_builder_clear (&fixture->stack_builder);
fixture->builder = NULL; fixture->builder = NULL;
} }
@ -150,152 +150,152 @@ static void
builder_set_up_heap (BuilderFixture *fixture, builder_set_up_heap (BuilderFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
fixture->builder = epc_app_filter_builder_new (); fixture->builder = mct_app_filter_builder_new ();
} }
static void static void
builder_tear_down_heap (BuilderFixture *fixture, builder_tear_down_heap (BuilderFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
g_clear_pointer (&fixture->builder, epc_app_filter_builder_free); g_clear_pointer (&fixture->builder, mct_app_filter_builder_free);
} }
/* Test building a non-empty #EpcAppFilter using an #EpcAppFilterBuilder. */ /* Test building a non-empty #MctAppFilter using an #MctAppFilterBuilder. */
static void static void
test_app_filter_builder_non_empty (BuilderFixture *fixture, test_app_filter_builder_non_empty (BuilderFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
g_autoptr(EpcAppFilter) filter = NULL; g_autoptr(MctAppFilter) filter = NULL;
g_autofree const gchar **sections = NULL; g_autofree const gchar **sections = NULL;
epc_app_filter_builder_blacklist_path (fixture->builder, "/bin/true"); mct_app_filter_builder_blacklist_path (fixture->builder, "/bin/true");
epc_app_filter_builder_blacklist_path (fixture->builder, "/usr/bin/gnome-software"); mct_app_filter_builder_blacklist_path (fixture->builder, "/usr/bin/gnome-software");
epc_app_filter_builder_blacklist_flatpak_ref (fixture->builder, mct_app_filter_builder_blacklist_flatpak_ref (fixture->builder,
"app/org.doom.Doom/x86_64/master"); "app/org.doom.Doom/x86_64/master");
epc_app_filter_builder_set_oars_value (fixture->builder, "drugs-alcohol", mct_app_filter_builder_set_oars_value (fixture->builder, "drugs-alcohol",
EPC_APP_FILTER_OARS_VALUE_MILD); MCT_APP_FILTER_OARS_VALUE_MILD);
epc_app_filter_builder_set_oars_value (fixture->builder, "language-humor", mct_app_filter_builder_set_oars_value (fixture->builder, "language-humor",
EPC_APP_FILTER_OARS_VALUE_MODERATE); MCT_APP_FILTER_OARS_VALUE_MODERATE);
epc_app_filter_builder_set_allow_user_installation (fixture->builder, TRUE); mct_app_filter_builder_set_allow_user_installation (fixture->builder, TRUE);
epc_app_filter_builder_set_allow_system_installation (fixture->builder, FALSE); mct_app_filter_builder_set_allow_system_installation (fixture->builder, FALSE);
filter = epc_app_filter_builder_end (fixture->builder); filter = mct_app_filter_builder_end (fixture->builder);
g_assert_true (epc_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false"));
g_assert_false (epc_app_filter_is_path_allowed (filter, g_assert_false (mct_app_filter_is_path_allowed (filter,
"/usr/bin/gnome-software")); "/usr/bin/gnome-software"));
g_assert_true (epc_app_filter_is_flatpak_ref_allowed (filter, g_assert_true (mct_app_filter_is_flatpak_ref_allowed (filter,
"app/org.gnome.Ponies/x86_64/master")); "app/org.gnome.Ponies/x86_64/master"));
g_assert_true (epc_app_filter_is_flatpak_app_allowed (filter, "org.gnome.Ponies")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (filter, "org.gnome.Ponies"));
g_assert_false (epc_app_filter_is_flatpak_ref_allowed (filter, g_assert_false (mct_app_filter_is_flatpak_ref_allowed (filter,
"app/org.doom.Doom/x86_64/master")); "app/org.doom.Doom/x86_64/master"));
g_assert_false (epc_app_filter_is_flatpak_app_allowed (filter, "org.doom.Doom")); g_assert_false (mct_app_filter_is_flatpak_app_allowed (filter, "org.doom.Doom"));
g_assert_cmpint (epc_app_filter_get_oars_value (filter, "drugs-alcohol"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (filter, "drugs-alcohol"), ==,
EPC_APP_FILTER_OARS_VALUE_MILD); MCT_APP_FILTER_OARS_VALUE_MILD);
g_assert_cmpint (epc_app_filter_get_oars_value (filter, "language-humor"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (filter, "language-humor"), ==,
EPC_APP_FILTER_OARS_VALUE_MODERATE); MCT_APP_FILTER_OARS_VALUE_MODERATE);
g_assert_cmpint (epc_app_filter_get_oars_value (filter, "something-else"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (filter, "something-else"), ==,
EPC_APP_FILTER_OARS_VALUE_UNKNOWN); MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
sections = epc_app_filter_get_oars_sections (filter); sections = mct_app_filter_get_oars_sections (filter);
const gchar * const expected_sections[] = { "drugs-alcohol", "language-humor", NULL }; const gchar * const expected_sections[] = { "drugs-alcohol", "language-humor", NULL };
assert_strv_equal ((const gchar * const *) sections, expected_sections); assert_strv_equal ((const gchar * const *) sections, expected_sections);
g_assert_true (epc_app_filter_is_user_installation_allowed (filter)); g_assert_true (mct_app_filter_is_user_installation_allowed (filter));
g_assert_false (epc_app_filter_is_system_installation_allowed (filter)); g_assert_false (mct_app_filter_is_system_installation_allowed (filter));
} }
/* Test building an empty #EpcAppFilter using an #EpcAppFilterBuilder. */ /* Test building an empty #MctAppFilter using an #MctAppFilterBuilder. */
static void static void
test_app_filter_builder_empty (BuilderFixture *fixture, test_app_filter_builder_empty (BuilderFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
g_autoptr(EpcAppFilter) filter = NULL; g_autoptr(MctAppFilter) filter = NULL;
g_autofree const gchar **sections = NULL; g_autofree const gchar **sections = NULL;
filter = epc_app_filter_builder_end (fixture->builder); filter = mct_app_filter_builder_end (fixture->builder);
g_assert_true (epc_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false"));
g_assert_true (epc_app_filter_is_path_allowed (filter, g_assert_true (mct_app_filter_is_path_allowed (filter,
"/usr/bin/gnome-software")); "/usr/bin/gnome-software"));
g_assert_true (epc_app_filter_is_flatpak_ref_allowed (filter, g_assert_true (mct_app_filter_is_flatpak_ref_allowed (filter,
"app/org.gnome.Ponies/x86_64/master")); "app/org.gnome.Ponies/x86_64/master"));
g_assert_true (epc_app_filter_is_flatpak_app_allowed (filter, "org.gnome.Ponies")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (filter, "org.gnome.Ponies"));
g_assert_true (epc_app_filter_is_flatpak_ref_allowed (filter, g_assert_true (mct_app_filter_is_flatpak_ref_allowed (filter,
"app/org.doom.Doom/x86_64/master")); "app/org.doom.Doom/x86_64/master"));
g_assert_true (epc_app_filter_is_flatpak_app_allowed (filter, "org.doom.Doom")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (filter, "org.doom.Doom"));
g_assert_cmpint (epc_app_filter_get_oars_value (filter, "drugs-alcohol"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (filter, "drugs-alcohol"), ==,
EPC_APP_FILTER_OARS_VALUE_UNKNOWN); MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
g_assert_cmpint (epc_app_filter_get_oars_value (filter, "language-humor"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (filter, "language-humor"), ==,
EPC_APP_FILTER_OARS_VALUE_UNKNOWN); MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
g_assert_cmpint (epc_app_filter_get_oars_value (filter, "something-else"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (filter, "something-else"), ==,
EPC_APP_FILTER_OARS_VALUE_UNKNOWN); MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
sections = epc_app_filter_get_oars_sections (filter); sections = mct_app_filter_get_oars_sections (filter);
const gchar * const expected_sections[] = { NULL }; const gchar * const expected_sections[] = { NULL };
assert_strv_equal ((const gchar * const *) sections, expected_sections); assert_strv_equal ((const gchar * const *) sections, expected_sections);
g_assert_true (epc_app_filter_is_user_installation_allowed (filter)); g_assert_true (mct_app_filter_is_user_installation_allowed (filter));
g_assert_false (epc_app_filter_is_system_installation_allowed (filter)); g_assert_false (mct_app_filter_is_system_installation_allowed (filter));
} }
/* Check that copying a cleared #EpcAppFilterBuilder works, and the copy can /* Check that copying a cleared #MctAppFilterBuilder works, and the copy can
* then be initialised and used to build a filter. */ * then be initialised and used to build a filter. */
static void static void
test_app_filter_builder_copy_empty (void) test_app_filter_builder_copy_empty (void)
{ {
g_autoptr(EpcAppFilterBuilder) builder = epc_app_filter_builder_new (); g_autoptr(MctAppFilterBuilder) builder = mct_app_filter_builder_new ();
g_autoptr(EpcAppFilterBuilder) builder_copy = NULL; g_autoptr(MctAppFilterBuilder) builder_copy = NULL;
g_autoptr(EpcAppFilter) filter = NULL; g_autoptr(MctAppFilter) filter = NULL;
epc_app_filter_builder_clear (builder); mct_app_filter_builder_clear (builder);
builder_copy = epc_app_filter_builder_copy (builder); builder_copy = mct_app_filter_builder_copy (builder);
epc_app_filter_builder_init (builder_copy); mct_app_filter_builder_init (builder_copy);
epc_app_filter_builder_blacklist_path (builder_copy, "/bin/true"); mct_app_filter_builder_blacklist_path (builder_copy, "/bin/true");
filter = epc_app_filter_builder_end (builder_copy); filter = mct_app_filter_builder_end (builder_copy);
g_assert_true (epc_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false"));
g_assert_false (epc_app_filter_is_path_allowed (filter, "/bin/true")); g_assert_false (mct_app_filter_is_path_allowed (filter, "/bin/true"));
g_assert_true (epc_app_filter_is_user_installation_allowed (filter)); g_assert_true (mct_app_filter_is_user_installation_allowed (filter));
g_assert_false (epc_app_filter_is_system_installation_allowed (filter)); g_assert_false (mct_app_filter_is_system_installation_allowed (filter));
} }
/* Check that copying a filled #EpcAppFilterBuilder works, and the copy can be /* Check that copying a filled #MctAppFilterBuilder works, and the copy can be
* used to build a filter. */ * used to build a filter. */
static void static void
test_app_filter_builder_copy_full (void) test_app_filter_builder_copy_full (void)
{ {
g_autoptr(EpcAppFilterBuilder) builder = epc_app_filter_builder_new (); g_autoptr(MctAppFilterBuilder) builder = mct_app_filter_builder_new ();
g_autoptr(EpcAppFilterBuilder) builder_copy = NULL; g_autoptr(MctAppFilterBuilder) builder_copy = NULL;
g_autoptr(EpcAppFilter) filter = NULL; g_autoptr(MctAppFilter) filter = NULL;
epc_app_filter_builder_blacklist_path (builder, "/bin/true"); mct_app_filter_builder_blacklist_path (builder, "/bin/true");
epc_app_filter_builder_set_allow_user_installation (builder, FALSE); mct_app_filter_builder_set_allow_user_installation (builder, FALSE);
epc_app_filter_builder_set_allow_system_installation (builder, TRUE); mct_app_filter_builder_set_allow_system_installation (builder, TRUE);
builder_copy = epc_app_filter_builder_copy (builder); builder_copy = mct_app_filter_builder_copy (builder);
filter = epc_app_filter_builder_end (builder_copy); filter = mct_app_filter_builder_end (builder_copy);
g_assert_true (epc_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false"));
g_assert_false (epc_app_filter_is_path_allowed (filter, "/bin/true")); g_assert_false (mct_app_filter_is_path_allowed (filter, "/bin/true"));
g_assert_false (epc_app_filter_is_user_installation_allowed (filter)); g_assert_false (mct_app_filter_is_user_installation_allowed (filter));
g_assert_true (epc_app_filter_is_system_installation_allowed (filter)); g_assert_true (mct_app_filter_is_system_installation_allowed (filter));
} }
/* Check that various configurations of a #GAppInfo are accepted or rejected /* Check that various configurations of a #GAppInfo are accepted or rejected
* as appropriate by epc_app_filter_is_appinfo_allowed(). */ * as appropriate by mct_app_filter_is_appinfo_allowed(). */
static void static void
test_app_filter_appinfo (void) test_app_filter_appinfo (void)
{ {
g_auto(EpcAppFilterBuilder) builder = EPC_APP_FILTER_BUILDER_INIT (); g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT ();
g_autoptr(EpcAppFilter) filter = NULL; g_autoptr(MctAppFilter) filter = NULL;
const struct const struct
{ {
gboolean expected_allowed; gboolean expected_allowed;
@ -379,10 +379,10 @@ test_app_filter_appinfo (void)
"X-Flatpak-RenamedFrom=org.gnome.Nasty.desktop;\n" }, "X-Flatpak-RenamedFrom=org.gnome.Nasty.desktop;\n" },
}; };
epc_app_filter_builder_blacklist_path (&builder, "/bin/false"); mct_app_filter_builder_blacklist_path (&builder, "/bin/false");
epc_app_filter_builder_blacklist_flatpak_ref (&builder, "app/org.gnome.Nasty/x86_64/stable"); mct_app_filter_builder_blacklist_flatpak_ref (&builder, "app/org.gnome.Nasty/x86_64/stable");
filter = epc_app_filter_builder_end (&builder); filter = mct_app_filter_builder_end (&builder);
for (gsize i = 0; i < G_N_ELEMENTS (vectors); i++) for (gsize i = 0; i < G_N_ELEMENTS (vectors); i++)
{ {
@ -402,9 +402,9 @@ test_app_filter_appinfo (void)
g_assert_nonnull (appinfo); g_assert_nonnull (appinfo);
if (vectors[i].expected_allowed) if (vectors[i].expected_allowed)
g_assert_true (epc_app_filter_is_appinfo_allowed (filter, appinfo)); g_assert_true (mct_app_filter_is_appinfo_allowed (filter, appinfo));
else else
g_assert_false (epc_app_filter_is_appinfo_allowed (filter, appinfo)); g_assert_false (mct_app_filter_is_appinfo_allowed (filter, appinfo));
} }
} }
@ -477,7 +477,7 @@ async_result_cb (GObject *obj,
/* Generic mock accountsservice implementation which returns the properties /* Generic mock accountsservice implementation which returns the properties
* given in #GetAppFilterData.properties if queried for a UID matching * given in #GetAppFilterData.properties if queried for a UID matching
* #GetAppFilterData.expected_uid. Intended to be used for writing successful * #GetAppFilterData.expected_uid. Intended to be used for writing successful
* epc_get_app_filter() tests returning a variety of values. */ * mct_get_app_filter() tests returning a variety of values. */
typedef struct typedef struct
{ {
uid_t expected_uid; uid_t expected_uid;
@ -522,7 +522,7 @@ get_app_filter_server_cb (GtDBusQueue *queue,
g_variant_new_tuple (&properties_variant, 1)); g_variant_new_tuple (&properties_variant, 1));
} }
/* Test that getting an #EpcAppFilter from the mock D-Bus service works. The /* Test that getting an #MctAppFilter from the mock D-Bus service works. The
* @test_data is a boolean value indicating whether to do the call * @test_data is a boolean value indicating whether to do the call
* synchronously (%FALSE) or asynchronously (%TRUE). * synchronously (%FALSE) or asynchronously (%TRUE).
* *
@ -532,7 +532,7 @@ static void
test_app_filter_bus_get (BusFixture *fixture, test_app_filter_bus_get (BusFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
gboolean test_async = GPOINTER_TO_UINT (test_data); gboolean test_async = GPOINTER_TO_UINT (test_data);
const GetAppFilterData get_app_filter_data = const GetAppFilterData get_app_filter_data =
@ -553,17 +553,17 @@ test_app_filter_bus_get (BusFixture *fixture,
{ {
g_autoptr(GAsyncResult) result = NULL; g_autoptr(GAsyncResult) result = NULL;
epc_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue), mct_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, fixture->valid_uid,
FALSE, NULL, async_result_cb, &result); FALSE, NULL, async_result_cb, &result);
while (result == NULL) while (result == NULL)
g_main_context_iteration (NULL, TRUE); g_main_context_iteration (NULL, TRUE);
app_filter = epc_get_app_filter_finish (result, &local_error); app_filter = mct_get_app_filter_finish (result, &local_error);
} }
else else
{ {
app_filter = epc_get_app_filter (gt_dbus_queue_get_client_connection (fixture->queue), app_filter = mct_get_app_filter (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, fixture->valid_uid,
FALSE, NULL, &local_error); FALSE, NULL, &local_error);
} }
@ -572,13 +572,13 @@ test_app_filter_bus_get (BusFixture *fixture,
g_assert_nonnull (app_filter); g_assert_nonnull (app_filter);
/* Check the app filter properties. */ /* Check the app filter properties. */
g_assert_cmpuint (epc_app_filter_get_user_id (app_filter), ==, fixture->valid_uid); g_assert_cmpuint (mct_app_filter_get_user_id (app_filter), ==, fixture->valid_uid);
g_assert_false (epc_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Builder")); g_assert_false (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Builder"));
g_assert_true (epc_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Chess")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Chess"));
} }
/* Test that getting an #EpcAppFilter containing a whitelist from the mock D-Bus /* Test that getting an #MctAppFilter containing a whitelist from the mock D-Bus
* service works, and that the #EpcAppFilter methods handle the whitelist * service works, and that the #MctAppFilter methods handle the whitelist
* correctly. * correctly.
* *
* The mock D-Bus replies are generated in get_app_filter_server_cb(). */ * The mock D-Bus replies are generated in get_app_filter_server_cb(). */
@ -586,7 +586,7 @@ static void
test_app_filter_bus_get_whitelist (BusFixture *fixture, test_app_filter_bus_get_whitelist (BusFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
const GetAppFilterData get_app_filter_data = const GetAppFilterData get_app_filter_data =
{ {
@ -606,7 +606,7 @@ test_app_filter_bus_get_whitelist (BusFixture *fixture,
gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb, gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb,
(gpointer) &get_app_filter_data); (gpointer) &get_app_filter_data);
app_filter = epc_get_app_filter (gt_dbus_queue_get_client_connection (fixture->queue), app_filter = mct_get_app_filter (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, fixture->valid_uid,
FALSE, NULL, &local_error); FALSE, NULL, &local_error);
@ -615,18 +615,18 @@ test_app_filter_bus_get_whitelist (BusFixture *fixture,
/* Check the app filter properties. The returned filter is a whitelist, /* Check the app filter properties. The returned filter is a whitelist,
* whereas typically a blacklist is returned. */ * whereas typically a blacklist is returned. */
g_assert_cmpuint (epc_app_filter_get_user_id (app_filter), ==, fixture->valid_uid); g_assert_cmpuint (mct_app_filter_get_user_id (app_filter), ==, fixture->valid_uid);
g_assert_false (epc_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Builder")); g_assert_false (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Builder"));
g_assert_true (epc_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Whitelisted1")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Whitelisted1"));
g_assert_true (epc_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Whitelisted2")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Whitelisted2"));
g_assert_true (epc_app_filter_is_flatpak_ref_allowed (app_filter, "app/org.gnome.Whitelisted1/x86_64/stable")); g_assert_true (mct_app_filter_is_flatpak_ref_allowed (app_filter, "app/org.gnome.Whitelisted1/x86_64/stable"));
g_assert_false (epc_app_filter_is_flatpak_ref_allowed (app_filter, "app/org.gnome.Whitelisted1/x86_64/unknown")); g_assert_false (mct_app_filter_is_flatpak_ref_allowed (app_filter, "app/org.gnome.Whitelisted1/x86_64/unknown"));
g_assert_true (epc_app_filter_is_path_allowed (app_filter, "/usr/bin/true")); g_assert_true (mct_app_filter_is_path_allowed (app_filter, "/usr/bin/true"));
g_assert_false (epc_app_filter_is_path_allowed (app_filter, "/usr/bin/false")); g_assert_false (mct_app_filter_is_path_allowed (app_filter, "/usr/bin/false"));
} }
/* Test that getting an #EpcAppFilter containing all possible OARS values from /* Test that getting an #MctAppFilter containing all possible OARS values from
* the mock D-Bus service works, and that the #EpcAppFilter methods handle them * the mock D-Bus service works, and that the #MctAppFilter methods handle them
* correctly. * correctly.
* *
* The mock D-Bus replies are generated in get_app_filter_server_cb(). */ * The mock D-Bus replies are generated in get_app_filter_server_cb(). */
@ -634,7 +634,7 @@ static void
test_app_filter_bus_get_all_oars_values (BusFixture *fixture, test_app_filter_bus_get_all_oars_values (BusFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
const GetAppFilterData get_app_filter_data = const GetAppFilterData get_app_filter_data =
{ {
@ -656,7 +656,7 @@ test_app_filter_bus_get_all_oars_values (BusFixture *fixture,
gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb, gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb,
(gpointer) &get_app_filter_data); (gpointer) &get_app_filter_data);
app_filter = epc_get_app_filter (gt_dbus_queue_get_client_connection (fixture->queue), app_filter = mct_get_app_filter (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, fixture->valid_uid,
FALSE, NULL, &local_error); FALSE, NULL, &local_error);
@ -665,23 +665,23 @@ test_app_filter_bus_get_all_oars_values (BusFixture *fixture,
/* Check the OARS filter properties. Each OARS value should have been parsed /* Check the OARS filter properties. Each OARS value should have been parsed
* correctly, except for the unknown `other` one. */ * correctly, except for the unknown `other` one. */
g_assert_cmpuint (epc_app_filter_get_user_id (app_filter), ==, fixture->valid_uid); g_assert_cmpuint (mct_app_filter_get_user_id (app_filter), ==, fixture->valid_uid);
g_assert_cmpint (epc_app_filter_get_oars_value (app_filter, "violence-bloodshed"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-bloodshed"), ==,
EPC_APP_FILTER_OARS_VALUE_NONE); MCT_APP_FILTER_OARS_VALUE_NONE);
g_assert_cmpint (epc_app_filter_get_oars_value (app_filter, "violence-sexual"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-sexual"), ==,
EPC_APP_FILTER_OARS_VALUE_MILD); MCT_APP_FILTER_OARS_VALUE_MILD);
g_assert_cmpint (epc_app_filter_get_oars_value (app_filter, "violence-fantasy"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-fantasy"), ==,
EPC_APP_FILTER_OARS_VALUE_MODERATE); MCT_APP_FILTER_OARS_VALUE_MODERATE);
g_assert_cmpint (epc_app_filter_get_oars_value (app_filter, "violence-realistic"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-realistic"), ==,
EPC_APP_FILTER_OARS_VALUE_INTENSE); MCT_APP_FILTER_OARS_VALUE_INTENSE);
g_assert_cmpint (epc_app_filter_get_oars_value (app_filter, "language-profanity"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "language-profanity"), ==,
EPC_APP_FILTER_OARS_VALUE_UNKNOWN); MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
g_assert_cmpint (epc_app_filter_get_oars_value (app_filter, "unlisted-category"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "unlisted-category"), ==,
EPC_APP_FILTER_OARS_VALUE_UNKNOWN); MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
} }
/* Test that getting an #EpcAppFilter containing only an `AppFilter` property /* Test that getting an #MctAppFilter containing only an `AppFilter` property
* from the mock D-Bus service works, and that the #EpcAppFilter methods use * from the mock D-Bus service works, and that the #MctAppFilter methods use
* appropriate defaults. * appropriate defaults.
* *
* The mock D-Bus replies are generated in get_app_filter_server_cb(). */ * The mock D-Bus replies are generated in get_app_filter_server_cb(). */
@ -689,7 +689,7 @@ static void
test_app_filter_bus_get_defaults (BusFixture *fixture, test_app_filter_bus_get_defaults (BusFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
const GetAppFilterData get_app_filter_data = const GetAppFilterData get_app_filter_data =
{ {
@ -703,7 +703,7 @@ test_app_filter_bus_get_defaults (BusFixture *fixture,
gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb, gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb,
(gpointer) &get_app_filter_data); (gpointer) &get_app_filter_data);
app_filter = epc_get_app_filter (gt_dbus_queue_get_client_connection (fixture->queue), app_filter = mct_get_app_filter (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, fixture->valid_uid,
FALSE, NULL, &local_error); FALSE, NULL, &local_error);
@ -711,16 +711,16 @@ test_app_filter_bus_get_defaults (BusFixture *fixture,
g_assert_nonnull (app_filter); g_assert_nonnull (app_filter);
/* Check the default values for the properties. */ /* Check the default values for the properties. */
g_assert_cmpuint (epc_app_filter_get_user_id (app_filter), ==, fixture->valid_uid); g_assert_cmpuint (mct_app_filter_get_user_id (app_filter), ==, fixture->valid_uid);
oars_sections = epc_app_filter_get_oars_sections (app_filter); oars_sections = mct_app_filter_get_oars_sections (app_filter);
g_assert_cmpuint (g_strv_length ((gchar **) oars_sections), ==, 0); g_assert_cmpuint (g_strv_length ((gchar **) oars_sections), ==, 0);
g_assert_cmpint (epc_app_filter_get_oars_value (app_filter, "violence-bloodshed"), ==, g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-bloodshed"), ==,
EPC_APP_FILTER_OARS_VALUE_UNKNOWN); MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
g_assert_true (epc_app_filter_is_user_installation_allowed (app_filter)); g_assert_true (mct_app_filter_is_user_installation_allowed (app_filter));
g_assert_false (epc_app_filter_is_system_installation_allowed (app_filter)); g_assert_false (mct_app_filter_is_system_installation_allowed (app_filter));
} }
/* Test that epc_get_app_filter() returns an appropriate error if the mock D-Bus /* Test that mct_get_app_filter() returns an appropriate error if the mock D-Bus
* service reports that the given user cannot be found. * service reports that the given user cannot be found.
* *
* The mock D-Bus replies are generated inline. */ * The mock D-Bus replies are generated inline. */
@ -732,9 +732,9 @@ test_app_filter_bus_get_error_invalid_user (BusFixture *fixture,
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
g_autoptr(GDBusMethodInvocation) invocation = NULL; g_autoptr(GDBusMethodInvocation) invocation = NULL;
g_autofree gchar *error_message = NULL; g_autofree gchar *error_message = NULL;
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
epc_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue), mct_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->missing_uid, fixture->missing_uid,
FALSE, NULL, async_result_cb, &result); FALSE, NULL, async_result_cb, &result);
@ -755,14 +755,14 @@ test_app_filter_bus_get_error_invalid_user (BusFixture *fixture,
/* Get the get_app_filter() result. */ /* Get the get_app_filter() result. */
while (result == NULL) while (result == NULL)
g_main_context_iteration (NULL, TRUE); g_main_context_iteration (NULL, TRUE);
app_filter = epc_get_app_filter_finish (result, &local_error); app_filter = mct_get_app_filter_finish (result, &local_error);
g_assert_error (local_error, g_assert_error (local_error,
EPC_APP_FILTER_ERROR, EPC_APP_FILTER_ERROR_INVALID_USER); MCT_APP_FILTER_ERROR, MCT_APP_FILTER_ERROR_INVALID_USER);
g_assert_null (app_filter); g_assert_null (app_filter);
} }
/* Test that epc_get_app_filter() returns an appropriate error if the mock D-Bus /* Test that mct_get_app_filter() returns an appropriate error if the mock D-Bus
* service reports that the properties of the given user cant be accessed due * service reports that the properties of the given user cant be accessed due
* to permissions. * to permissions.
* *
@ -776,9 +776,9 @@ test_app_filter_bus_get_error_permission_denied (BusFixture *fixture,
g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation1 = NULL;
g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL;
g_autofree gchar *object_path = NULL; g_autofree gchar *object_path = NULL;
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
epc_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue), mct_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, fixture->valid_uid,
FALSE, NULL, async_result_cb, &result); FALSE, NULL, async_result_cb, &result);
@ -810,14 +810,14 @@ test_app_filter_bus_get_error_permission_denied (BusFixture *fixture,
/* Get the get_app_filter() result. */ /* Get the get_app_filter() result. */
while (result == NULL) while (result == NULL)
g_main_context_iteration (NULL, TRUE); g_main_context_iteration (NULL, TRUE);
app_filter = epc_get_app_filter_finish (result, &local_error); app_filter = mct_get_app_filter_finish (result, &local_error);
g_assert_error (local_error, g_assert_error (local_error,
EPC_APP_FILTER_ERROR, EPC_APP_FILTER_ERROR_PERMISSION_DENIED); MCT_APP_FILTER_ERROR, MCT_APP_FILTER_ERROR_PERMISSION_DENIED);
g_assert_null (app_filter); g_assert_null (app_filter);
} }
/* Test that epc_get_app_filter() returns an appropriate error if the mock D-Bus /* Test that mct_get_app_filter() returns an appropriate error if the mock D-Bus
* service replies with no app filter properties (implying that it hasnt sent * service replies with no app filter properties (implying that it hasnt sent
* the property values because of permissions). * the property values because of permissions).
* *
@ -831,9 +831,9 @@ test_app_filter_bus_get_error_permission_denied_missing (BusFixture *fixture,
g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation1 = NULL;
g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL;
g_autofree gchar *object_path = NULL; g_autofree gchar *object_path = NULL;
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
epc_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue), mct_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, fixture->valid_uid,
FALSE, NULL, async_result_cb, &result); FALSE, NULL, async_result_cb, &result);
@ -866,14 +866,14 @@ test_app_filter_bus_get_error_permission_denied_missing (BusFixture *fixture,
/* Get the get_app_filter() result. */ /* Get the get_app_filter() result. */
while (result == NULL) while (result == NULL)
g_main_context_iteration (NULL, TRUE); g_main_context_iteration (NULL, TRUE);
app_filter = epc_get_app_filter_finish (result, &local_error); app_filter = mct_get_app_filter_finish (result, &local_error);
g_assert_error (local_error, g_assert_error (local_error,
EPC_APP_FILTER_ERROR, EPC_APP_FILTER_ERROR_PERMISSION_DENIED); MCT_APP_FILTER_ERROR, MCT_APP_FILTER_ERROR_PERMISSION_DENIED);
g_assert_null (app_filter); g_assert_null (app_filter);
} }
/* Test that epc_get_app_filter() returns an error if the mock D-Bus service /* Test that mct_get_app_filter() returns an error if the mock D-Bus service
* reports an unrecognised error. * reports an unrecognised error.
* *
* The mock D-Bus replies are generated inline. */ * The mock D-Bus replies are generated inline. */
@ -884,9 +884,9 @@ test_app_filter_bus_get_error_unknown (BusFixture *fixture,
g_autoptr(GAsyncResult) result = NULL; g_autoptr(GAsyncResult) result = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
g_autoptr(GDBusMethodInvocation) invocation = NULL; g_autoptr(GDBusMethodInvocation) invocation = NULL;
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
epc_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue), mct_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, fixture->valid_uid,
FALSE, NULL, async_result_cb, &result); FALSE, NULL, async_result_cb, &result);
@ -902,14 +902,14 @@ test_app_filter_bus_get_error_unknown (BusFixture *fixture,
g_dbus_method_invocation_return_dbus_error (invocation, g_dbus_method_invocation_return_dbus_error (invocation,
"org.freedesktop.Accounts.Error.NewAndInterestingError", "org.freedesktop.Accounts.Error.NewAndInterestingError",
"This is a fake error message " "This is a fake error message "
"which libeos-parental-controls " "which libmalcontent "
"will never have seen before, " "will never have seen before, "
"but must still handle correctly"); "but must still handle correctly");
/* Get the get_app_filter() result. */ /* Get the get_app_filter() result. */
while (result == NULL) while (result == NULL)
g_main_context_iteration (NULL, TRUE); g_main_context_iteration (NULL, TRUE);
app_filter = epc_get_app_filter_finish (result, &local_error); app_filter = mct_get_app_filter_finish (result, &local_error);
/* We dont actually care what error is actually used here. */ /* We dont actually care what error is actually used here. */
g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR); g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR);
@ -1023,7 +1023,7 @@ set_app_filter_server_cb (GtDBusQueue *queue,
} }
} }
/* Test that setting an #EpcAppFilter on the mock D-Bus service works. The /* Test that setting an #MctAppFilter on the mock D-Bus service works. The
* @test_data is a boolean value indicating whether to do the call * @test_data is a boolean value indicating whether to do the call
* synchronously (%FALSE) or asynchronously (%TRUE). * synchronously (%FALSE) or asynchronously (%TRUE).
* *
@ -1034,8 +1034,8 @@ test_app_filter_bus_set (BusFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
gboolean success; gboolean success;
g_auto(EpcAppFilterBuilder) builder = EPC_APP_FILTER_BUILDER_INIT (); g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT ();
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
gboolean test_async = GPOINTER_TO_UINT (test_data); gboolean test_async = GPOINTER_TO_UINT (test_data);
const SetAppFilterData set_app_filter_data = const SetAppFilterData set_app_filter_data =
@ -1049,14 +1049,14 @@ test_app_filter_bus_set (BusFixture *fixture,
}; };
/* Build an app filter. */ /* Build an app filter. */
epc_app_filter_builder_blacklist_path (&builder, "/usr/bin/false"); mct_app_filter_builder_blacklist_path (&builder, "/usr/bin/false");
epc_app_filter_builder_blacklist_path (&builder, "/usr/bin/banned"); mct_app_filter_builder_blacklist_path (&builder, "/usr/bin/banned");
epc_app_filter_builder_blacklist_flatpak_ref (&builder, "app/org.gnome.Nasty/x86_64/stable"); mct_app_filter_builder_blacklist_flatpak_ref (&builder, "app/org.gnome.Nasty/x86_64/stable");
epc_app_filter_builder_set_oars_value (&builder, "violence-fantasy", EPC_APP_FILTER_OARS_VALUE_INTENSE); mct_app_filter_builder_set_oars_value (&builder, "violence-fantasy", MCT_APP_FILTER_OARS_VALUE_INTENSE);
epc_app_filter_builder_set_allow_user_installation (&builder, TRUE); mct_app_filter_builder_set_allow_user_installation (&builder, TRUE);
epc_app_filter_builder_set_allow_system_installation (&builder, TRUE); mct_app_filter_builder_set_allow_system_installation (&builder, TRUE);
app_filter = epc_app_filter_builder_end (&builder); app_filter = mct_app_filter_builder_end (&builder);
/* Set the mock service function and set the filter. */ /* Set the mock service function and set the filter. */
gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb, gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb,
@ -1066,17 +1066,17 @@ test_app_filter_bus_set (BusFixture *fixture,
{ {
g_autoptr(GAsyncResult) result = NULL; g_autoptr(GAsyncResult) result = NULL;
epc_set_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue), mct_set_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, app_filter, fixture->valid_uid, app_filter,
FALSE, NULL, async_result_cb, &result); FALSE, NULL, async_result_cb, &result);
while (result == NULL) while (result == NULL)
g_main_context_iteration (NULL, TRUE); g_main_context_iteration (NULL, TRUE);
success = epc_set_app_filter_finish (result, &local_error); success = mct_set_app_filter_finish (result, &local_error);
} }
else else
{ {
success = epc_set_app_filter (gt_dbus_queue_get_client_connection (fixture->queue), success = mct_set_app_filter (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, app_filter, fixture->valid_uid, app_filter,
FALSE, NULL, &local_error); FALSE, NULL, &local_error);
} }
@ -1085,7 +1085,7 @@ test_app_filter_bus_set (BusFixture *fixture,
g_assert_true (success); g_assert_true (success);
} }
/* Test that epc_set_app_filter() returns an appropriate error if the mock D-Bus /* Test that mct_set_app_filter() returns an appropriate error if the mock D-Bus
* service reports that the given user cannot be found. * service reports that the given user cannot be found.
* *
* The mock D-Bus replies are generated inline. */ * The mock D-Bus replies are generated inline. */
@ -1094,17 +1094,17 @@ test_app_filter_bus_set_error_invalid_user (BusFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
gboolean success; gboolean success;
g_auto(EpcAppFilterBuilder) builder = EPC_APP_FILTER_BUILDER_INIT (); g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT ();
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
g_autoptr(GAsyncResult) result = NULL; g_autoptr(GAsyncResult) result = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
g_autoptr(GDBusMethodInvocation) invocation = NULL; g_autoptr(GDBusMethodInvocation) invocation = NULL;
g_autofree gchar *error_message = NULL; g_autofree gchar *error_message = NULL;
/* Use the default app filter. */ /* Use the default app filter. */
app_filter = epc_app_filter_builder_end (&builder); app_filter = mct_app_filter_builder_end (&builder);
epc_set_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue), mct_set_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->missing_uid, app_filter, fixture->missing_uid, app_filter,
FALSE, NULL, async_result_cb, &result); FALSE, NULL, async_result_cb, &result);
@ -1125,14 +1125,14 @@ test_app_filter_bus_set_error_invalid_user (BusFixture *fixture,
/* Get the set_app_filter() result. */ /* Get the set_app_filter() result. */
while (result == NULL) while (result == NULL)
g_main_context_iteration (NULL, TRUE); g_main_context_iteration (NULL, TRUE);
success = epc_set_app_filter_finish (result, &local_error); success = mct_set_app_filter_finish (result, &local_error);
g_assert_error (local_error, g_assert_error (local_error,
EPC_APP_FILTER_ERROR, EPC_APP_FILTER_ERROR_INVALID_USER); MCT_APP_FILTER_ERROR, MCT_APP_FILTER_ERROR_INVALID_USER);
g_assert_false (success); g_assert_false (success);
} }
/* Test that epc_set_app_filter() returns an appropriate error if the mock D-Bus /* Test that mct_set_app_filter() returns an appropriate error if the mock D-Bus
* service replies with a permission denied error when setting properties. * service replies with a permission denied error when setting properties.
* *
* The mock D-Bus replies are generated in set_app_filter_server_cb(). */ * The mock D-Bus replies are generated in set_app_filter_server_cb(). */
@ -1141,8 +1141,8 @@ test_app_filter_bus_set_error_permission_denied (BusFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
gboolean success; gboolean success;
g_auto(EpcAppFilterBuilder) builder = EPC_APP_FILTER_BUILDER_INIT (); g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT ();
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
const SetAppFilterData set_app_filter_data = const SetAppFilterData set_app_filter_data =
{ {
@ -1153,21 +1153,21 @@ test_app_filter_bus_set_error_permission_denied (BusFixture *fixture,
}; };
/* Use the default app filter. */ /* Use the default app filter. */
app_filter = epc_app_filter_builder_end (&builder); app_filter = mct_app_filter_builder_end (&builder);
gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb, gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb,
(gpointer) &set_app_filter_data); (gpointer) &set_app_filter_data);
success = epc_set_app_filter (gt_dbus_queue_get_client_connection (fixture->queue), success = mct_set_app_filter (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, app_filter, fixture->valid_uid, app_filter,
FALSE, NULL, &local_error); FALSE, NULL, &local_error);
g_assert_error (local_error, g_assert_error (local_error,
EPC_APP_FILTER_ERROR, EPC_APP_FILTER_ERROR_PERMISSION_DENIED); MCT_APP_FILTER_ERROR, MCT_APP_FILTER_ERROR_PERMISSION_DENIED);
g_assert_false (success); g_assert_false (success);
} }
/* Test that epc_set_app_filter() returns an error if the mock D-Bus service /* Test that mct_set_app_filter() returns an error if the mock D-Bus service
* reports an unrecognised error. * reports an unrecognised error.
* *
* The mock D-Bus replies are generated in set_app_filter_server_cb(). */ * The mock D-Bus replies are generated in set_app_filter_server_cb(). */
@ -1176,8 +1176,8 @@ test_app_filter_bus_set_error_unknown (BusFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
gboolean success; gboolean success;
g_auto(EpcAppFilterBuilder) builder = EPC_APP_FILTER_BUILDER_INIT (); g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT ();
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
const SetAppFilterData set_app_filter_data = const SetAppFilterData set_app_filter_data =
{ {
@ -1185,17 +1185,17 @@ test_app_filter_bus_set_error_unknown (BusFixture *fixture,
.error_index = 0, .error_index = 0,
.dbus_error_name = "org.freedesktop.Accounts.Error.NewAndInterestingError", .dbus_error_name = "org.freedesktop.Accounts.Error.NewAndInterestingError",
.dbus_error_message = "This is a fake error message which " .dbus_error_message = "This is a fake error message which "
"libeos-parental-controls will never have seen " "libmalcontent will never have seen "
"before, but must still handle correctly", "before, but must still handle correctly",
}; };
/* Use the default app filter. */ /* Use the default app filter. */
app_filter = epc_app_filter_builder_end (&builder); app_filter = mct_app_filter_builder_end (&builder);
gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb, gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb,
(gpointer) &set_app_filter_data); (gpointer) &set_app_filter_data);
success = epc_set_app_filter (gt_dbus_queue_get_client_connection (fixture->queue), success = mct_set_app_filter (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, app_filter, fixture->valid_uid, app_filter,
FALSE, NULL, &local_error); FALSE, NULL, &local_error);
@ -1203,7 +1203,7 @@ test_app_filter_bus_set_error_unknown (BusFixture *fixture,
g_assert_false (success); g_assert_false (success);
} }
/* Test that epc_set_app_filter() returns an error if the mock D-Bus service /* Test that mct_set_app_filter() returns an error if the mock D-Bus service
* reports an InvalidArgs error with a given one of its Set() calls. * reports an InvalidArgs error with a given one of its Set() calls.
* *
* @test_data contains a property index encoded with GINT_TO_POINTER(), * @test_data contains a property index encoded with GINT_TO_POINTER(),
@ -1216,8 +1216,8 @@ test_app_filter_bus_set_error_invalid_property (BusFixture *fixture,
gconstpointer test_data) gconstpointer test_data)
{ {
gboolean success; gboolean success;
g_auto(EpcAppFilterBuilder) builder = EPC_APP_FILTER_BUILDER_INIT (); g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT ();
g_autoptr(EpcAppFilter) app_filter = NULL; g_autoptr(MctAppFilter) app_filter = NULL;
g_autoptr(GError) local_error = NULL; g_autoptr(GError) local_error = NULL;
const SetAppFilterData set_app_filter_data = const SetAppFilterData set_app_filter_data =
{ {
@ -1232,12 +1232,12 @@ test_app_filter_bus_set_error_invalid_property (BusFixture *fixture,
}; };
/* Use the default app filter. */ /* Use the default app filter. */
app_filter = epc_app_filter_builder_end (&builder); app_filter = mct_app_filter_builder_end (&builder);
gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb, gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb,
(gpointer) &set_app_filter_data); (gpointer) &set_app_filter_data);
success = epc_set_app_filter (gt_dbus_queue_get_client_connection (fixture->queue), success = mct_set_app_filter (gt_dbus_queue_get_client_connection (fixture->queue),
fixture->valid_uid, app_filter, fixture->valid_uid, app_filter,
FALSE, NULL, &local_error); FALSE, NULL, &local_error);

View File

@ -3,7 +3,7 @@ deps = [
dependency('gio-unix-2.0', version: '>= 2.44'), dependency('gio-unix-2.0', version: '>= 2.44'),
dependency('glib-2.0', version: '>= 2.54.2'), dependency('glib-2.0', version: '>= 2.54.2'),
dependency('gobject-2.0', version: '>= 2.44'), dependency('gobject-2.0', version: '>= 2.44'),
libeos_parental_controls_dep, libmalcontent_dep,
libglib_testing_dep, libglib_testing_dep,
] ]
@ -17,9 +17,9 @@ test_programs = [
] ]
installed_tests_metadir = join_paths(datadir, 'installed-tests', installed_tests_metadir = join_paths(datadir, 'installed-tests',
'libeos-parental-controls-' + libeos_parental_controls_api_version) 'libmalcontent-' + libmalcontent_api_version)
installed_tests_execdir = join_paths(libexecdir, 'installed-tests', installed_tests_execdir = join_paths(libexecdir, 'installed-tests',
'libeos-parental-controls-' + libeos_parental_controls_api_version) 'libmalcontent-' + libmalcontent_api_version)
foreach program: test_programs foreach program: test_programs
test_conf = configuration_data() test_conf = configuration_data()

View File

@ -1,23 +1,23 @@
.\" Manpage for eos\-parental\-controls\-client. .\" Manpage for malcontent\-client.
.\" Documentation is under the same licence as the eos\-parental\-controls .\" Documentation is under the same licence as the malcontent
.\" package. .\" package.
.TH man 8 "03 Oct 2018" "1.0" "eos\-parental\-controls\-client man page" .TH man 8 "03 Oct 2018" "1.0" "malcontent\-client man page"
.\" .\"
.SH NAME .SH NAME
.IX Header "NAME" .IX Header "NAME"
eos\-parental\-controls\-client — Parental Controls Access Utility malcontent\-client — Parental Controls Access Utility
.\" .\"
.SH SYNOPSIS .SH SYNOPSIS
.IX Header "SYNOPSIS" .IX Header "SYNOPSIS"
.\" .\"
\fBeos\-parental\-controls\-client get [\-q] [\-n] [\fPUSER\fB] \fBmalcontent\-client get [\-q] [\-n] [\fPUSER\fB]
.PP .PP
\fBeos\-parental\-controls\-client check [\-q] [\-n] [\fPUSER\fB] \fPPATH\fB \fBmalcontent\-client check [\-q] [\-n] [\fPUSER\fB] \fPPATH\fB
.\" .\"
.SH DESCRIPTION .SH DESCRIPTION
.IX Header "DESCRIPTION" .IX Header "DESCRIPTION"
.\" .\"
\fBeos\-parental\-controls\-client\fP is a utility for querying and updating the \fBmalcontent\-client\fP is a utility for querying and updating the
parental controls settings for users on the system. It will typically require parental controls settings for users on the system. It will typically require
adminstrator access to do anything more than query the current users parental adminstrator access to do anything more than query the current users parental
controls. controls.
@ -66,7 +66,7 @@ authorization.)
.SH "ENVIRONMENT" .SH "ENVIRONMENT"
.IX Header "ENVIRONMENT" .IX Header "ENVIRONMENT"
.\" .\"
\fBeos\-parental\-controls\-client\fP supports the standard GLib environment \fBmalcontent\-client\fP supports the standard GLib environment
variables for debugging. These variables are \fBnot\fP intended to be used in variables for debugging. These variables are \fBnot\fP intended to be used in
production: production:
.\" .\"
@ -79,7 +79,7 @@ debug output to be enabled.
.SH "EXIT STATUS" .SH "EXIT STATUS"
.IX Header "EXIT STATUS" .IX Header "EXIT STATUS"
.\" .\"
\fBeos\-parental\-controls\-client\fP may return one of several error codes if it \fBmalcontent\-client\fP may return one of several error codes if it
encounters problems. encounters problems.
.\" .\"
.IP "0" 4 .IP "0" 4
@ -90,7 +90,7 @@ given user.
.\" .\"
.IP "1" 4 .IP "1" 4
.IX Item "1" .IX Item "1"
An invalid option was passed to \fBeos\-parental\-controls\-client\fP on An invalid option was passed to \fBmalcontent\-client\fP on
startup. startup.
.\" .\"
.IP "2" 4 .IP "2" 4

View File

@ -21,8 +21,8 @@ import os
import pwd import pwd
import sys import sys
import gi import gi
gi.require_version('EosParentalControls', '0') # noqa gi.require_version('Malcontent', '0') # noqa
from gi.repository import EosParentalControls, GLib from gi.repository import Malcontent, GLib
# Exit codes, which are a documented part of the API. # Exit codes, which are a documented part of the API.
@ -37,7 +37,7 @@ def __get_app_filter(user_id, interactive):
If `interactive` is `True`, interactive polkit authorisation dialogues will If `interactive` is `True`, interactive polkit authorisation dialogues will
be allowed. An exception will be raised on failure.""" be allowed. An exception will be raised on failure."""
return EosParentalControls.get_app_filter( return Malcontent.get_app_filter(
connection=None, user_id=user_id, connection=None, user_id=user_id,
allow_interactive_authorization=interactive, cancellable=None) allow_interactive_authorization=interactive, cancellable=None)
@ -58,7 +58,7 @@ def __set_app_filter(user_id, app_filter, interactive):
If `interactive` is `True`, interactive polkit authorisation dialogues will If `interactive` is `True`, interactive polkit authorisation dialogues will
be allowed. An exception will be raised on failure.""" be allowed. An exception will be raised on failure."""
EosParentalControls.set_app_filter( Malcontent.set_app_filter(
connection=None, user_id=user_id, app_filter=app_filter, connection=None, user_id=user_id, app_filter=app_filter,
allow_interactive_authorization=interactive, cancellable=None) allow_interactive_authorization=interactive, cancellable=None)
@ -98,16 +98,16 @@ def __lookup_user_id_or_error(user):
oars_value_mapping = { oars_value_mapping = {
EosParentalControls.AppFilterOarsValue.UNKNOWN: "unknown", Malcontent.AppFilterOarsValue.UNKNOWN: "unknown",
EosParentalControls.AppFilterOarsValue.NONE: "none", Malcontent.AppFilterOarsValue.NONE: "none",
EosParentalControls.AppFilterOarsValue.MILD: "mild", Malcontent.AppFilterOarsValue.MILD: "mild",
EosParentalControls.AppFilterOarsValue.MODERATE: "moderate", Malcontent.AppFilterOarsValue.MODERATE: "moderate",
EosParentalControls.AppFilterOarsValue.INTENSE: "intense", Malcontent.AppFilterOarsValue.INTENSE: "intense",
} }
def __oars_value_to_string(value): def __oars_value_to_string(value):
"""Convert an EosParentalControls.AppFilterOarsValue to a human-readable """Convert an Malcontent.AppFilterOarsValue to a human-readable
string.""" string."""
try: try:
return oars_value_mapping[value] return oars_value_mapping[value]
@ -117,7 +117,7 @@ def __oars_value_to_string(value):
def __oars_value_from_string(value_str): def __oars_value_from_string(value_str):
"""Convert a human-readable string to an """Convert a human-readable string to an
EosParentalControls.AppFilterOarsValue.""" Malcontent.AppFilterOarsValue."""
for k, v in oars_value_mapping.items(): for k, v in oars_value_mapping.items():
if v == value_str: if v == value_str:
return k return k
@ -196,7 +196,7 @@ def command_set(user, allow_user_installation=True,
quiet=False, interactive=True): quiet=False, interactive=True):
"""Set the app filter for the given user.""" """Set the app filter for the given user."""
user_id = __lookup_user_id_or_error(user) user_id = __lookup_user_id_or_error(user)
builder = EosParentalControls.AppFilterBuilder.new() builder = Malcontent.AppFilterBuilder.new()
builder.set_allow_user_installation(allow_user_installation) builder.set_allow_user_installation(allow_user_installation)
builder.set_allow_system_installation(allow_system_installation) builder.set_allow_system_installation(allow_system_installation)

View File

@ -0,0 +1,11 @@
# Python program
install_data('malcontent-client.py',
install_dir: bindir,
install_mode: 'rwxr-xr-x',
rename: ['malcontent-client'],
)
# Documentation
install_man('docs/malcontent-client.8')
# TODO subdir('tests')

8
malcontent.doap Normal file
View File

@ -0,0 +1,8 @@
<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns="http://usefulinc.com/ns/doap#">
<name xml:lang="en">malcontent</name>
<shortdesc xml:lang="en">malcontent provides restrictions for children on Linux systems</shortdesc>
<description xml:lang="en">malcontent implements support for restricting the abilities of non-administrator accounts on a Linux system.</description>
<homepage rdf:resource="https://gitlab.freedesktop.org/pwithnall/malcontent"/>
<license rdf:resource="http://usefulinc.com/doap/licenses/lgpl"/>
<download-page rdf:resource="https://gitlab.freedesktop.org/pwithnall/malcontent"/>
</Project>

View File

@ -1,5 +1,5 @@
project('eos-parental-controls', 'c', project('malcontent', 'c',
version : '0.1.0', version : '0.2.0',
meson_version : '>= 0.47.0', meson_version : '>= 0.47.0',
license: 'LGPLv2.1+', license: 'LGPLv2.1+',
default_options : [ default_options : [
@ -119,5 +119,5 @@ test_env = [
] ]
subdir('accounts-service') subdir('accounts-service')
subdir('eos-parental-controls-client') subdir('malcontent-client')
subdir('libeos-parental-controls') subdir('libmalcontent')

View File

@ -1 +1 @@
i18n.gettext('eos-parental-controls', preset: 'glib') i18n.gettext('malcontent', preset: 'glib')