diff --git a/ChangeLog b/ChangeLog index f9432697..7bdc3564 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23465,3 +23465,8 @@ * Applied Base64 encoding to the 'USERS.PASSWORD' field in the database. * Incremented the database version to 359. +2022-10-06 Fred Gleason + * Changed the type of the 'REPLICATORS.URL_PASSWORD` field in the + database to 'text'. + * Applied Base64 encoding to the 'REPLICATORS.URL_PASSWORD' field in + the database. diff --git a/docs/tables/replicators.txt b/docs/tables/replicators.txt index 226aad36..cd22f9b7 100644 --- a/docs/tables/replicators.txt +++ b/docs/tables/replicators.txt @@ -16,6 +16,6 @@ BITRATE int(10) unsigned QUALITY int(10) unsigned URL varchar(255) URL_USERNAME varchar(64) -URL_PASSWORD varchar(64) +URL_PASSWORD text Base64 encoded ENABLE_METADATA enum('N','Y') NORMALIZATION_LEVEL int(11) signed diff --git a/lib/dbversion.h b/lib/dbversion.h index d612ab2b..cedd9214 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -24,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 359 +#define RD_VERSION_DATABASE 360 #endif // DBVERSION_H diff --git a/lib/rdreplicator.cpp b/lib/rdreplicator.cpp index d8c1e186..76a303a9 100644 --- a/lib/rdreplicator.cpp +++ b/lib/rdreplicator.cpp @@ -157,13 +157,13 @@ void RDReplicator::setUrlUsername(const QString &str) const QString RDReplicator::urlPassword() const { - return GetValue("URL_PASSWORD").toString(); + return QByteArray::fromBase64(GetValue("URL_PASSWORD").toString().toUtf8()); } void RDReplicator::setUrlPassword(const QString &str) const { - SetRow("URL_PASSWORD",str); + SetRow("URL_PASSWORD",str.toUtf8().toBase64()); } @@ -227,7 +227,7 @@ QVariant RDReplicator::GetValue(const QString &field) const } -void RDReplicator::SetRow(const QString ¶m,QString value) const +void RDReplicator::SetRow(const QString ¶m,const QString &value) const { QString sql; @@ -238,6 +238,24 @@ void RDReplicator::SetRow(const QString ¶m,QString value) const } +void RDReplicator::SetRow(const QString ¶m,const QByteArray &value) const +{ + QString sql; + + if(value.size()==0) { + sql=QString("update `REPLICATORS` set `")+ + param+"`=NULL where "+ + "`NAME`='"+RDEscapeString(replicator_name)+"'"; + } + else { + sql=QString("update `REPLICATORS` set `")+ + param+"`='"+RDEscapeString(value)+"' where "+ + "`NAME`='"+RDEscapeString(replicator_name)+"'"; + } + RDSqlQuery::apply(sql); +} + + void RDReplicator::SetRow(const QString ¶m,int value) const { QString sql; diff --git a/lib/rdreplicator.h b/lib/rdreplicator.h index 9940c57c..c4a5eb40 100644 --- a/lib/rdreplicator.h +++ b/lib/rdreplicator.h @@ -2,7 +2,7 @@ // // Abstract a Rivendell replicator configuration // -// (C) Copyright 2010,2016 Fred Gleason +// (C) Copyright 2010-2022 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -21,7 +21,7 @@ #ifndef RDREPLICATOR_H #define RDREPLICATOR_H -#include +#include #include @@ -62,7 +62,8 @@ class RDReplicator private: QVariant GetValue(const QString &field) const; - void SetRow(const QString ¶m,QString value) const; + void SetRow(const QString ¶m,const QString &value) const; + void SetRow(const QString ¶m,const QByteArray &value) const; void SetRow(const QString ¶m,int value) const; void SetRow(const QString ¶m,unsigned value) const; QString replicator_name; diff --git a/rdrepld/rdrepld.cpp b/rdrepld/rdrepld.cpp index 320b45aa..4c2cb498 100644 --- a/rdrepld/rdrepld.cpp +++ b/rdrepld/rdrepld.cpp @@ -227,7 +227,8 @@ void MainObject::LoadReplicators() config->setQuality(q->value(6).toUInt()); config->setUrl(q->value(7).toString()); config->setUrlUsername(q->value(8).toString()); - config->setUrlPassword(q->value(9).toString()); + config-> + setUrlPassword(QByteArray::fromBase64(q->value(9).toString().toUtf8())); config->setEnableMetadata(RDBool(q->value(10).toString())); config->setNormalizeLevel(q->value(11).toInt()); switch(config->type()) { diff --git a/utils/rddbmgr/revertschema.cpp b/utils/rddbmgr/revertschema.cpp index 9ad921ef..150b4f7d 100644 --- a/utils/rddbmgr/revertschema.cpp +++ b/utils/rddbmgr/revertschema.cpp @@ -41,6 +41,36 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) // NEW SCHEMA REVERSIONS GO HERE... + // + // Revert 360 + // + if((cur_schema==360)&&(set_schemanext()) { + if(!q->value(1).isNull()) { + sql=QString("update `REPLICATORS` set ")+ + "`URL_PASSWORD`='"+ + RDEscapeString(QByteArray::fromBase64(q->value(1).toString().toUtf8()))+"' "+ + "where `NAME`='"+RDEscapeString(q->value(0).toString())+"'"; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + } + } + delete q; + sql=QString("alter table `REPLICATORS` ")+ + "modify column `URL_PASSWORD` varchar(64)"; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + + WriteSchemaVersion(--cur_schema); + } + // // Revert 359 // @@ -70,6 +100,7 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) if(!RDSqlQuery::apply(sql,err_msg)) { return false; } + WriteSchemaVersion(--cur_schema); } diff --git a/utils/rddbmgr/schemamap.cpp b/utils/rddbmgr/schemamap.cpp index 5b2bb3ba..4bb347a6 100644 --- a/utils/rddbmgr/schemamap.cpp +++ b/utils/rddbmgr/schemamap.cpp @@ -160,7 +160,7 @@ void MainObject::InitializeSchemaMap() { global_version_map["3.4"]=317; global_version_map["3.5"]=346; global_version_map["3.6"]=347; - global_version_map["4.0"]=359; + global_version_map["4.0"]=360; } diff --git a/utils/rddbmgr/updateschema.cpp b/utils/rddbmgr/updateschema.cpp index a51880f3..fcb40727 100644 --- a/utils/rddbmgr/updateschema.cpp +++ b/utils/rddbmgr/updateschema.cpp @@ -11083,6 +11083,37 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg) WriteSchemaVersion(++cur_schema); } + if((cur_schema<360)&&(set_schema>cur_schema)) { + sql=QString("alter table `REPLICATORS` ")+ + "modify column `URL_PASSWORD` text"; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + sql=QString("select ")+ + "`NAME`,"+ // 00 + "`URL_PASSWORD` "+ // 01 + "from `REPLICATORS`"; + q=new RDSqlQuery(sql); + while(q->next()) { + if(q->value(1).toString().isEmpty()) { + sql=QString("update `REPLICATORS` set ")+ + "`URL_PASSWORD`=null "; + } + else { + sql=QString("update `REPLICATORS` set ")+ + "`URL_PASSWORD`='"+ + RDEscapeString(q->value(1).toString().toUtf8().toBase64())+"' "; + } + sql+="where `NAME`='"+RDEscapeString(q->value(0).toString())+"'"; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + } + delete q; + + WriteSchemaVersion(++cur_schema); + } + // NEW SCHEMA UPDATES GO HERE...