Skip to content

Commit

Permalink
Merge branch 'master' into tama
Browse files Browse the repository at this point in the history
  • Loading branch information
rinigus committed Mar 1, 2021
2 parents 17104b2 + ce095f8 commit a3553f2
Show file tree
Hide file tree
Showing 15 changed files with 962 additions and 39 deletions.
12 changes: 7 additions & 5 deletions rpm/nemo-qml-plugin-systemsettings.spec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Name: nemo-qml-plugin-systemsettings
Summary: System settings plugin for Nemo Mobile
Version: 0.5.37
Version: 0.5.73
Release: 1
License: BSD
URL: https://git.sailfishos.org/mer-core/nemo-qml-plugin-systemsettings
Expand All @@ -10,31 +10,33 @@ Requires(postun): /sbin/ldconfig
Requires: connman
Requires: mce >= 1.83.0
Requires: libsailfishkeyprovider >= 0.0.14
Requires: connman-qt5 >= 1.2.21
Requires: connman-qt5 >= 1.2.38
Requires: user-managerd >= 0.4.0
Requires: udisks2 >= 2.8.1+git6
Requires: mlite-qt5 >= 0.3.3
Requires(post): coreutils
BuildRequires: pkgconfig(Qt5Qml)
BuildRequires: pkgconfig(Qt5SystemInfo)
BuildRequires: pkgconfig(Qt5Test)
BuildRequires: pkgconfig(Qt5XmlPatterns)
BuildRequires: pkgconfig(timed-qt5)
BuildRequires: pkgconfig(profile)
BuildRequires: pkgconfig(mce) >= 1.21.0
BuildRequires: pkgconfig(mlite5)
BuildRequires: pkgconfig(mlite5) >= 0.3.3
BuildRequires: pkgconfig(usb-moded-qt5)
BuildRequires: pkgconfig(blkid)
BuildRequires: pkgconfig(libcrypto)
BuildRequires: pkgconfig(nemodbus) >= 2.1.16
BuildRequires: pkgconfig(nemomodels-qt5)
BuildRequires: pkgconfig(libsailfishkeyprovider) >= 0.0.14
BuildRequires: pkgconfig(connman-qt5) >= 1.2.23
BuildRequires: pkgconfig(connman-qt5) >= 1.2.38
BuildRequires: pkgconfig(ssu-sysinfo) >= 1.1.0
BuildRequires: pkgconfig(packagekitqt5)
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(sailfishaccesscontrol)
BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(sailfishusermanager)
BuildRequires: qt5-qttools-linguist
BuildRequires: pkgconfig(openssl)

%description
%{summary}.
Expand Down
26 changes: 9 additions & 17 deletions src/certificatemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,8 @@ struct X509Certificate
{
QList<QPair<QString, QString>> rv;

for (int i = 0, n = sk_X509_EXTENSION_num(x509->cert_info->extensions); i < n; ++i) {
X509_EXTENSION *extension = sk_X509_EXTENSION_value(x509->cert_info->extensions, i);
for (int i = 0, n = sk_X509_EXTENSION_num(X509_get0_extensions(x509)); i < n; ++i) {
X509_EXTENSION *extension = sk_X509_EXTENSION_value(X509_get0_extensions(x509), i);

ASN1_OBJECT *object = X509_EXTENSION_get_object(extension);
int nid = OBJ_obj2nid(object);
Expand All @@ -151,11 +151,14 @@ struct X509Certificate
QList<QPair<QString, QString>> signatureList(bool shortForm = false) const
{
QList<QPair<QString, QString>> rv;
const X509_ALGOR *sig_alg;
const ASN1_BIT_STRING *sig;
X509_get0_signature(&sig,&sig_alg, x509);

rv.append(qMakePair(QStringLiteral("Algorithm"), objectToString(x509->sig_alg->algorithm, shortForm)));
rv.append(qMakePair(QStringLiteral("Algorithm"), objectToString(sig_alg->algorithm, shortForm)));

BIO *b = BIO_new(BIO_s_mem());
X509_signature_dump(b, x509->signature, 0);
X509_signature_dump(b, sig, 0);
QString d(bioToString(b).replace(QChar('\n'), QString()));
rv.append(qMakePair(QStringLiteral("Data"), d.trimmed()));
BIO_free(b);
Expand All @@ -166,7 +169,7 @@ struct X509Certificate
private:
static QString stringToString(ASN1_STRING *data)
{
return QString::fromUtf8(reinterpret_cast<char*>(ASN1_STRING_data(data)));
return QString::fromUtf8(reinterpret_cast<const char*>(ASN1_STRING_get0_data((data))));
}

static QString timeToString(ASN1_TIME *data)
Expand Down Expand Up @@ -331,7 +334,7 @@ struct X509Certificate

X509Certificate(X509 *x) : x509(x) {}

X509 *x509;
X509 *x509 = X509_new();
};

namespace {
Expand Down Expand Up @@ -496,21 +499,10 @@ class LibCrypto
{
Initializer()
{
// As per: https://wiki.openssl.org/index.php/Library_Initialization#libcrypto_Initialization
OpenSSL_add_all_algorithms();
ERR_load_crypto_strings();
OPENSSL_config(NULL);
}

~Initializer()
{
FIPS_mode_set(0);
ENGINE_cleanup();
CONF_modules_unload(1);
EVP_cleanup();
CRYPTO_cleanup_all_ex_data();
ERR_remove_thread_state(NULL);
ERR_free_strings();
}
};

Expand Down
6 changes: 4 additions & 2 deletions src/developermodesettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@
#define DEVELOPER_MODE_PACKAGE "jolla-developer-mode"
#define DEVELOPER_MODE_PACKAGE_PRELOAD_DIR "/var/lib/jolla-developer-mode/preloaded/"

#define EMULATOR_PROVIDED_FILE "/etc/sailfishos-emulator"

/* D-Bus service */
#define USB_MODED_SERVICE "com.meego.usb_moded"
#define USB_MODED_PATH "/com/meego/usb_moded"
Expand Down Expand Up @@ -115,7 +117,7 @@ DeveloperModeSettings::DeveloperModeSettings(QObject *parent)
, m_usbInterface(USB_NETWORK_FALLBACK_INTERFACE)
, m_usbIpAddress(USB_NETWORK_FALLBACK_IP)
, m_username(qgetenv("USER"))
, m_developerModeEnabled(QFile::exists(DEVELOPER_MODE_PROVIDED_FILE))
, m_developerModeEnabled(QFile::exists(DEVELOPER_MODE_PROVIDED_FILE) || QFile::exists(EMULATOR_PROVIDED_FILE))
, m_workStatus(Idle)
, m_workProgress(PROGRESS_INDETERMINATE)
, m_transactionRole(PackageKit::Transaction::RoleUnknown)
Expand Down Expand Up @@ -558,7 +560,7 @@ void DeveloperModeSettings::updateState(int percentage, PackageKit::Transaction:
void DeveloperModeSettings::resetState()
{
if (m_installationType == DeveloperMode) {
bool enabled = QFile::exists(DEVELOPER_MODE_PROVIDED_FILE);
bool enabled = QFile::exists(DEVELOPER_MODE_PROVIDED_FILE) || QFile::exists(EMULATOR_PROVIDED_FILE);
if (m_developerModeEnabled != enabled) {
m_developerModeEnabled = enabled;
emit developerModeEnabledChanged();
Expand Down
112 changes: 112 additions & 0 deletions src/permissionsmodel.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
/*
* Copyright (C) 2020 Open Mobile Platform LLC.
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/

#include <MDesktopEntry>
#include <MPermission>
#include "permissionsmodel.h"

PermissionsModel::PermissionsModel(QObject *parent)
: QAbstractListModel(parent)
{
}

PermissionsModel::~PermissionsModel()
{
}

QString PermissionsModel::desktopFile() const
{
return m_desktopFile;
}

void PermissionsModel::setDesktopFile(QString file)
{
if (m_desktopFile != file) {
m_desktopFile = file;
loadPermissions();
emit desktopFileChanged();
emit countChanged();
}
}

QHash<int, QByteArray> PermissionsModel::roleNames() const
{
static const QHash<int, QByteArray> roles = {
{ Qt::DisplayRole, "display" },
{ DescriptionRole, "description" },
{ LongDescriptionRole, "longDescription" },
{ NameRole, "name" },
};
return roles;
}

int PermissionsModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent)
return m_permissions.count();
}

QVariant PermissionsModel::data(const QModelIndex &index, int role) const
{
if (index.row() < 0 || index.row() >= rowCount() || index.column() != 0)
return QVariant();

switch (role) {
case Qt::DisplayRole:
case DescriptionRole:
return m_permissions.at(index.row()).description();
case LongDescriptionRole:
return m_permissions.at(index.row()).longDescription();
case NameRole:
return m_permissions.at(index.row()).name();
default:
return QVariant();
}
}

void PermissionsModel::loadPermissions()
{
if (!m_permissions.isEmpty()) {
beginRemoveRows(QModelIndex(), 0, m_permissions.length() - 1);
m_permissions.clear();
endRemoveRows();
}

MDesktopEntry entry(m_desktopFile);
if (entry.isValid()) {
auto permissions = MPermission::fromDesktopEntry(entry);
if (!permissions.isEmpty()) {
beginInsertRows(QModelIndex(), 0, permissions.length() - 1);
m_permissions.swap(permissions);
endInsertRows();
}
}
}
74 changes: 74 additions & 0 deletions src/permissionsmodel.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* Copyright (C) 2020 Open Mobile Platform LLC.
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/

#ifndef PERMISSIONSMODEL_H
#define PERMISSIONSMODEL_H

#include <QAbstractListModel>
#include "systemsettingsglobal.h"

class MPermission;

class SYSTEMSETTINGS_EXPORT PermissionsModel: public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(QString desktopFile READ desktopFile WRITE setDesktopFile NOTIFY desktopFileChanged)
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)

public:
explicit PermissionsModel(QObject *parent = nullptr);
~PermissionsModel();

enum Roles {
DescriptionRole = Qt::UserRole,
LongDescriptionRole,
NameRole,
};

QString desktopFile() const;
void setDesktopFile(QString file);

QHash<int, QByteArray> roleNames() const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const;

signals:
void desktopFileChanged();
void countChanged();

private:
void loadPermissions();

QString m_desktopFile;
QList<MPermission> m_permissions;
};

#endif // PERMISSIONSMODEL_H
5 changes: 4 additions & 1 deletion src/plugin/plugin.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2013-2015 Jolla Ltd. <[email protected]>
* Copyright (C) 2013 - 2017 Jolla Ltd.
* Copyright (C) 2019 - 2020 Open Mobile Platform LLC.
*
* You may use this file under the terms of the BSD license as follows:
*
Expand Down Expand Up @@ -54,6 +55,7 @@
#include "nfcsettings.h"
#include "userinfo.h"
#include "usermodel.h"
#include "permissionsmodel.h"

class AppTranslator: public QTranslator
{
Expand Down Expand Up @@ -115,6 +117,7 @@ class SystemSettingsPlugin : public QQmlExtensionPlugin
qmlRegisterType<NfcSettings>(uri, 1, 0, "NfcSettings");
qmlRegisterType<UserInfo>(uri, 1, 0, "UserInfo");
qmlRegisterType<UserModel>(uri, 1, 0, "UserModel");
qmlRegisterType<PermissionsModel>(uri, 1, 0, "PermissionsModel");
}
};

Expand Down
2 changes: 1 addition & 1 deletion src/plugin/plugin.pro
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ CONFIG += qt plugin c++11 hide_symbols link_pkgconfig
QT += qml dbus network
QT -= gui

PKGCONFIG += profile usb-moded-qt5 nemomodels-qt5 libsailfishkeyprovider connman-qt5 packagekitqt5
PKGCONFIG += profile usb-moded-qt5 libsailfishkeyprovider connman-qt5 packagekitqt5

target.path = $$[QT_INSTALL_QML]/$$PLUGIN_IMPORT_PATH
INSTALLS += target
Expand Down
Loading

0 comments on commit a3553f2

Please sign in to comment.