2017-12-18 10:17:39 +00:00
|
|
|
/**
|
|
|
|
* Copyright (C) 2016, Canonical Ltd.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the BSD-style license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
*
|
|
|
|
* Author: Justin McPherson <justin.mcpherson@canonical.com>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
|
|
|
#include "bridge.h"
|
2017-12-23 11:34:34 +00:00
|
|
|
#include "rnrandombytesdesktop.h"
|
2017-12-18 10:17:39 +00:00
|
|
|
#include <QCryptographicHash>
|
|
|
|
#include <QDateTime>
|
2017-12-23 13:51:31 +00:00
|
|
|
#include <QDebug>
|
2017-12-18 10:17:39 +00:00
|
|
|
#include <QMap>
|
|
|
|
#include <QNetworkDiskCache>
|
|
|
|
#include <QNetworkReply>
|
|
|
|
#include <QNetworkRequest>
|
|
|
|
#include <QQuickImageProvider>
|
|
|
|
|
2017-12-23 11:34:34 +00:00
|
|
|
namespace {
|
|
|
|
struct RegisterQMLMetaType {
|
|
|
|
RegisterQMLMetaType() {
|
|
|
|
qRegisterMetaType<RNRandomBytes*>();
|
|
|
|
}
|
|
|
|
} registerMetaType;
|
|
|
|
} // namespace
|
|
|
|
|
2017-12-18 10:17:39 +00:00
|
|
|
class RNRandomBytesPrivate {
|
|
|
|
|
|
|
|
public:
|
|
|
|
RNRandomBytesPrivate() {
|
2017-12-23 13:51:31 +00:00
|
|
|
seed = generateRandomBytes(4096);
|
2017-12-18 10:17:39 +00:00
|
|
|
}
|
2017-12-23 13:51:31 +00:00
|
|
|
|
|
|
|
QString generateRandomBytes(int size);
|
|
|
|
|
2017-12-18 10:17:39 +00:00
|
|
|
QString seed;
|
2017-12-23 13:51:31 +00:00
|
|
|
Bridge* bridge = nullptr;
|
2017-12-18 10:17:39 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
RNRandomBytes::RNRandomBytes(QObject* parent) : QObject(parent), d_ptr(new RNRandomBytesPrivate) {}
|
|
|
|
|
|
|
|
RNRandomBytes::~RNRandomBytes() {}
|
|
|
|
|
2017-12-23 13:51:31 +00:00
|
|
|
QString RNRandomBytesPrivate::generateRandomBytes(int size) {
|
|
|
|
QString randomString;
|
|
|
|
qsrand(QDateTime::currentDateTime().currentMSecsSinceEpoch());
|
|
|
|
while (randomString.size() < size) {
|
|
|
|
randomString.append(QChar(qrand()));
|
|
|
|
}
|
2018-01-12 09:09:50 +00:00
|
|
|
return randomString.toUtf8().toBase64();
|
2017-12-23 13:51:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void RNRandomBytes::randomBytes(int length, double funcId) {
|
|
|
|
Q_D(RNRandomBytes);
|
|
|
|
if (d->bridge) {
|
|
|
|
d->bridge->invokePromiseCallback(funcId, QVariantList{"", d->generateRandomBytes(length)});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-12-18 10:17:39 +00:00
|
|
|
QString RNRandomBytes::moduleName() {
|
|
|
|
return "RNRandomBytes";
|
|
|
|
}
|
|
|
|
|
|
|
|
QList<ModuleMethod*> RNRandomBytes::methodsToExport() {
|
|
|
|
return QList<ModuleMethod*>{};
|
|
|
|
}
|
|
|
|
|
|
|
|
QVariantMap RNRandomBytes::constantsToExport() {
|
|
|
|
return QVariantMap{{"seed", d_ptr->seed}};
|
|
|
|
}
|
2017-12-23 13:51:31 +00:00
|
|
|
|
|
|
|
void RNRandomBytes::setBridge(Bridge* bridge) {
|
|
|
|
Q_D(RNRandomBytes);
|
|
|
|
d->bridge = bridge;
|
|
|
|
}
|