check with the authorization manager whether to allow the import of a certain url (unfortunatel doesn't seem to be any way to block local absolute paths :/)
svn path=/trunk/KDE/kdebase/runtime/; revision=1188241
This commit is contained in:
parent
155dc2d056
commit
ade2a71286
@ -19,11 +19,38 @@
|
|||||||
|
|
||||||
#include "packageaccessmanager.h"
|
#include "packageaccessmanager.h"
|
||||||
|
|
||||||
|
#include <QNetworkReply>
|
||||||
|
|
||||||
#include <Plasma/Package>
|
#include <Plasma/Package>
|
||||||
|
|
||||||
PackageAccessManager::PackageAccessManager(const Plasma::Package *package, QObject *parent)
|
#include "plasmoid/appletauthorization.h"
|
||||||
|
|
||||||
|
class ErrorReply : public QNetworkReply
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ErrorReply(QNetworkAccessManager::Operation op, const QNetworkRequest &req)
|
||||||
|
: QNetworkReply()
|
||||||
|
{
|
||||||
|
setError(QNetworkReply::ContentOperationNotPermittedError, "The plasmoid has not been authorized to load remote content");
|
||||||
|
setOperation(op);
|
||||||
|
setRequest(req);
|
||||||
|
setUrl(req.url());
|
||||||
|
}
|
||||||
|
|
||||||
|
qint64 readData(char *data, qint64 maxSize)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void abort()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
PackageAccessManager::PackageAccessManager(const Plasma::Package *package, AppletAuthorization *auth, QObject *parent)
|
||||||
: KIO::AccessManager(parent),
|
: KIO::AccessManager(parent),
|
||||||
m_package(package)
|
m_package(package),
|
||||||
|
m_auth(auth)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,7 +59,7 @@ PackageAccessManager::~PackageAccessManager()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QNetworkReply *PackageAccessManager::createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData)
|
QNetworkReply *PackageAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *outgoingData)
|
||||||
{
|
{
|
||||||
QUrl reqUrl(req.url());
|
QUrl reqUrl(req.url());
|
||||||
|
|
||||||
@ -42,7 +69,11 @@ QNetworkReply *PackageAccessManager::createRequest(Operation op, const QNetworkR
|
|||||||
reqUrl.setPath(m_package->path()+"/contents/"+reqUrl.path());
|
reqUrl.setPath(m_package->path()+"/contents/"+reqUrl.path());
|
||||||
request.setUrl(reqUrl);
|
request.setUrl(reqUrl);
|
||||||
return KIO::AccessManager::createRequest(op, request, outgoingData);
|
return KIO::AccessManager::createRequest(op, request, outgoingData);
|
||||||
} else {
|
} else if ((reqUrl.scheme() == "http" && !m_auth->authorizeRequiredExtension("http")) ||
|
||||||
|
((reqUrl.scheme() == "file" || reqUrl.scheme() == "desktop") && !m_auth->authorizeRequiredExtension("localio")) ||
|
||||||
|
(!m_auth->authorizeRequiredExtension("networkio"))) {
|
||||||
|
return new ErrorReply(op, req);
|
||||||
|
}else {
|
||||||
return KIO::AccessManager::createRequest(op, req, outgoingData);
|
return KIO::AccessManager::createRequest(op, req, outgoingData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,22 +22,26 @@
|
|||||||
|
|
||||||
#include <kio/accessmanager.h>
|
#include <kio/accessmanager.h>
|
||||||
|
|
||||||
|
|
||||||
namespace Plasma
|
namespace Plasma
|
||||||
{
|
{
|
||||||
class Package;
|
class Package;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class AppletAuthorization;
|
||||||
|
|
||||||
class PackageAccessManager : public KIO::AccessManager
|
class PackageAccessManager : public KIO::AccessManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PackageAccessManager(const Plasma::Package *package, QObject *parent = 0);
|
PackageAccessManager(const Plasma::Package *package, AppletAuthorization *auth, QObject *parent = 0);
|
||||||
~PackageAccessManager();
|
~PackageAccessManager();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QNetworkReply *createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData = 0);
|
QNetworkReply *createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *outgoingData = 0);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const Plasma::Package *m_package;
|
const Plasma::Package *m_package;
|
||||||
|
AppletAuthorization *m_auth;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,10 +22,12 @@
|
|||||||
#include <Plasma/Package>
|
#include <Plasma/Package>
|
||||||
|
|
||||||
#include "packageaccessmanager.h"
|
#include "packageaccessmanager.h"
|
||||||
|
#include "plasmoid/appletauthorization.h"
|
||||||
|
|
||||||
PackageAccessManagerFactory::PackageAccessManagerFactory(const Plasma::Package *package)
|
PackageAccessManagerFactory::PackageAccessManagerFactory(const Plasma::Package *package, AppletAuthorization *auth)
|
||||||
: QDeclarativeNetworkAccessManagerFactory(),
|
: QDeclarativeNetworkAccessManagerFactory(),
|
||||||
m_package(package)
|
m_package(package),
|
||||||
|
m_auth(auth)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,7 +37,7 @@ PackageAccessManagerFactory::~PackageAccessManagerFactory()
|
|||||||
|
|
||||||
QNetworkAccessManager *PackageAccessManagerFactory::create(QObject *parent)
|
QNetworkAccessManager *PackageAccessManagerFactory::create(QObject *parent)
|
||||||
{
|
{
|
||||||
return new PackageAccessManager(m_package, parent);
|
return new PackageAccessManager(m_package, m_auth, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,20 +22,24 @@
|
|||||||
|
|
||||||
#include <QDeclarativeNetworkAccessManagerFactory>
|
#include <QDeclarativeNetworkAccessManagerFactory>
|
||||||
|
|
||||||
|
|
||||||
namespace Plasma
|
namespace Plasma
|
||||||
{
|
{
|
||||||
class Package;
|
class Package;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class AppletAuthorization;
|
||||||
|
|
||||||
class PackageAccessManagerFactory : public QDeclarativeNetworkAccessManagerFactory
|
class PackageAccessManagerFactory : public QDeclarativeNetworkAccessManagerFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PackageAccessManagerFactory(const Plasma::Package *package);
|
PackageAccessManagerFactory(const Plasma::Package *package, AppletAuthorization *auth);
|
||||||
~PackageAccessManagerFactory();
|
~PackageAccessManagerFactory();
|
||||||
QNetworkAccessManager *create(QObject *parent);
|
QNetworkAccessManager *create(QObject *parent);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const Plasma::Package *m_package;
|
const Plasma::Package *m_package;
|
||||||
|
AppletAuthorization *m_auth;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user