Database connections have been refactored

keepDbCredentials property has been added to Connection
setPassPharse(QString& passPharse) method has been added to ReportEngine
IDbCredentialsProvider interface has been added
registerDbCredentialsProvider(IDbCredentialsProvider *provider) has been
added to IDataSourceManager
This commit is contained in:
Arin Alexander
2017-02-16 04:11:39 +03:00
parent fa985d7fb7
commit ce3a905c55
22 changed files with 257 additions and 64 deletions

View File

@@ -35,10 +35,16 @@ namespace LimeReport {
class SerializatorIntf
{
public:
virtual QVariant loadValue()=0;
virtual void save(const QVariant& value,QString name)=0;
virtual QVariant loadValue() = 0;
virtual void save(const QVariant& value,QString name) = 0;
virtual ~SerializatorIntf(){}
};
class CryptedSerializator : public virtual SerializatorIntf
{
public:
virtual void setPassPhrase(const QString& passPhrase) = 0;
};
}
#endif // LRSERIALIZATORINTF_H

View File

@@ -39,18 +39,19 @@ namespace LimeReport{
class ObjectLoadingStateIntf{
public:
virtual bool isLoading()=0;
virtual void objectLoadStarted()=0;
virtual void objectLoadFinished()=0;
virtual bool isLoading() = 0;
virtual void objectLoadStarted() = 0;
virtual void objectLoadFinished() = 0;
};
class ItemsWriterIntf
{
public:
virtual void putItem(QObject* item)=0;
virtual void putItem(QObject* item) = 0;
virtual bool saveToFile(QString fileName) = 0;
virtual QString saveToString() = 0;
virtual QByteArray saveToByteArray() = 0;
virtual void setPassPhrase(const QString& passPhrase) = 0;
virtual ~ItemsWriterIntf(){}
};
@@ -58,14 +59,15 @@ class ItemsReaderIntf
{
public:
typedef QSharedPointer<ItemsReaderIntf> Ptr;
virtual bool first()=0;
virtual bool next()=0;
virtual bool prior()=0;
virtual QString itemType()=0;
virtual QString itemClassName()=0;
virtual bool readItem(QObject *item)=0;
virtual int firstLevelItemsCount()=0;
virtual QString lastError()=0;
virtual bool first() = 0;
virtual bool next() = 0;
virtual bool prior() = 0;
virtual QString itemType() = 0;
virtual QString itemClassName() = 0;
virtual bool readItem(QObject *item) = 0;
virtual int firstLevelItemsCount() = 0;
virtual QString lastError() = 0;
virtual void setPassPhrase(const QString& passPhrase) = 0;
virtual ~ItemsReaderIntf(){}
};

View File

@@ -109,7 +109,7 @@ void XmlQStringSerializator::save(const QVariant &value, QString name)
QDomElement _node = doc()->createElement(name);
_node.setAttribute("Type","QString");
if (name.compare("password")==0){
Chipper chipper;
Chipper chipper(passPhrase());
QByteArray ba = chipper.cryptString(value.toString());
//ba.append();
_node.setAttribute("Value",QString(ba.toBase64()));
@@ -123,7 +123,7 @@ QVariant XmlQStringSerializator::loadValue()
{
if (node()->tagName().compare("password")==0){
QByteArray ba;
Chipper chipper;
Chipper chipper(passPhrase());
ba.append(node()->attribute("Value").toLatin1());
return chipper.decryptByteArray(QByteArray::fromBase64(ba));
} else

View File

@@ -36,7 +36,7 @@
namespace LimeReport{
class XmlBaseSerializator : public SerializatorIntf{
class XmlBaseSerializator : public virtual SerializatorIntf{
public:
XmlBaseSerializator(QDomDocument *doc, QDomElement *node):m_doc(doc),m_node(node){}
protected:
@@ -48,10 +48,21 @@ private:
QDomElement *m_node;
};
class XmlQStringSerializator : public XmlBaseSerializator
class XmlCryptedSerializator : public XmlBaseSerializator, public virtual CryptedSerializator{
public:
XmlCryptedSerializator(QDomDocument *doc, QDomElement *node)
:XmlBaseSerializator(doc, node){}
virtual void setPassPhrase(const QString& passPhrase) {m_passPhrase = passPhrase;}
protected:
QString passPhrase(){ return m_passPhrase;}
private:
QString m_passPhrase;
};
class XmlQStringSerializator : public XmlCryptedSerializator
{
public:
XmlQStringSerializator(QDomDocument *doc, QDomElement *node):XmlBaseSerializator(doc,node){}
XmlQStringSerializator(QDomDocument *doc, QDomElement *node):XmlCryptedSerializator(doc,node){}
private:
virtual void save(const QVariant &value,QString name);
virtual QVariant loadValue();

View File

@@ -135,6 +135,11 @@ QString XMLReader::lastError()
return m_error;
}
void XMLReader::setPassPhrase(const QString &passPhrase)
{
m_passPhrase = passPhrase;
}
bool XMLReader::extractFirstNode()
{
if (m_firstNode.isNull()){
@@ -166,6 +171,10 @@ QVariant XMLReader::getValue(QDomElement *node)
if (creator) {
QScopedPointer<SerializatorIntf>serializator(creator(m_doc.data(),node));
CryptedSerializator* cs = dynamic_cast<CryptedSerializator*>(serializator.data());
if (cs){
cs->setPassPhrase(m_passPhrase);
}
return serializator->loadValue();
}
return QVariant();

View File

@@ -44,14 +44,17 @@ public:
XMLReader();
XMLReader(QSharedPointer<QDomDocument> doc);
protected:
//ItemsReaderIntf interface
bool first();
bool next();
bool prior();
QString itemType();
QString itemClassName();
bool readItem(QObject *item);
int firstLevelItemsCount();
QString lastError();
void setPassPhrase(const QString &passPhrase);
virtual bool first();
virtual bool next();
virtual bool prior();
virtual QString itemType();
virtual QString itemClassName();
virtual bool readItem(QObject *item);
virtual int firstLevelItemsCount();
virtual bool prepareReader(QDomDocument *doc);
void readItemFromNode(QObject *item, QDomElement *node);
@@ -60,7 +63,7 @@ protected:
void readCollection(QObject *item, QDomElement *node);
QVariant getValue(QDomElement *node);
virtual QString lastError();
protected:
bool extractFirstNode();
QString m_error;
@@ -68,6 +71,11 @@ private:
QSharedPointer<QDomDocument> m_doc;
QDomElement m_curNode;
QDomElement m_firstNode;
QString m_passPhrase;
};
class FileXMLReader : public XMLReader{

View File

@@ -113,6 +113,11 @@ QByteArray XMLWriter::saveToByteArray()
return res;
}
void XMLWriter::setPassPhrase(const QString &passPhrase)
{
m_passPhrase = passPhrase;
}
QDomElement XMLWriter::putQObjectItem(QString name, QObject *item)
{
Q_UNUSED(name)
@@ -158,6 +163,10 @@ void XMLWriter::saveProperty(QString name, QObject* item, QDomElement *node)
if (creator) {
QScopedPointer<SerializatorIntf> serializator(creator(m_doc.data(),node));
CryptedSerializator* cs = dynamic_cast<CryptedSerializator*>(serializator.data());
if (cs){
cs->setPassPhrase(m_passPhrase);
}
serializator->save(
item->property(name.toLatin1()),
name

View File

@@ -44,10 +44,13 @@ public:
XMLWriter(QSharedPointer<QDomDocument> doc);
~XMLWriter() {}
private:
// ItemsWriterIntf interface
void putItem(QObject* item);
bool saveToFile(QString fileName);
QString saveToString();
QByteArray saveToByteArray();
void setPassPhrase(const QString &passPhrase);
void init();
QDomElement putQObjectItem(QString name, QObject* item);
void putChildQObjectItem(QString name, QObject* item, QDomElement* parentNode);
@@ -66,6 +69,7 @@ private:
QSharedPointer<QDomDocument> m_doc;
QString m_fileName;
QDomElement m_rootElement;
QString m_passPhrase;
};
}